【发布时间】:2017-05-18 17:39:13
【问题描述】:
假设我有两张表,表 1 和表 2
我在工作表 1 中有四列,在工作表 2 中有三个类似的列标题。
如果在 sheet2 中找不到来自 sheet 1 的记录,则将其删除。
如果工作表 1 中没有记录,则将工作表 2 中的记录复制到工作表 1。
在 Sheet1 中,我有以下列
Name Age Gender Group
I 25 M A1
A 24 M B1
M 23 M C1
E 23 M D1
在表 2 中,我有以下列
Name Age Gender
F 25 M
A 24 M
M 23 M
我的输出需要在 sheet1 中:
Name Age Gender Group
A 24 M B1
M 23 M C1
F 25 M
注意:每次都会根据姓名、年龄和性别的组合删除/复制每条记录,而不仅仅是姓名。
我使用 VBA 创建了一个 Concatenated 列,但现在失去了灵感。
For j = 2 To lastrow
strA = Sheets(TabName).Range("A" & j).Value
strB = Sheets(TabName).Range("B" & j).Value
StrC = Sheets(TabName).Range("C" & j).Value
Range(CombinedKeyColLet & j).Value = Application.WorksheetFunction.Concat(strA & strB & StrC)
Cells.Select
Selection.Columns.AutoFit
Next
'Copy or Delete code
'--------------------------------'
这是我正在尝试使用 On error 方法的代码
CombinedKeyCol = WorksheetFunction.Match("CombinedKey", Sheets(TabName1).Rows(1), 0)
CombinedKeyColLet = GetColumnLetter(CombinedKeyCol)
For i = lastrow To 2 Step -1
Sheets(TabName2).Activate
CombinedKeyVal = Range(CombinedKeyColLet & i).Value
On Error GoTo Jumpdelete
Present = WorksheetFunction.Match(CombinedKeyVal, Sheets(TabName1).Columns(6), 0)
If Present <> "" Then
GoTo Jumpdontdelete
End If
Jumpdelete:
Sheets(TabName2).Activate
Rows(i & ":" & i).Delete
Present = ""
Jumpdontdelete:
Present = ""
Next
【问题讨论】:
-
输出到 Sheet1 还是 Sheet2?您指出 Sheet1,但这似乎不正确,因为您完全删除了“组”列。
-
在 sheet1 上输出
-
I 和 M 条目会发生什么情况?为什么它们没有出现在输出中?
-
它们被删除,因为它们不在 sheet2 中