问题描述
我有以下两个电子表格:
我的目标是,在第三个电子表格中,获取右侧的表格,但仅获取左侧表格中的 ID,即:
解决方法
这似乎在 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
作为参考,这些是我测试的范围。您必须相应地更新范围和工作表引用。
- 左表包含目标 ID
- 中间表是完整的值列表
- 最终表是宏输出(从左表中删除缺少 ID 的行)
假设您的范围是“表格”,您可以使用 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 的工作簿中的真实表名。