Excel VBA代码,用于为重复查找值返回多个唯一的vlookup值

Excel VBA代码,用于为重复查找值返回多个唯一的vlookup值,vba,excel,Vba,Excel,我有一个excel文件和3个工作表:(1)报告,(2)1类和(3)2类 “报告”工作表包含类别1和类别2数据的摘要信息,以及每个类别的唯一ID和分组值 我需要将唯一值从“Category1”工作表的“Category1SubId”列复制到“column-D”中的“Report”工作表中,然后将“Category1Value”的相关值从“Category1”工作表复制到“column-E”中的“Report”工作表中 例如,formula/VBA代码将Apple的值从1,2,3,4,5复制到“Ca

我有一个excel文件和3个工作表:(1)报告,(2)1类和(3)2类

“报告”工作表包含类别1和类别2数据的摘要信息,以及每个类别的唯一ID和分组值

我需要将唯一值从“Category1”工作表的“Category1SubId”列复制到“column-D”中的“Report”工作表中,然后将“Category1Value”的相关值从“Category1”工作表复制到“column-E”中的“Report”工作表中

例如,formula/VBA代码将Apple的值从1,2,3,4,5复制到“Category1”工作表的“Report”工作表中,然后将“Apple和1”组合的“Breaken”值从Category1工作表复制到Report工作表的cell-E2中,依此类推

我尝试了索引、VLOOKUP、行和搜索公式的组合,但都没有效果。我也试过用VBA代码来做,但没用

任何人都可以通过公式或VBA代码来帮助解决这个难题吗

此工作表的示例为

我试着遵循VBA代码

Sub CopyData()

Dim category1LookupValueRange As Range
Dim category2LookupValueRange As Range

Dim category1SourceRange As Range
Dim category2SourceRange As Range

Dim category1TargetRange As Range
Dim category2TargetRange As Range

Dim targetValue As String

Set category1LookupValueRange = Worksheets("Report").Range("C2:C30")
Set category2LookupValueRange = Worksheets("Report").Range("F2:F30")

Set category1SourceRange = Worksheets("Category1").Range("A2:C30")
Set category2SourceRange = Worksheets("Category2").Range("A2:C30")

Set category1TargetRange = Worksheets("Report").Range("D2:E30")
Set category2TargetRange = Worksheets("Report").Range("G2:H30")

Dim iRow As Integer
Dim category1LookupValue As Object
Dim category1Id As Object
Dim category1IdValue As Object

Dim category2LookupValue As Object
Dim category2Id As Object
Dim category2IdValue As Object

For iRow = 1 To category1LookupValueRange.Count

Set category1LookupValue = category1LookupValueRange.Cells(iRow, 1)
Set category2LookupValue = category2LookupValueRange.Cells(iRow, 1)

Set category1Id = category1SourceRange.Range.Cells(category1SourceRange.Find(category1LookupValue, LookAt:=xlWhole), 1)
Set category2Id = category2SourceRange.Range.Cells(category2SourceRange.Find(category2LookupValue, LookAt:=xlWhole), 1)

Set category1IdValue = category1SourceRange.Range.Cells(category1SourceRange.Find(category1LookupValue, LookAt:=xlWhole), 1)
Set category2IdValue = category2SourceRange.Range.Cells(category2SourceRange.Find(category2LookupValue, LookAt:=xlWhole), 1)


If Not (category1LookupValue Is Nothing) Then
    If (category1SourceRange.Cells(iRow, 1) = category1LookupValue) Then

        Set category1TargetRange.Range.Cells(iRow, 1) = category1Id
        Set category2TargetRange.Range.Cells(iRow, 1) = category2Id

   End If
End If

Next iRow
报告工作表中单元格范围D2到D30中的以下数组公式


{=IF(iError)(SMALL(IF(IF(iError)(SEARCH($C2,Category1!A$2:$A$30)),FALSE,TRUE),ROW(Category1!$B$1:$B$30)),ROW(Category1!$B$30)),“”,INDEX(Category1!$A$2:$C$100,SMALL(IF(IF(iError(SEARCH($C2,Category1!$A$A$A$30)),FALSE,TRUE),ROW(Category1!$B$1:$B$30)),ROW(Category1:$B$30)),ROW(Category1)),B$1)),100,B$B$1)}

列“Category1”和“Category2”中的数据与表“Category1”和“Category2”中的数据顺序相同。在任何情况下,您都会更改序列吗?您会从“Category1SubId”写入*复制唯一值*,但所有SubID条目都是唯一的。您应该知道,这不是一个免费的代码编写服务,而是为了帮助其他人编写他们试图开发的代码或函数。因此,我们希望看到清晰的问题,包括数据示例、尝试代码、实际输出、期望输出、解决问题的研究工作等。请阅读帮助页以了解有关以下方面的信息:;还有@RonRosenfeld-我为没有证明我已经尝试了公式和VBA代码来解决这个问题而道歉。请参考已编辑的问题,并附上我的尝试证明。我也知道这个地方不是提供免费代码编写服务的。我已请求帮助解决我的问题。查看代码和示例通常有助于澄清问题,并提供更集中的建议。在这种情况下,似乎只需将其他两个工作表中的列粘贴到相应列的报告工作表中即可生成报告。我遗漏了什么?@RonRosenfeld——如果只有一次——我肯定会在工作表之间复制并粘贴值,然后继续前进。这是一个示例电子表格。我每周都会得到不同行数(记录)的新数据。我需要有智能报告选项卡和公式/工作VBA代码,我可以重复使用这些代码从Category1和Category2电子表格复制vlookup值以获取新数据。因此,我试图通过公式/VBA代码来解决这个问题。