在另一个循环中使用循环的结果

时间:2017-06-20 03:55:33

标签: excel vba excel-vba loops

我想循环列A到列B中的每个数字。 如果匹配,则通过列C循环该数字。 如果匹配,我希望在E和F列中返回结果。 每列将具有可变数量的行。也可能有多种结果。

在我的示例中,A列中的数字1通过B列循环。如果找到匹配,则现在通过C列循环。如果匹配,则列E和F = C和D.

Example

2 个答案:

答案 0 :(得分:0)

如果您的数据安排如下图所示,那么代码将是这样的。

Sub test()
    Dim vDB1, vDB2, vDB3, vR()
    Dim i As Long, j As Long, k As Long, n As Long

    vDB1 = Range("a2", Range("a" & Rows.Count).End(xlUp))
    vDB2 = Range("b2", Range("b" & Rows.Count).End(xlUp))
    vDB3 = Range("c2", Range("d" & Rows.Count).End(xlUp))
    Range("e2:f2").Resize(Rows.Count - 1) = Empty
    For i = 1 To UBound(vDB1, 1)

        For j = 1 To UBound(vDB2, 1)
            If vDB1(i, 1) = vDB2(j, 1) Then
                For k = 1 To UBound(vDB3, 1)
                    If vDB1(i, 1) = vDB3(k, 1) Then
                        n = n + 1
                        ReDim Preserve vR(1 To 2, 1 To n)
                        vR(1, n) = vDB3(k, 1)
                        vR(2, n) = vDB3(k, 2)
                    End If
                Next
            End If
        Next j
    Next i
    If n > 0 Then
        Range("e2").Resize(n, 2) = WorksheetFunction.Transpose(vR)
    End If

End Sub

enter image description here

答案 1 :(得分:0)

这是一个应该完成这项工作的代码。但是如果Tab1 / Tab2值不唯一,那么它可能会多次执行查找。例如,如果在标签2中有1代替9,它将在标签4中显示1行两次。如果你想避免它,你将需要修改我的代码

Set tab1_list = Sheets("sheet1").Range("B6:B10")
Set tab2_list = Sheets("sheet1").Range("C6:C10")
Set tab3_list_lookup = Sheets("sheet1").Range("E6:E10")
Set Tab3_List_value = Sheets("sheet1").Range("F6:F10")

Set output_location = Sheets("sheet1").Range("H6")

For Each cell1 In tab1_list
    For Each cell2 In tab2_list

    If cell1.Value = cell2.Value Then

    For index_no = 1 To tab3_list_lookup.Cells.Count

    If tab3_list_lookup.Cells(index_no).Value = cell2.Value Then

    output_location.Value = tab3_list_lookup.Cells(index_no).Value
    output_location.Offset(0, 1) = Tab3_List_value.Cells(index_no).Value
    Set output_location = output_location.Offset(1, 0)

    End If

    Next index_no

    End If

    Next cell2


Next cell1