这是我的代码:
Sub fillcells()
Dim rngA As Range
Dim arrayFinal As Variant
Dim i As Long
For Each rngA In Range("A:A")
If rngA.Value Like "*-*" Then
Debug.Print True
' Split range A value into an array
arrayFinal = Split(rngA.Value, "-")
'add n rows below the cells containig "-"
rngA.Offset(1, 0).Resize(UBound(arrayFinal)).EntireRow.Insert Shift:=xlDown
For i = LBound(arrayFinal) To UBound(arrayFinal)
rngA.Offset(i, 0).Value = arrayFinal(i)
Next i
End If
Next rngA
End Sub
编者注:代码错误,因为If
位于For
循环内,但结尾(End If
)位于Next rngA
之后)!这是一个错字还是错误?
在工作表上,我有2个填充列(A和B)。我的代码循环列A并检查包含“ - ”字符的单元格。如果找到它,在该单元格下面添加一个新行,并在A列中的“ - ”之后用字符串填充它。 但我的问题是这样的:在B列中,我之前创建了很多空行。我想用B列中的空行填充字符串。我该怎么做?
更具体,例如:
column B
row1: hello1
row2: (empty)
row3: (empty)
row4: hello2
row5: hello3
row6: hello4
row7: (empty)
row8: hello5
...
rown: .....
我想要的是这个:
row1: hello1
row2: hello1
row3: hello1
row4: hello2
row5: hello3
row6: hello4
row7: hello4
row8: hello5
...
rown: .....
我需要的是一个优化的代码,所以我必须使用(如果可能的话)相同的循环,因为我有很多填充的行。
答案 0 :(得分:0)
我修改了你的代码(见下文),为你提供了一种做你想做的事情。这可能不是最好的方式,但至少它会让你知道你能做些什么。
Sub fillcells()
Dim rngA As Range
Dim rngB As Range ' <~~ NEW CODE
Dim arrayFinal As Variant
Dim i As Long
For Each rngA In Range("A:A")
If rngA.Value Like "*-*" Then
Debug.Print True
' Split range A value into an array
arrayFinal = Split(rngA.Value, "-")
'add n rows below the cells containig "-"
rngA.Offset(1, 0).Resize(UBound(arrayFinal)).EntireRow.Insert Shift:=xlDown
For i = LBound(arrayFinal) To UBound(arrayFinal)
rngA.Offset(i, 0).Value = arrayFinal(i)
Next i
End If
' NEW CODE STARTS HERE
Set rngB = rngA.Offset(0, 1)
If rngA.Value <> vbNullString And rngB.Value = vbNullString Then
rngB.Value = rngB.Offset(-1, 0).Value
End If
' NEW CODE ENDS HERE
Next rngA
End Sub
首先,我添加了一个新的Range变量(rngB
)。然后,我将其设置为从rngA
偏移的单个列。最后,如果单元格列A有一些文本但在B列中为空,那么我复制 B列中上一行的值到B列当前行。所有这些都在您现有的循环中,如您所愿。