Excel 从VLOOKUP中收集与新列一起使用的行

Excel 从VLOOKUP中收集与新列一起使用的行,excel,vlookup,Excel,Vlookup,SampleSheet.xlsx- 这是一个小的,通用的版本,我真正的工作。我的“A”列非常大,“B”是较大列的选择。列“C”到“E”是每个人随附的数据(请注意,只有“B”中的人有此数据。在列“G”中,我有一个VLOOKUP,以查看“B”中的哪些名字在“a”中有匹配项。问题是如何自动提取匹配项在“C-E”中的数据。例如,在执行VLOOKUP时,“austin”将有该行“c1;c2;c3”后自动加上。我知道这可能不可能用我做的VLOOKUP来获得匹配的名字 我希望能够创建一个包含a1、a2、a3等

SampleSheet.xlsx-

这是一个小的,通用的版本,我真正的工作。我的“A”列非常大,“B”是较大列的选择。列“C”到“E”是每个人随附的数据(请注意,只有“B”中的人有此数据。在列“G”中,我有一个VLOOKUP,以查看“B”中的哪些名字在“a”中有匹配项。问题是如何自动提取匹配项在“C-E”中的数据。例如,在执行VLOOKUP时,“austin”将有该行“c1;c2;c3”后自动加上。我知道这可能不可能用我做的VLOOKUP来获得匹配的名字

我希望能够创建一个包含a1、a2、a3等数据的表,其中只包含在“a”中匹配的名称


例如,我想要得到的是这样一个表:

如果您熟悉Excel VBA,可以将其作为宏编写并运行

这里考虑的变量,可以根据您的要求更改它们:

  • 使用Activesheet,因此必须在包含数据的工作表处于活动状态时使用宏
  • 使用固定列编号, 长数据在A列中, 要查找的数据在B列到E列中 输出从第J列开始


当我运行这个时,我得到一个错误:“无效的外部过程”。我对VBA不是很熟悉,我不知道如何解决这个问题。我只有一个模块在运行。在你的模块中,子模块之间必须有一个代码块……)和End Sub,其中….是宏名称。它运行的代码块是Excel VBA中的宏。因此,要运行代码,它必须介于Sub()和End Sub之间。该…是宏名称,它可能是您当前正在处理的宏,或者您可以通过将其命名为Sub()将其记录为新宏MyNewMacro在粘贴代码后,在末尾再添加一行end Sub。希望这是清楚的。太好了。谢谢。
Dim result, lastrow1, lastrow2, lastrow
lastrow1 = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
lastrow2 = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
For Y = 1 To lastrow1
result = Application.VLookup(ActiveSheet.Range("B" & Y),ActiveSheet.Range("A1:A16"), 1, False)
If Not IsError(result) Then
lastrow = ActiveSheet.Range("J" & Rows.Count).End(xlUp).Row + 1
ActiveSheet.Range("J" & lastrow) = result
ActiveSheet.Range("K" & lastrow) = Application.VLookup(ActiveSheet.Range("J" & lastrow), ActiveSheet.Range("B1:E" & lastrow2), 2, False)
ActiveSheet.Range("L" & lastrow) = Application.VLookup(ActiveSheet.Range("J" & lastrow), ActiveSheet.Range("B1:E" & lastrow2), 3, False)
ActiveSheet.Range("M" & lastrow) = Application.VLookup(ActiveSheet.Range("J" & lastrow), ActiveSheet.Range("B1:E" & lastrow2), 4, False)
End If
Next Y