我正在努力寻找一种方法来表达这一点。
我有一个包含两个工作表“Final”和“Raw”的电子表格。 Final具有一个范围,用户可以在其中输入ID到单元格C3到C13。
从那里我想循环遍历该范围,直到它为空并使用值循环遍历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驼鹿 BBBB驼鹿 FFFF猪 FFFF猪 FFFF猪
期望的输出
ID说明 AAAA牛 AAAA牛 AAAA牛 AAAA牛 BBBB驼鹿 BBBB驼鹿 BBBB驼鹿
答案 0 :(得分: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