我在 Excel 中有 3 个工作表:“打开”、“新建”、“合并”
“打开”表(旧列表) 票证 ID | 优先级 | 部门 | 状态 36009 | 1 | 财务 | 01-开放 34781 | 2 | 财务 | 02-供应商 35776 | 1 | 财务 | 01-开放
“新”工作表(新列表) 票证 ID | 优先级 | 部门 | 状态 34781 | 3 | 财务 | 01-供应商 35776 | 5 | 金融 | 10-已关闭 35607 | 2 | 金融 | 01-开放
“合并”表(最终结果) 票证 ID | 优先级 | 部门 | 状态 36009 | 1 | 财务 | 01-开放 34781 | 3 | 财务 | 01-供应商 35776 | 5 | 金融 | 10-已关闭 35607 | 2 | 金融 | 01-开放
因此,我尝试将打开的工作表和新工作表合并到合并工作表中,新工作表的优先级高于打开的工作表。我们将得到 3 个不同的结果:
重复结果是指同时存在于“打开”和“新建”中的票证。对于重复结果,我仅获得“新建”的结果(将其标记为黄色背景)
旧结果是仅在“打开”中而不在“新”表中的票证(标记为红色背景)
新结果是仅处于“新”状态而不处于“打开”状态的票证(标记为绿色背景)
因此,我喜欢复制票证 ID 上每张支票的整行
现在作为示例,我使用此函数查找重复项和新值(从新工作表到打开工作表的值)
=IF(ISERROR(VLOOKUP(New!B2;Open!$B$2:$B$998;1;FALSE));IF(New!B2=0;"Empty";"NEW");"Duplicate")
我怎样才能轻松地使组合表符合我的要求(比如自动填充)?
答案1
正如其他人所说,我认为使用 excel 函数无法实现这一点。即使可以,这样做也会很慢。运行 VBA 宏会快得多。我编写了一个示例来帮助您。它应该或多或少能满足您的要求:
Public Sub do_all_the_things()
Dim i As Integer
Dim j As Integer
Dim color As String
i = 1
Do Until i = Range("'Open'!A1").End(xlDown).Row + 1
j = 1
color = "green"
Do Until j = Range("'New'!A1").End(xlToRight).Column + 1
If Range("'New'!A" & j).Value = Range("'Open'!A" & j).Value Then
color = "yellow"
Exit Do
End If
If color = "green" Then
Do Until j = Range("'Combined'!A1").End(xlToRight).Column + 1
If Range("'Combined'!A" & j).Value = Range("'Open'!A" & j).Value Then
color = "red"
Exit Do
End If
j = j + 1
Loop
End If
'at this point we know what color the row is
row_on = Range("'Combined'!A1").End(xlDown).Row + 1
Range("'Combined'!" & row_on & ":" & row_on).Value = Range("'New'!" & i & ":" & i).Value
If color = "red" Then
Range("'Combined'!" & row_on & ":" & row_on).Interior = 255 'red
End If
If color = "yellow" Then
Range("'Combined'!" & row_on & ":" & row_on).Interior = 65535 'yellow
End If
If color = "red" Then
Range("'Combined'!" & row_on & ":" & row_on).Interior.ThemeColor = xlThemeColorAccent6 'green
End If
i = i + 1
Loop
End Sub