基于Excel VBA中的两个范围值设置值
我正努力想办法表达这个 我有一个电子表格,有两张工作表“最终”和“原始”。Final有一个范围,用户可以在其中向单元格C3到C13输入ID 从这里开始,我想循环这个范围,直到它为空,然后使用这些值在Raw中循环一个范围,最终在Final中将这些值拉到第三个范围 如果我们用一对多关系的SQL术语来讨论,它本质上就是一个内部连接 我已经想到了几种不同的方法,包括使用基于Excel VBA中的两个范围值设置值,vba,excel,Vba,Excel,我正努力想办法表达这个 我有一个电子表格,有两张工作表“最终”和“原始”。Final有一个范围,用户可以在其中向单元格C3到C13输入ID 从这里开始,我想循环这个范围,直到它为空,然后使用这些值在Raw中循环一个范围,最终在Final中将这些值拉到第三个范围 如果我们用一对多关系的SQL术语来讨论,它本质上就是一个内部连接 我已经想到了几种不同的方法,包括使用application.worksheetfunction.index,但我正在努力想出一种实现方法 编辑以添加代码: Dim inde
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
Dim indexPO尽可能长
我想我会坚持多久
暗尾行与长尾行相同
endRow=工作表(2).单元格(Rows.Count,1).结束(xlUp).行
indexPO=表(1)单元格(2,“C”)
Do While工作表(1).单元格(i,“C”).值“”
indexPO=indexPO+1
Do While工作表(2)。单元格=indexPO
工作表(1).单元格(i,“A”)=工作表(2).单元格(i,“A”)
如果工作表(2).单元格(i,“A”)=”则
退出Do
如果结束
环
环
范围1
身份证件
AAAA
BBBB
中交
范围2
ID描述
AAAA奶牛
AAAA奶牛
AAAA奶牛
AAAA奶牛
BBBB驼鹿
BBBB驼鹿
BBBB驼鹿
FFFF清管器
FFFF清管器
FFFF清管器
期望输出
ID描述
AAAA奶牛
AAAA奶牛
AAAA奶牛
AAAA奶牛
BBBB驼鹿
BBBB驼鹿
BBBB Moose假设工作表(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
Dim USERRANGERROW尽可能长,rawRow尽可能长,mergedRow尽可能长
Dim-ID作为变量
mergedRow=3
对于userRangeRow=3到13
ID=工作表(1).单元格(userRangeRow,“C”).值
如果ID=”“,则
退出
如果结束
罗罗=1
Do While工作表(2).单元格(原始行,1).值“”
如果工作表(2).Cells(rawRow,1).Value=ID,则
工作表(1).单元格(mergedRow,1)=工作表(2).单元格(rawRow,1)
工作表(1).单元格(mergedRow,2)=工作表(2).单元格(rawRow,2)
mergedRow=mergedRow+1
如果结束
rawRow=rawRow+1
环
下一个
假设工作表(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
Dim USERRANGERROW尽可能长,rawRow尽可能长,mergedRow尽可能长
Dim-ID作为变量
mergedRow=3
对于userRangeRow=3到13
ID=工作表(1).单元格(userRangeRow,“C”).值
如果ID=”“,则
退出
如果结束
罗罗=1
Do While工作表(2).单元格(原始行,1).值“”
如果工作表(2).Cells(rawRow,1).Value=ID,则
工作表(1).单元格(mergedRow,1)=工作表(2).单元格(rawRow,1)
工作表(1).单元格(mergedRow,2)=工作表(2).单元格(rawRow,2)
mergedRow=mergedRow+1
如果结束
rawRow=rawRow+1
环
下一个
你能粘贴你已经尝试过的代码吗?你考虑过VLookup吗?我需要在第三个范围中填充第二个范围中的记录,但使用第一个范围中的索引,然后我可以VLookup其余的记录。所以我想我需要解决第一步。我必须同意rayzinnz的观点,听起来你在寻找多重查找解决方案。也许如果您提供一个数据示例以及预期的输出,它会更好地解释您的请求。好的..告诉我,由于您提到了内部连接的相似性,我是否符合您的请求。假设A列和B列都有数据。是否要在a列和B列之间找到匹配项,并将这些匹配值复制到C列?是。我想将这两个范围合并到范围C中。我将在主帖子中提供一些示例数据和所需的输出。你能粘贴你已经尝试过的代码吗?你考虑过VLookup吗?我需要在第三个范围中填充第二个范围中的记录,但使用第一个范围中的索引,然后我可以VLookup其余的记录。所以我想我需要解决第一步。我必须同意rayzinnz的观点,听起来你在寻找多重查找解决方案。也许如果您提供一个数据示例以及预期的输出,它会更好地解释您的请求。好的..告诉我,由于您提到了内部连接的相似性,我是否符合您的请求。假设A列和B列都有数据。是否要在a列和B列之间找到匹配项,并将这些匹配值复制到C列?是。我想将这两个范围合并到范围C中。我将在主要文章中提供一些示例数据和所需的输出。这非常有效。我只需要偏移mergedRow以适应我的目的地范围。非常感谢!这很有效。我只需要偏移mergedRow以适应我的目的地范围。非常感谢!