匹配 ID 表中的元素和具有相同 ID 的多行表

问题描述

我有以下两个电子表格:

input

我的目标是,在第三个电子表格中,获取右侧的表格,但仅获取左侧表格中的 ID,即:

output

解决方法

这似乎在 VBA 中成功

Sub Pandemic()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim i As Long,x As Long,lr As Long
Dim DeleteMe As Range
Dim Flag As Boolean


'Target Values
Dim target
target = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row).Value

'Table With All Values
Dim source As Range
lr = ws.Range("C" & ws.Rows.Count).End(xlUp).Row
Set source = ws.Range("C2:D" & lr)

'Create Copy of Table
source.Copy ws.Range("F2")


For i = 2 To lr

    Flag = False

    For x = LBound(target) To UBound(target)
        If ws.Range("F" & i) = target(x,1) Then
            Flag = True
        End If
    Next x
    
    If Not Flag Then
        If Not DeleteMe Is Nothing Then
            Set DeleteMe = Union(DeleteMe,ws.Range("F" & i).Resize(1,2))
        Else
            Set DeleteMe = ws.Range("F" & i).Resize(1,2)
        End If
    End If
    
Next i

If Not DeleteMe Is Nothing Then DeleteMe.Delete

End Sub
 

作为参考,这些是我测试的范围。您必须相应地更新范围和工作表引用。

  1. 左表包含目标 ID
  2. 中间表是完整的值列表
  3. 最终表是宏输出(从左表中删除缺少 ID 的行)

enter image description here

,

假设您的范围是“表格”,您可以使用 Power Query:

M 代码

let
    Source = Excel.CurrentWorkbook(){[Name="idValTbl"]}[Content],tbl1 = Table.TransformColumnTypes(Source,{{"ID",type text},{"Value",Int64.Type}}),Source2 = Excel.CurrentWorkbook(){[Name="idTbl"]}[Content],tbl2 = Table.TransformColumnTypes(Source2,{"ID",type text}),join = Table.AddJoinColumn(tbl2,"ID",tbl1,"joined"),#"Expanded joined" = Table.ExpandTableColumn(join,"joined",{"Value"},{"Value"})
in
    #"Expanded joined"

更改第 2 行和第 4 行中的表名,以反映上面显示的表 2 和表 1 的工作簿中的真实表名。

enter image description here