繁体   English   中英

VBA-遍历3列

[英]vba - loop through 3 columns

我的Excel上有4列。

对于A列中的每个元素,我想遍历C列中的每个元素。如果C列中的元素等于A列,则它将返回B列中D列的值。

例如,B4应该返回“ dog”。 B5应该返回“鸡蛋”。 B6应该返回“ cat”。

在此处输入图片说明

在此处输入图片说明

我运行了VBA代码。 B列中的所有值都返回“ egg”。 有人可以看看我下面的VBA代码吗?

Sub testing_click()

Dim x As Variant
Dim arr1 As Variant
Dim i , r As Long
arr1 = Worksheets("testing").Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value


For Each x In arr1
    For r = 1 To 5
    If x = Trim(Worksheets("testing").Cells(r, "c").Value) Then
        For i = 1 To Worksheets("testing").Range("a1048576").End(xlUp).Row
            Worksheets("testing").Cells(i, "b").Value = Worksheets("testing").Cells(r, "d").Value
        Next i
    End If
    Next r
Next x

End Sub

必须将arr1缩小为数组...例如Dim arr1() As Variant

我还建议用更多的VBA之类的循环结构代替End(xlUpDownLeftRightHomeEnd) ,例如

Sub ClassicalLoops()
Dim OuterLoop As Integer, InnerLoop As Integer
Dim DataRange As Range, LookupRange As Range

    Set DataRange = [A1]
    Set LookupRange = [C1]

    OuterLoop = 1
    Do While DataRange(OuterLoop, 1) <> ""
        InnerLoop = 1
        Do While LookupRange(InnerLoop, 1) <> ""
            If DataRange(OuterLoop, 1) = LookupRange(InnerLoop, 1) Then
                DataRange(OuterLoop, 2) = LookupRange(InnerLoop, 2)
                Exit Do
            Else
                InnerLoop = InnerLoop + 1
            End If
        Loop
        OuterLoop = OuterLoop + 1
    Loop
End Sub

那里只有一个太多的循环。 它实际上所做的是正确找到第一个值,并将其放在“ B”列的所有12行中。 然后找到第二个值,并重新分配“ B”列的所有12行。

摆脱最里面的循环,在同名的地方添加计数器,您就可以开始了。 现在,它不再浏览“ A”列中的所有单元,而是只浏览已填充的单元,并在找到匹配项后立即终止内部循环。

还纠正了声明中的错误。 Dim i, r As Long实际上仅将r转换为long,而i作为Variant。 Dim i as Long, r as Long会将它们都捕获为Long类型。

希望能帮助到你!

Sub testing_click()

Dim x As Variant
Dim arr1 As Variant
Dim i as Long, r As Long
arr1 = Worksheets("testing").Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value

'initialize row counter out here
i = 1
For Each x In arr1
    For r = 1 To 5
        If x = Trim(Worksheets("testing").Cells(r, "c").Value) Then
            Worksheets("testing").Cells(i, "b").Value = Worksheets("testing").Cells(r, "d").Value
            'Increment row counter and exit inner loop
            i = i + 1
            Exit For
        End If
    Next r
Next x

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM