我有这样的数据
我想让它看起来像这样
我编写的通过A列中的所有值并将值偏移到B列的代码是
Sub FindString()
Dim A As Range, r As Range
Set A = Intersect(ActiveSheet.UsedRange, Range("A:A"))
For Each r In A
If IsNumeric(Left(r, 6)) Then
r.Copy r.Offset(0, 1)
End If
Next r
End Sub
如果前6个值为数字,此代码将从A列复制数据到B列,但我需要帮助将数据复制到B列中的所有空白单元格,直到它在A列中找到匹配的值为止。
发布于 2015-11-01 14:31:11
Sub FindString()
Dim A As Range, r As Range, last As Range
Set A = Intersect(ActiveSheet.UsedRange, Range("A:A"))
For Each r In A
If IsNumeric(Left(r, 6)) Then Set last = r
If Not last Is Nothing Then last.Copy r.Offset(0, 1)
Next r
End Sub
p.s:使用UsedRange时要注意问题。考虑搜索该站点,以找到列中最后一个非空单元格的最佳方法。
编辑
使用公式的非VBA方法(可能更快)
At cell B4: `=A4`
At cell B5: `=IF(ISNUMBER(VALUE(LEFT(A5, 6))), A5, B4)`
Now copy B5, select the whole column B until last cell and paste.
发布于 2015-11-01 15:01:54
这里有一个快速方法(巧合地类似于ASH的手动方法)
Sub Demo()
Dim r As Range
With ActiveSheet
Set r = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
r.Offset(0, 1).Formula = "=IF(ISNUMBER(VALUE(LEFT(A4,6))),A4,B3)"
r.Offset(0, 1) = r.Offset(0, 1).Value
End Sub
在我的系统上运行100,000行的<1s
https://stackoverflow.com/questions/33467893
复制相似问题