基于Excel VBA中的两个范围值设置值

基于Excel VBA中的两个范围值设置值,vba,excel,Vba,Excel,我正努力想办法表达这个 我有一个电子表格,有两张工作表“最终”和“原始”。Final有一个范围,用户可以在其中向单元格C3到C13输入ID 从这里开始,我想循环这个范围,直到它为空,然后使用这些值在Raw中循环一个范围,最终在Final中将这些值拉到第三个范围 如果我们用一对多关系的SQL术语来讨论,它本质上就是一个内部连接 我已经想到了几种不同的方法,包括使用application.worksheetfunction.index,但我正在努力想出一种实现方法 编辑以添加代码: Dim inde

我正努力想办法表达这个

我有一个电子表格,有两张工作表“最终”和“原始”。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
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以适应我的目的地范围。非常感谢!