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

我有一个包含3个工作表的Excel文件:(1)报告,(2)类别-1和(3)类别-2。

“报告”工作表包含具有每个类别和分组值的唯一ID的类别1和类别2数据的摘要信息。 看到附加的示例图像 。

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

例如,公式/ VBA代码将Apple 1,2,3,4,5的值复制到“类别1”工作表的“报表”工作表中,然后将“早餐”值复制到“Apple和1”组合中-E2来自类别-1工作表的报表工作表等等。

我尝试了INDEX,VLOOKUP,ROWS和SEARCH公式的组合,但没有一个帮助。 我也尝试过使用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之后,input数组公式

{= IF(ISERROR(SMALL(IF(IF(ISERROR(SEARCH($ C2,组别$ A $ 2:!$ A $ 30)),FALSE,TRUE),ROW(组别$ B $ 1:$ B $ 30)), (!组别$ B $ 1:$ B $ 30)ROW)), “”,INDEX(组别$ A $ 2:$ C $ 100中,SMALL(IF(IF(ISERROR(SEARCH($ C2,组别$ A $ 1:$!甲$ 30)),FALSE,TRUE),ROW(组别$ B $ 1:$ B $ 30)),ROW(组别$ B $ 1:$ B $ 100)),1))}