2017-06-13 81 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以适应我的目标范围。非常感谢! –