2017-06-13 58 views
1

我正在努力找到一種方法來描述這一點。基於Excel中的兩個範圍值設置值VBA

我有一個包含兩個工作表「最終」和「原始」的電子表格。 Final有一個範圍,用戶可以在單元格C3到C13中輸入一個ID。

從那裏我想遍歷該範圍,直到它爲空,並使用這些值循環遍歷Raw中的一個範圍,最終將這些值拉到Final中的第三個範圍。

如果我們用SQL語言談論一對多關係,那它本質上就是一個內連接。

我想到了幾種不同的方法,包括使用application.worksheetfunction.index,但我正在努力想辦法實現這一點。

編輯補充代碼:

Dim indexPO As Long 
Dim i As Long 
Dim endRow As Long 

endRow = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row 

indexPO = Sheets(1).Cells(2, "C") 


Do While Worksheets(1).Cells(i, "C").Value <> "" 
    indexPO = indexPO + 1 
    Do While Worksheets(2).Cells = indexPO 
     Worksheets(1).Cells(i, "A") = Worksheets(2).Cells(i, "A") 
     If Worksheets(2).Cells(i, "A") = "" Then 
      Exit Do 
     End If 

    Loop 
Loop 

範圍1個 ID AAAA BBBB CCCC

範圍2 ID描述 AAAA牛 AAAA奶牛 AAAA奶牛 AAAA牛 BBBB駝鹿 BBBB Moose BBBB Moose FFFF豬 FFFF豬 FFFF豬

希望的輸出

ID描述 AAAA牛 AAAA奶牛 AAAA奶牛 AAAA牛 BBBB駝鹿 BBBB駝鹿 BBBB駝鹿

+2

你能粘貼你已經嘗試過的代碼嗎?你有沒有考慮過VLookup? – rayzinnz

+0

我需要在第二個範圍內填充第三個範圍的記錄,但是第一個範圍的索引要滿足,然後我可以查找其餘的範圍。所以我需要解決我猜的第一步。 –

+0

我不得不同意rayzinnz,這聽起來像是您尋找多種查找解決方案。也許如果你提供了一個數據的例子以及預期的輸出,它會更好地解釋你的請求。 – goodfella

回答

0

假設工作表(1 )是您的「最終」工作表,並且工作表(2)是您的「原始」工作表,請嘗試此作爲啓動器:

Dim userRangeRow As Long, rawRow As Long, mergedRow As Long 
Dim ID As Variant 

mergedRow = 3 

For userRangeRow = 3 To 13 
    ID = Worksheets(1).Cells(userRangeRow, "C").Value 
    If ID = "" Then 
     Exit For 
    End If 

    rawRow = 1 
    Do While Worksheets(2).Cells(rawRow, 1).Value <> "" 
     If Worksheets(2).Cells(rawRow, 1).Value = ID Then 
      Worksheets(1).Cells(mergedRow, 1) = Worksheets(2).Cells(rawRow, 1) 
      Worksheets(1).Cells(mergedRow, 2) = Worksheets(2).Cells(rawRow, 2) 
      mergedRow = mergedRow + 1 
     End If 
     rawRow = rawRow + 1 
    Loop 
Next 
+0

這工作完美。我只需要抵消mergedRow以適應我的目標範圍。非常感謝! –