隐藏重复的单元格而不使用辅助列

2023-12-19

我需要隐藏某个范围内的重复单元格。
与使用AdvancedFilter,它隐藏了重复的单元格,但它也阻止我进行后续的正常过滤。
我使用了 @FaneDure 先生提供的以下工作代码,但它取决于辅助列。
我寻求相同的结果,如果它可以在不使用辅助列的情况下实现。
是否可以将唯一单元格的地址放入数组中,然后使用该数组作为自动筛选的条件?
请注意,隐藏重复单元格后,我将手动执行后续的普通过滤器。
预先,非常感谢您抽出时间提供帮助。

Sub Hide_visible_duplicate_cells_(procRng As Range)
    Dim arng As Range, C As Range, dict As New Scripting.Dictionary
    Dim arrMark, colMark As Range, lastC As Long, sh As Worksheet, lastR As Long, i As Long
    
    Const markName As String = "Marker_column"
    
    Set arng = procRng.SpecialCells(xlCellTypeVisible)
    
    If arng Is Nothing Then MsgBox "Not a valid Range": Exit Sub
    
    Set sh = procRng.Parent 'the sheet where the range belongs to

    lastR = sh.UsedRange.rows(sh.UsedRange.rows.count).row  'last row OF THE SHEET
    ReDim arrMark(1 To lastR, 1 To 1) 'redim the markers array
    
    'determinte the column where the marker to be placed (or it already exists):
    Set colMark = sh.rows(procRng.cells(1).row).Find(What:=markName, LookIn:=xlValues, LookAt:=xlWhole)
    If Not colMark Is Nothing Then
        lastC = colMark.column  'for the case when the marker column exists
    Else
        lastC = sh.cells(procRng.cells(1).row, sh.Columns.count).End(xlToLeft).column + 1 'next empty column if marker column does not exist
        'to correct the last column number, IF LAST COLUMN IS HIDDEN (it MUST HAVE A HEADER):
        If sh.cells(procRng.cells(1).row, lastC).Value <> "" Then lastC = lastC + 1
    End If
    
    For Each C In arng.cells
        If Not dict.Exists(C.Value) Then
            If i > 0 Then                                            'to skip the first cell, which should be on the headers row
                dict.Add C.Value, vbNullString       'Keep the first occurrence
                arrMark(C.row - procRng.cells(1).row, 1) = "True"      'place the marker for the first occurrence
            End If
            If C.Value <> "" Then i = i + 1 'for the case of empty cells above the header...
        End If
    Next C
    'place the marker column header, if not already existing:
     If colMark Is Nothing Then sh.cells(procRng.cells(1).row, lastC).Value = markName 'place the marker column name, IF NOT EXISTS
     
    If sh.AutoFilterMode Then sh.AutoFilterMode = False  'eliminate the filter, if any
    
    'drop the markers array content:
    sh.cells(procRng.cells(1).row + 1, lastC).Resize(UBound(arrMark), 1).Value2 = arrMark
    
    'filter by the marker column
    sh.Range(sh.cells(procRng.cells(1).row, 1), sh.cells(sh.UsedRange.rows.count, lastC)).AutoFilter lastC, "True"
End Sub

请尝试下一个代码。它连接第一个找到的单元格内容,并添加一个不太可能在另一个单元格中找到的字符串。然后将它们作为项目放入使用的字典中。事实上,看看它和它的评论:

Sub Hide_visible_duplicate_c(procRng As Range)
    Dim arng As Range, C As Range, dict As New Scripting.Dictionary
    Const strStr As String = "###$$" 'something unusual, to  not be found in the other cells content
    
    Set arng = procRng.Offset(1).Resize(procRng.rows.count - 1).SpecialCells(xlCellTypeVisible) 'eliminating the header
    
    If arng Is Nothing Then MsgBox "Not a valid Range": Exit Sub
    
    Application.Calculation = xlCalculationManual: Application.ScreenUpdating = False
     For Each C In arng.cells
        If Not dict.Exists(C.Value) Then
            dict.Add C.Value, C.Value & strStr       'Keep the first occurrence but miodified string item
            C.Value = dict(C.Value)                  'modify the first occurence cell content
        End If
     Next C

    procRng.CurrentRegion.AutoFilter procRng.column, dict.Items, xlFilterValues 'filter by the modified cells
    procRng.Replace strStr, "" 'replace the added unusual string
    
    Application.Calculation = xlCalculationAutomatic: Application.ScreenUpdating = True
    
    MsgBox "Ready...", vbInformation, "Job done"
