首页 > 解决方案 > 比较 2 列并突出显示第二列中的新项目

问题描述

情况:我有一个 excel 宏,它将一列数据导入到下一个空闲列中的现有工作表中,它还清除了将在宏完成时设置的前一列的格式(我正在尝试工作的位在这里)。

我需要代码将新列中的每个单元格与前一列进行比较,以查看是否存在匹配项,如果没有匹配项,则突出显示该单元格。

问题:我不断收到类型不匹配错误,或者代码无法运行。我的最新尝试(包括将唯一数据复制到不同的工作表,如果工作的话这将是一个奖励)如下。

Dim rngCell As Range

For Each rngCell In Range(Cells(2, Worksheets("Data").Columns(LastColumn)), Cells(10000, Worksheets("Data").Columns(LastColumn)))
 'I know hardcoding values is bad, but i did this for testing purposes
    If WorksheetFunction.CountIf(Range(Cells(2, Worksheets("Data").Columns(LastColumn)), Cells(10000, Worksheets("Data").Columns(LastColumn))), rngCell) = 0 Then
        Range("D" & Rows.Count).End(xlUp).Offset(1) = rngCell
    End If
Next

理想结果:代码贯穿并突出显示第 1 列中的唯一值(在每天导入新列时使用列索引引用)。该代码将唯一值复制到另一张表以方便使用。

提前感谢任何指针或代码。

标签: excelvbaformattingcompare

解决方案


由于您只发布了代码的一部分,我不得不假设您插入和清除格式的部分已经运行良好。有时您定义一个工作表,有时您不定义,所以我不确定我们在这里使用的是什么工作表。

但为了澄清一下,如果您在“A”列中有数据,然后运行宏将数据粘贴到“B”列中,您是否想要这样的东西:

prevCol = 1
lastCol = 2
Set Rng = Range(Cells(2, prevCol), Cells(100, prevCol))
Set Rng2 = Range(Cells(2, lastCol), Cells(100, lastCol))
For Each rngCell In Rng
    If WorksheetFunction.CountIf(Rng2, rngCell) = 0 Then
        rngCell.Interior.Color = RGB(250, 230, 20)
    End If
Next

在此处输入图像描述

在插入新项目之前存在的列中的唯一项目在哪里被突出显示?

所以最后,也许更像这样:

Sub SubName()
Dim sht As Worksheet
Dim lastCol As Long, lastRow As Long
Set sht = Worksheets("Data") 'or whatever
' Instert column
' clear formatting

lastCol = sht.Cells(2, sht.Columns.Count).End(xlToLeft).Column
lastRow = sht.Cells(sht.Rows.Count, lastCol - 1).End(xlUp).Row

For Each rngCell In Range(Cells(2, lastCol - 1), Cells(lastRow, lastCol - 1))
    If WorksheetFunction.CountIf(Range(Cells(2, lastCol), Cells(lastRow, lastCol)), rngCell) = 0 Then
        rngCell.Interior.Color = RGB(250, 230, 20)
    End If
Next
End Sub

推荐阅读