如何合并两张工作表中的数据并根据原始工作表有条件地格式化行

如何合并两张工作表中的数据并根据原始工作表有条件地格式化行

我在 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 个不同的结果:

  1. 重复结果是指同时存在于“打开”和“新建”中的票证。对于重复结果,我仅获得“新建”的结果(将其标记为黄色背景)

  2. 旧结果是仅在“打开”中而不在“新”表中的票证(标记为红色背景)

  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

相关内容