End Sub

可以通过以下方式进行测试:

Sub TestHide_visible_duplicate_cells()
    Dim sh As Worksheet, lastR As Long
    Const filtCol As Long = 2   'change here according to the need
    Const headerRow As Long = 2 'change it if necessary
    
    Set sh = ActiveSheet: lastR = sh.cells(sh.rows.count, filtCol).End(xlUp).row
    If Not sh.FilterMode Then MsgBox "This code needs a filtered range to be processed!", vbInformation, "End": Exit Sub
    
    Hide_visible_duplicate_c sh.Range(sh.cells(headerRow, filtCol), sh.cells(lastR, filtCol)) 'send the filtered column as argument
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

隐藏重复的单元格而不使用辅助列 的相关文章

  • 如何将工作表和范围作为变量传递?

    我想在子例程之间传递工作表的名称和范围 以下抛出 下标超出范围 错误 Sub This x Sheet1 y D3 MsgBox x Range y Value End Sub This is 我的项目资源管理器的示例 https i st
  • 合并两个ActiveRecord数组并按created_at排序

    books Book find all articles Articles find all 通过阅读来自http guides rubyonrails org layouts and rendering html http guides
  • 将不连续范围从一张纸复制到另一张纸

    VBA 新手 也是第一次发帖 可能会问一个非常基本的问题 然而 我在互联网上 或在我拥有的参考书中 没有找到答案 所以我很困惑 如何将一张纸中的一堆间隔开的列放入另一张纸中 但没有间隙 例如 我想从这样的工作表中复制标记为 x 的单元格 x
  • 根据用户名获取广告详细信息

    我有一个代码可以从 AD 检索用户的详细信息 例如电子邮件地址 电话号码等 我当前使用的代码是 Set objSysInfo CreateObject ADSystemInfo strUser objSysInfo UserName msg
  • 2 使用我的代码在数组中查询

    我使用滑块来显示我的 WordPress 精选文章 它选择一个自定义类别并返回一定数量的帖子 如何将显示的第一篇帖子设为自定义帖子 我可以直接在滑块代码中添加特定帖子的 ID吗使该帖子首先出现 然后是原始查询返回的其他内容 例如 在页面上
  • PHP-如何根据条件配对数组中的项目

    如何将数组中的项目配对 假设我有一个数组Fighters 我想根据他们的情况将他们配对Weights 体重最接近的拳手应作为配对最佳匹配 但如果他们是在同一个团队中 他们不应该配对 团队 1 战斗机A体重为60 战斗机B体重为65 2队 战
  • 如何使用 VBA 将行从一张 Excel 工作表复制到另一张 Excel 工作表并创建重复项?

    我有一个包含两张表的 Excel 工作簿 sheet1 在 A 到 R 列中包含一个大型数据表 标题位于第 1 行 Sheet2 在 A 到 AO 列中包含数据 我试图使用 VBA 从sheet1 复制行并将它们粘贴到sheet2 的末尾
  • Array.of 与“[ ]”。何时使用 Array.of 而不是“[ ]”?

    当我发现时我正在读一些书Array of https developer mozilla org en docs Web JavaScript Reference Global Objects Array of 根据 MDN Array o
  • mobx 未观察到数组拼接

    我定义了一个从数组中删除项目的操作 export default class myStore observable items action deleteItem async target gt try await backendServi
  • 在 Swift 中将时间数组从 24 小时转换为 12 小时

    我有一个像这样的数组 arrayTimes 16 00 16 30 17 00 17 30 18 00 18 30 我想将数组从 24 小时转换为 12 小时 这是我到目前为止所拥有的 它转换数组中的第一个数字 我遗漏了一些东西 但我无法解
  • 将字符串数组添加到组合框

    我有一个组合框 我想加载一个从方法返回的字符串数组 我目前只是用 for 循环加载它 但我认为应该可以将字符串数组直接分配给组合框 我只是想改进我的代码 我已经做了一些搜索 并且看到了使用数据范围或数据源的答案 但这些似乎都不起作用 我也尝
  • VBA 将数据透视表的源数据更新到行尾

    我试图弄清楚当使用 VBA 数据更改时如何将数据透视表源数据更新到行尾 我当前的代码如下 Dim shBrandPivot As Worksheet Dim shCurrentWeek As Worksheet Dim shPriorWee
  • 按步长值变化对数组中的数字进行分组

    我有一个像 101 107 106 199 204 205 207 306 310 312 312 314 317 318 380 377 379 382 466 469 471 472 557 559 562 566 569 在这个数组中
  • 在 Java 中循环数组的前 20 个元素

    我这里有这个循环 for int i 0 i lt prices length i if prices i gt largest largest prices i else if prices i
  • 如何停止覆盖数据

    我正在尝试在我的 iOS 应用程序中保存一些数据 我使用以下代码 NSArray paths NSSearchPathForDirectoriesInDomains NSDocumentDirectory NSUserDomainMask
  • 将工作表保存为 CSV,且 Excel 公式完好无损

    我完全使用 VBA for Excel 工作 我的解决方案必须完全是程序化的 而不是用户驱动的 该解决方案的要求是用户启动一个宏来获取工作簿并将 8 个工作表保存到单独的 CSV 文件中 保留公式并丢弃公式分辨率 我有一系列工作表 sht
  • 在一个单元格中显示两个日期

    我正在尝试在 Excel 的一个单元格中显示两个日期 我使用了以下公式 DATE YEAR NOW MONTH NOW I1 DATE YEAR NOW MONTH NOW I15 其中I1和I15的值分别为1和15 我选择这个公式的原因是
  • 在 Nodejs/javascript 中的 Excel 中创建动态数量的列或标题

    我用过exceljsNodejs中用于将json数据导出到excel的模块 它工作正常 但必须在添加行之前预定义标题 列的名称 即列是固定的 添加行后 我无法动态添加列 我尝试了许多通过 npm 提供的模块 但它们都具有相同的功能 那么 有
  • JSON 对象数组转 Java POJO

    将此 JSON 对象转换为 java 中的类 您的 POJO 类中的映射将如何 ownerName Robert pets name Kitty name Rex name Jake This kind of question is ver
  • 传递数组时在 C 中的函数参数中强制指定数组大小

    Context 在 C 中 我有一个以数组作为参数的函数 该参数用作该函数的输出 输出的大小始终相同 我会 让阅读代码的人清楚所需的大小 不过它已经在函数注释中了 理想情况下 编译会输出警告或错误 这样我就可以在编译时而不是运行时防止出现问

