2017-06-20 124 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