【问题标题】:Highlighting duplicates based on data within the same column根据同一列中的数据突出显示重复项
【发布时间】:2015-08-01 14:04:27
【问题描述】:

我正在尝试创建一个宏来搜索 B 列以查找相同字符串的重复项,然后突出显示从 A 列到 I 列的重复项

我设法创建了一些突出显示正确单元格但似乎无法找到重复项的内容。不完全确定我哪里出错了,但我认为这可能是因为我正在改编一个以前的宏,它看起来横跨两张纸

代码:

Sub Duplicate()

Dim rng1 As Range, rng2 As Range, rng3 As Range, i As Long, j As Long
Dim w1 As Worksheet
Set w1 = Worksheets("Sheet1")
For i = 1 To w1.Range("B" & Rows.Count).End(xlUp).Row
    Set rng1 = w1.Range("B" & i)
    For j = 1 To w1.Range("B" & Rows.Count).End(xlUp).Row
        Set rng2 = w1.Range("B" & j)
        Set rng3 = w1.Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 9))
        If StrComp(Trim(rng1.Text), Trim(rng2.Text), vbTextCompare) = 0 Then
            rng3.Interior.Color = RGB(168, 188, 255)
        End If
        Set rng2 = Nothing
    Next j
    Set rng1 = Nothing
Next i

结束子

【问题讨论】:

    标签: excel vba formatting duplicates


    【解决方案1】:

    目前我看到一个问题,您指的是 Activecell,但是您从未激活或选择任何单元格或范围。这会使您在运行宏时选择的单元格的颜色发生变化,而不是其他。如果您将 activecell.row 替换为变量 i,则宏应该可以正常工作。

    【讨论】:

      【解决方案2】:

      这必须在 VBA 中吗? Excel 中的条件格式功能可以做到这一点,而无需依赖宏。这也应该比运行 VBA 更快地刷新。为此,您必须依赖条件格式中的相对引用,这些引用与您设置规则时的活动单元格相关。

      1. 从 A:I 中选择您的数据
      2. 条件格式>新规则
      3. 选择“使用公式确定要格式化的单元格”
      4. 使用公式 =COUNTIF($B$1:$B$6,$B1)>1,将第一个变量替换为 B 列中的整个范围。引用 $B1 上的单个美元符号非常重要,因为它告诉它检查 B 列,无论格式是哪一列应用于。

      【讨论】:

      • 这将与一系列其他宏一起运行,考虑到从当前系统中消除尽可能多的点击,所以理想情况下我希望它在 VBA 中运行宏
      • @Chris 好的。但是,如果您使用原生 XL 功能,那么您甚至不需要单击即可启动宏... clicks=eliminated!
      【解决方案3】:

      您总是将rng3 设置为相同的单元格,因为您从不更改活动单元格。此外,您实际上并不需要额外的范围,因为您已经在循环遍历单元格。

      Sub Duplicate()
      
       Dim rng1 As Range, rng2 As Range, rng3 As Range, i As Long, j As Long
       Dim w1 As Worksheet
       Set w1 = Worksheets("Sheet1")
       For i = 1 To w1.Range("B" & Rows.Count).End(xlUp).Row
          Set rng1 = w1.Range("B" & i)
          For j = 1 To w1.Range("B" & Rows.Count).End(xlUp).Row
              If j <> i Then
                Set rng2 = w1.Range("B" & j)
                If StrComp(Trim(rng1.Text), Trim(rng2.Text), vbTextCompare) = 0 Then
                   rng1.Interior.Color = RGB(168, 188, 255)
                   rng2.Interior.Color = RGB(168, 188, 255)
                End If
                Set rng2 = Nothing
              End If
          Next j
          Set rng1 = Nothing
       Next i
      
      End Sub
      

      【讨论】:

      • 这不会为整行着色吗?我只想将单元格着色到第 I 行实际上在实践中这只是突出显示 B 列,我想回顾一下宏实际上是有意义的
      猜你喜欢
      • 2017-12-27
      • 2021-08-04
      • 1970-01-01
      • 2017-05-19
      • 2021-02-09
      • 1970-01-01
      • 2017-01-31
      • 2020-08-19
      • 2019-12-02
      相关资源
      最近更新 更多