[英]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.