2017-06-20 83 views
-1

我想遍历列A到列B中的每个数字。 如果存在匹配,则通过列C循环该数字。 如果存在匹配,我想要结果将在E和F列中返回。 每列的行数都是可变的。也可以有多个结果。在另一个循环中使用循环的结果

在我的例子从列A中的号码1通过柱B.环状如果发现匹配1现在通过柱C.环状如果存在匹配,则列E和F = C和D.

Example

+1

请始终显示你的代码! – Enigmativity

+1

你真的应该读[问]。你的问题很混乱。 “我想匹配第1列A列到第2列A列的数字”意思?当你说“所有列的长度都不相同”时,这是否意味着列中的数据长度不同,还是表示列数变化,还是表示列中的行数有所不同?等等等等 – Enigmativity

+0

你的**代码**在哪里?你知道,你声称你写的东西不符合你的期望?在没有看到你写的代码的情况下(关于什么是你不期望的事情的恰当叙述),你的问题就会变成另一个讽刺,懒惰,愚蠢,寄生和(最后)恳求让别人做你的工作的恳求为你。也许你可以花几分钟时间来纠正这一点。 – Jeeped

回答

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

+0

您可能想在这里和那里限定父级工作表。 – Jeeped

+0

谢谢!这工作完美。我一直在练习阵列,所以这对我有很大的帮助。在这里有几件事情,我需要查找,以获得更好的了解,这将有助于我的学习过程更多。 – ks9

+0

@ ks9:感谢您的评论。 –

0

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

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 
+0

嘿Raunak,谢谢你的回答和解释。这也很好。 – ks9