Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果一个单元格为空,另一个单元格为空,则复制并粘贴_Excel_Vba - Fatal编程技术网

Excel 如果一个单元格为空,另一个单元格为空,则复制并粘贴

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, -

因此,当代码继续运行时,数据将粘贴到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
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
,而不是专门粘贴它,不是更简单吗?我没看到他是作为值粘贴的,所以你是正确的:)谢谢!你的便条很有用,你是对的。