【问题标题】:Comparing two columns in a worksheet using VBA使用 VBA 比较工作表中的两列
【发布时间】:2019-03-17 14:19:42
【问题描述】:

我在标题Name List 1Name List 2 的工作表中有两列。

我想比较这两列并以红色突出显示 Name List 1 中不存在但存在于 Name list 2 中的名称,反之亦然。如果名称在两列中都相同,则将其保留为白色。

两个列表的列范围不一样。

Sub indicators()
    lastrowlist1 = Range("C1000000").End(xlUp).Row
    lastrowlist2 = Range("K1000000").End(xlUp).Row

    For i = 5 To lastrowlist1
        Range("C" & i).Value = findval
        For j = 5 To lastrowlist2
            If Range("K" & j).Value <> Range("C" & i).Value Then
                Range("K" & j).Interior.ColorIndex = 4
                Range("C" & i).Interior.ColorIndex = 4
            Else
                Range("K" & j).Interior.ColorIndex = 2
                Range("C" & i).Interior.ColorIndex = 2
            End If
        Next j
    Next i

End Sub

【问题讨论】:

  • 使用条件格式,或者至少表明你的努力并告诉我们你的代码的哪一部分被卡住了
  • 条件格式的问题是它会减慢excel工作簿的速度。

标签: excel vba


【解决方案1】:

假设我有以下:

    A        B
1   Peter    Peter
2   James    Sarah
3   Claire   John
4   Sandra
5   John

我现在可以为每一列应用条件格式。

  1. 高亮A1:A5
  2. 条件格式 > 新规则 > 使用公式...
  3. 公式:=ISERROR(MATCH(A1,$B$1:$B$3,0))
  4. 应用格式

  5. 高亮B1:B3

  6. 条件格式 > 新规则 > 使用公式...
  7. 公式:=ISERROR(MATCH(B1,$A$1:$A$5,0))
  8. 应用格式

这应该突出显示您需要的名称,即出现在一个列表中而不是另一个列表中。

【讨论】:

    【解决方案2】:

    使用 VBA,A、B 列

    Sub duplicates()
        Dim i As Integer
        Dim var As Variant
    
        For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
          var = Application.Match(Cells(i, 1).Value, Columns(2), 0)
          If Not IsError(var) Then
             Cells(i, "A").Interior.Color = 255
          End If
        Next i
    End Sub
    

    【讨论】:

    • 看起来它也在为空白单元格着色。
    • 我修好了。我也写了同样的内容来比较 B 列。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多