【问题标题】:compare two set of columns in two excel worksheets in same workbook比较同一工作簿中两个 Excel 工作表中的两组列
【发布时间】:2015-08-06 14:50:45
【问题描述】:

表 1

+------+-------+
|  ID  | Name  |
+------+-------+
| 1245 | James |
| 9377 | Jacob |
| 6201 | David |
| .    | .     |
| .    | .     |
| .    | .     |
+------+-------+

表 2

+------+-------+
|  ID  | Name  |
+------+-------+
| 1245 | James |
| 9007 | Adam  |
| 9377 | Jacob |
| 6201 | David |
| .    | .     |
| .    | .     |
| .    | .     |
+------+-------+

理论上,除了 Sheet2 有其他数据之外,两张表都是彼此的副本。 Sheet1 包含 10000 行,Sheet2 包含 15000。如何在两个工作表之间进行比较以显示/突出显示 Sheet2 中的 5000 个不同的行?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您可以在Sheet2 上使用以下函数来查找Sheet2 的值并查看它们是否存在于Sheet1 上:

    =IF(COUNTIFS(A2,Sheet1!A:A,B2,Sheet1!B:B)>0,"","X")
    

    这是假设您在Sheet2 上输入C2 中的公式。 COUNTIFS() 只检查 Sheet1 中的 ID 和 Name 并返回找到匹配的行数。如果我们找到它,我们不在乎 ("")。如果我们没有找到它,那么它是Sheet2 独有的,我们会用"X" 标记它。

    当然,您也可以在 VBA 中执行此操作:

    With Sheet2.Range("C2:C" & Sheet2.UsedRange.Rows.Count)
        .Formula = "=IF(COUNTIFS(A2,Sheet1!A:A,B2,Sheet1!B:B)>0,"""",""X"")"
        .Value = .Value ' (If you want to remove the formula)
    End With
    

    【讨论】:

      【解决方案2】:

      对于这样的任务,我使用 adodb 记录集来存储第一张纸上的内容。然后我读了第二张纸,看看它是否在第一张纸上。

      在您的 VBA IDE 中,转到工具菜单并选择引用。选择“Microsoft ActiveX 数据对象 2.8 库”。

      Dim rs As New ADODB.Recordset
      Dim ws As Excel.Worksheet
      Dim lRow As Long
      
          Set ws = Application.ActiveSheet
      
          'Add fields to your recordset for storing data.  You can store sums here.
          With rs
              .Fields.Append "Row", adInteger
              .Fields.Append "ID", adInteger
              .Fields.Append "NAME", adChar, 50
              .Open
          End With
      
          lRow = 1
      
          'Loop through and record what is in the first sheet
          Do While lRow <= ws.UsedRange.Rows.count
      
              rs.AddNew
              rs.Fields("Row").Value = lRow
              rs.Fields("ID").Value = ws.Range("A" & lRow).Value
              rs.Fields("NAME").Value = ws.Range("B" & lRow).Value
              rs.Update
      
              lRow = lRow + 1
              ws.Range("A" & lRow).Activate
          Loop
      
          'Switch to the second worksheet
          Set ws = Nothing
          Set ws = ActiveWorkbook.Sheets("Sheet2")
          ws.Activate
      
          'Loop through and compare to what was on the first column
          lRow = 1
          Do While lRow <= ws.UsedRange.Rows.count
      
              rs.Filter = ""
              rs.Filter = "ID=" & ws.Range("A" & lRow).Value
              If rs.RecordCount = 0 Then
                   'We don't have a match, color the row
                   Rows(lRow).Interior.Color = vbBlue
              End If
      
              lRow = lRow + 1
              ws.Range("A" & lRow).Activate
          Loop
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        相关资源
        最近更新 更多