Excel 如果一个单元格为空,另一个单元格为空,则复制并粘贴
因此,当代码继续运行时,数据将粘贴到B列。它将执行条件检查以查看B列中是否有任何值,并将值粘贴到相邻的a列。我需要使其执行两个条件检查: 如果b列中有值,则在粘贴前检查A列中是否有值,这样就不会覆盖已粘贴的不同数据Excel 如果一个单元格为空,另一个单元格为空,则复制并粘贴,excel,vba,Excel,Vba,因此,当代码继续运行时,数据将粘贴到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, -
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
y.Sheets(“编译”)范围(“A:B”)中的每个单元格的
如果范围(“B:B”).Value”和范围(“A:A”).Value=”“,则
单元格偏移量(0,-1).Paste特殊值
如果结束
下一个
您很接近,不要尝试在多列范围内循环:
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
子测试()
对于y.Sheets(“编译”)范围(“B:B”)中的每个单元格
如果单元格.Value“”和单元格.Offset(0,-1).Value=“”则
单元格偏移量(0,-1).Value=Cell.Value
如果结束
下一个
端接头
注意:您正在遍历
范围(“B:B”)
中的每个单元格,这可能是不必要的。如果您使用lastrow
值,或者像range(“B2:B1000”)
这样的静态范围,效果会更好。或者您可以使用一个条件退出循环,如If Cell.Value=”“,然后退出以获得
以下是一个版本的代码,它实现了dwirony在回答中提到的最后一行值。这也会将所有内容都放入数组中,因此如果您有一个非常大的数据集,那么它可能会运行得更快一些
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
如果只指定值
Cell.Offset(0,-1)。value=Cell.value
,而不是专门粘贴它,不是更简单吗?我没看到他是作为值粘贴的,所以你是正确的:)谢谢!你的便条很有用,你是对的。