【问题标题】:Comparing cells pairs in a column for duplicates Excel VBA比较重复列中的单元格对Excel VBA
【发布时间】:2021-07-06 04:47:40
【问题描述】:

您好,

提前感谢您的帮助

我使用下面的代码在列中查找匹配值。 我正在寻求帮助以执行以下操作:

下面的代码一次比较列中的所有单元格以查找从单元格 B3 开始并向下的匹配值,然后突出显示所有匹配的单元格。代码工作正常。 但相反,我需要成对检查重复项,一次比较两个单元格而不是整个列,并且还需要从列中的底部单元格开始到顶部以相反的列顺序。

匹配过程示例如下: 比较单元格 B10 = B9(如果匹配则突出显示两者,如果不匹配,则移至下一对进行检查,B9 = B8,B8 = B7,依此类推)

Dim rg As Range

Set rg = Range("B3", Range("B3").End(xlDown))

Dim uv As UniqueValues

Set uv = rg.FormatConditions.AddUniqueValues

uv.DupeUnique = xlDuplicate

uv.Interior.Color = vbRed

谢谢

【问题讨论】:

  • Dim rg As Range Set rg = Range("F3", Range("F3").End(xlDown)) Dim uv As UniqueValues Set uv = rg.FormatConditions.AddUniqueValues uv.DupeUnique = xlDuplicate uv.Interior.Color = vbRed
  • 对不起第一次使用堆栈...上面的代码工作正常..但有两个问题。 1它不是从下到上开始的。 2. 我需要一次比较两个单元格,而不是整个列的重复项。
  • 如果您将代码粘贴到您的问题中,您就有更好的机会获得代码方面的帮助。
  • 对不起第一次..重新编辑帖子。
  • 我不确定我是否理解您的第二个目的:您是说您只希望它识别 adjacent 重复项吗? (例如“ABB”是重复的,但“ABA”不是?)

标签: excel vba cell highlight matching


【解决方案1】:

首先,您需要一个循环,以便更好地控制 Excel 正在执行的操作。像这样循环你想要的范围:

For Each cell In rg

Next cell

但要倒退,那就更难了。您必须获取范围内的最高和最低行号,并通过它们执行第 1 步。

for a = rg_highestrow to rg_lowestRow step -1


next

问题是,它不知道您使用的是哪一列。 .range 对象会使事情变得复杂。因此,编写一个方法,该方法接受您想要执行的 col 的参数,以及开始和结束行的参数。像这样:

sub find_duplicates(byval colnumber as integer, byval startrow as integer, byval endrow as integer)


end sub

然后你可以向后循环,使用步骤-1:

for a = endrow to startrow step -1

next

您需要逻辑来发现当前单元格和另一个单元格之间的重复项。为此,请参阅“上一个单元格”。这意味着,您想在第二行而不是第一行开始循环。像这样:

for a = (endrow-1) to startrow step -1

next

如果您的范围内只有一行,这将不起作用。所以测试你的范围是否只有一行。如果只有一个,则无法进行比较,因此退出。到目前为止,将它们放在一起:

sub find_duplicates(byval colnumber as integer, byval startrow as integer, byval endrow as integer)

    if endrow-startrow<1 then exit sub 'Needs at least 2 rows to function. Exit.

    for row_a = (endrow-1) to startrow step -1   'Loop backwards using step-1, but stop short of the very last item.
        'Do the comparison of row_a and row_a+1
        if Cells(row_a,colnumber).Value = Cells(row_a+1,colnumber).Value then
            'They match. Do whatever you need to do

        end if
    next

end sub

你可以这样称呼它:

find_duplicates(2,10,20)

这将从第 20 行到第 10 行搜索指定的列,比较成对的行单元格中的重复值。

【讨论】:

  • 我在回忆中遗漏了一些东西。我需要事先设置一个范围:)
【解决方案2】:

下面的这段代码运行良好。

偏移公式中的 -1 帮助我将当前单元格与前一个单元格进行比较(按相反顺序)

Dim rngMyCell As Range
    Dim wsMySheet As Worksheet
    
    Application.ScreenUpdating = False
    
    Set wsMySheet = ActiveSheet

    For Each rngMyCell In wsMySheet.Range("F3:F" & wsMySheet.Range("F" & Rows.Count).End(xlUp).Row)
        If Val(rngMyCell.Offset(-1, 0)) = Val(rngMyCell) Then
            wsMySheet.Range("F" & rngMyCell.Row & ":F" & rngMyCell.Row).Interior.Color = RGB(255, 255, 0)
        Else
            wsMySheet.Range("F" & rngMyCell.Row & ":F" & rngMyCell.Row).Interior.Color = xlNone
        End If
    Next rngMyCell
    
    Set wsMySheet = Nothing
    
    Application.ScreenUpdating = True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2019-12-22
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多