随机推荐

  • 正则表达式检查新行

    我想检查 if 语句是否在一行或下一行而不带大括号 如下所示 if blah blah do something or if foo foo do something 我目前拥有的正则表达式是 但不起作用 有人有主意吗 详细说明此正则表达式
  • 动态行值错误地更新到 mysql php

    在这里 我尝试使用 php 编辑和更新我的动态行值 这是我的 edit php 页面编码 它完美地从 mysql 获取动态行数据 uid int GET id tariff query mysql query SELECT FROM ebv
  • 如何在对象上使用 ES6 哈希映射而不维护引用(在 Java 哈希码中)

    我一直在 io js 中尝试 ES6 Map 并意识到我不能执行以下操作 var map new Map map set key value some string map get key value undefined I want so
  • 从 eclipse 调试 Ant 任务

    我正在 eclipse ide 中使用 java 开发自定义 ant 任务 是否有可能以某种方式调试它 那是在java行上放置一个断点 当执行ant时 它会停在那里 我可以单步执行代码吗 编辑 由于这个问题已作为重复问题关闭 我想详细说明为
  • 通过ajax传递数据安全吗?

    我创建了脚本 它将使用此命令计算某些特定 div 的子级 div content children size 通过这个计数 如果这个计数是 12 我知道从 mysql 获取 12 到 18 使用firebug 我可以找到这个计数 它将发布到
  • 如何仅为django中的某些路径定义中间件?

    无论如何 有没有为 django 中的特定路由或路由组定义中间件 就像 laravel 一样 我们可以将其定义如下 Route get admin profile function gt middleware auth 从历史上看 您可以利
  • NightmareJS截图回调

    我正在使用这个框架来制作几个网址的屏幕截图 截图的过程是异步的 并且该方法没有提供执行回调的方法 我想在这个脚本上每次截图时执行回调 nightmare new Nightmare urls forEach function url nig
  • 使用 xml 属性创建 XML 结构

    我正在尝试解决 xml 属性的难题 问题是我们已经广泛使用了具有这种结构的文件 我不能偏离它
  • $PATH 相对于别名的优势

    我对 Linux 和 Unix 比较陌生 在互联网的帮助下我终于弄清楚了如何 PATH和我的别名 bashrc work 但我确实找不到任何描述何时使用哪个的内容 假设我在 Library Frameworks 中安装了 Python3 3
  • 两个函数使用类型注释进行编译。删除一个注释 - 无法编译。删除两个 - 再次编译。为什么?

    注意这个反射计划 LANGUAGE ScopedTypeVariables RecursiveDo import Control Applicative import Control Monad import Control Monad I
  • 使用遮罩从图像中裁剪字母

    我需要的 1 从图库或相机中选择图像 2 书写和文字 3 文本与图像一起裁剪 下图可以更清楚地说明我到底需要什么 我知道图像的遮蔽和裁剪 即使我用框架进行了遮蔽表情符号我的应用程序 http www youtube com watch v
  • wp_enqueue_script() 和 wp_register_script() 之间有什么区别

    我不清楚我将在何时何地使用wp enqueue script or wp register script 简单来说 wp enqueue script means 添加到队列中以注册文件 wp register script means 立
  • 如何对可枚举进行分块?

    我需要一种优雅的方法 它接受一个可枚举值 并获取可枚举值的可枚举值 其中每个元素的数量相同 但最后一个是 public static IEnumerable
  • 是否可以使用 gcov 覆盖共享库的代码?

    我尝试测试使用 OpenCV 共享库的可执行文件 当使用 gcov 了解覆盖了哪些代码行时 我只能获取有关我的 cpp 文件和库的 hpp 的信息 没有显示有关库的 cpp 文件的信息 我用 pg coverage 标志编译并链接 是的 g
  • _http_server.js:192 throw new RangeError(`无效状态代码:${statusCode}`);

    这是我的代码 var express require express var http require http var redis require redis var url require url var client redis cr
  • crontab 中带有 -f 标志的 pkill 在分号后未运行命令

    我想终止一个进程并删除指示该进程正在运行的标志 计划任务 00 22 1 5 pkill f script sh gt log 2 gt 1 rm lock gt log 2 gt 1 当我在终端上运行它时 效果非常好 但在 crontab
  • 在android代码中创建一个套接字(不在android应用程序中),权限被拒绝

    我正在尝试在 android 源代码中打开一个套接字 具体来说 现在我在 DisplayDevice cpp 文件中 但套接字代码的位置可能会改变 就在我这样做之后 int fd socket AF INET SOCK STREAM 0 f
  • Java 用 \u 读取 unicode

    我的java程序正在从文本文件读取unicode 例如 uffff 从java GUI查看是没有问题的 但是当我尝试打印出来时 所有的文字都被覆盖了 是因为 u 或任何其他方法来避免单词被覆盖 抱歉我的英语蹩脚 谢谢 符号 uXXXX主要只
  • 对于折线图,高图表中的向下钻取功能

    我正在尝试使用可以向下钻取几个级别的高图生成折线图 Highchart 具有柱形图的此功能 但我找不到折线图的任何内容 如果我尝试将图表类型从列更改为行 那么我会得到一条无法进一步向下钻取的图表 有什么方法可以将钻取功能应用于高图表中的折线
  • 隐藏重复的单元格而不使用辅助列

    我需要隐藏某个范围内的重复单元格 与使用AdvancedFilter 它隐藏了重复的单元格 但它也阻止我进行后续的正常过滤 我使用了 FaneDure 先生提供的以下工作代码 但它取决于辅助列 我寻求相同的结果 如果它可以在不使用辅助列的情