使用 if 语句从其他工作表复制范围的循环

Loop for copying range from other sheet with if statement

提问人:Mamed Aliyev 提问时间:10/19/2023 最后编辑:Mark RotteveelMamed Aliyev 更新时间:10/20/2023 访问量:69

问:

我是VBA的新手,不知道如何修改此代码,以从其他工作表中获取范围值。

Sub dav()
    For i = 1 To 10
        If Sheets("yan").Range("A" & i).Value = Sheets("fev").Range("A" & i).Value Then
            Sheets("yan").Range("B" & i:"O" & i).Value = Sheets("fev").Range("C" & i:"P" & i).Value
        End If
    Next i
End Sub

我不知道如何更正这部分.Range("B" & i:"O" & i)

this is two sheets

Excel VBA for-loop

评论

2赞 JohnM 10/19/2023
也许Range("B" & i & ":O" & i)
0赞 Mamed Aliyev 10/19/2023
谢谢。是的,它有效.但仅过滤第一个单元格 (A1)
0赞 Dominique 10/19/2023
这回答了你的问题吗?如何避免在 Excel VBA 中使用“选择”
1赞 Notus_Panda 10/19/2023
这里涉及哪里的过滤?@Dominique选择在这里涉及什么?OP:您的代码检查同一行的 A 值在两张纸上是否相同,显然第一张是这种情况,但 yan 的 A2 值在 fev 工作表的第 5 行。

答:

2赞 CDP1802 10/19/2023 #1

您需要将 yan 中的值与 fev 中的 A 列匹配,以找到要复制的正确行。

Option Explicit

Sub dav()

    Dim r As Long, s As String, lastrow As Long
    Dim wsFev As Worksheet, v, n As Long
    Set wsFev = Sheets("fev")
    
    With Sheets("yan")
        lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For r = 1 To lastrow
            s = .Range("A" & r)
            v = Application.Match(s, wsFev.Range("A:A"), 0)
            If Not IsError(v) Then
                'copy columns B:O
                wsFev.Range("B" & v).Resize(, 14).Copy .Range("B" & r)
                n = n + 1
            End If
        Next
    End With
    MsgBox n & " rows copied from Sheet fev", vbInformation

End Sub