因此,随着代码继续运行,数据将粘贴到B列中,它将进行条件检查以查看B列中是否有任何值,并将值粘贴到相邻的A列中。我需要这样做两个条件检查:
如果b列中有值,但是在粘贴之前先检查A列中是否有值,这样它就不会覆盖已经粘贴的其他数据。
For Each Cell In y.Sheets("Compiled").Range("A:B")
If Range("B:B").Value <> "" And Range("A:A").Value = "" Then
Cell.Offset(0, -1).PasteSpecial xlPasteValues
End If
Next
答案 0 :(得分:1)
您接近了,不要尝试在多列范围内循环
Sub Test()
For Each Cell In y.Sheets("Compiled").Range("B:B")
If Cell.Value <> "" And Cell.Offset(0, -1).Value = "" Then
Cell.Offset(0, -1).Value = Cell.Value
End If
Next
End Sub
注意::您正在遍历Range("B:B")
中的每个单元格,这可能是不必要的。如果您使用lastrow
值或Range("B2:B1000")
这样的静态范围会更好。或者,您可以使用诸如If Cell.Value = "" Then Exit For
之类的条件退出循环。
答案 1 :(得分:0)
这是实现dwirony在回答中提到的lastrow值的代码版本。这也会将所有内容都放入数组,因此如果您有非常大的数据集,它可能会更快一些。
Option Explicit
Sub test()
Dim ACol As Variant
Dim BCol As Variant
Dim lastrow As Long
Dim i As Long
lastrow = Range("B:B").Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).row
BCol = Range("B1:B" & lastrow).Value
ACol = Range("A1:A" & lastrow).Value
For i = LBound(BCol) To UBound(BCol)
If IsEmpty(ACol(i, 1)) And Not IsEmpty(BCol(i, 1)) Then
ACol(i, 1) = BCol(i, 1)
End If
Next i
Range("A1:A" & lastrow).Value = ACol
End Sub