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

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(使用前将#替换为@)

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

  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • 使用 for 循环 Python 为数组赋值

    我正在尝试将字符串的值分配给不同的数组索引 但我收到一个名为 列表分配超出范围 的错误 uuidVal distVal uuidArray distArray for i in range len returnedList for beac
  • 如何在 Excel 中对一组数据进行排序以匹配另一组数据?

    我有一个不按字母或数字顺序排列的数据列表 我想对同一日期的第二个列表进行排序以匹配第一个列表 我无法更改数据的顺序 我的目标是将第二组中的附加数据粘贴回第一个数据集中 DATA SET A DATA SET B 22350 BH160 10
  • 如何找到特定程序的安装目录?

    我已经成功地编写了一些用于工作的 VBA 宏 这些宏基本上创建了一个数据文件 将其提供给一个程序并对该程序的输出进行后处理 我的问题是程序安装路径是硬编码在宏中的 并且安装在我同事的计算机上可能会有所不同 我首先想到的是 我可以从每个人那里
  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • 如何在 Microsoft 报告中显示字节数组中的图像

    我使用报表文件和 ReportViewer 控件来显示在运行时从对象动态加载数据的报表 我需要显示一个以字节数组形式存储在对象中的图像 PictureBox 的值当前设置为 First Fields ImageData Value dtst
  • 使用 ObjPtr(Me) 返回自定义类实例的名称?

    我明白那个ObjPtr http support microsoft com kb 199824将返回内存中对象的地址 并且它指向一个名为 IUNKNOWN 的结构 并且其中编码了某种接口定义以公开对象结构 但我不知道如何确定一个对象的接口
  • 将 Javascript 对象的属性从 string 更改为 int

    我有一个对象数组 每个对象具有三个属性 年份 总计 人均 例子 0 Object per capita 125 8 total 1007 2 year 2009 这些属性是字符串 我想创建一个循环来遍历数组并将它们转换为 int 我尝试了以
  • 关于 ArrayList[] x 的 Java 问题

    我一直对 ArrayList 数组有这个问题 也许你能帮忙 declare in class private ArrayList
  • 将 UUID 存储为 base64 字符串

    我一直在尝试使用 UUID 作为数据库键 我希望占用尽可能少的字节数 同时仍然保持 UUID 表示形式的可读性 我认为我已经使用 base64 将其减少到 22 个字节 并删除了一些尾随的 这些 对于我的目的来说似乎没有必要存储 这种方法有
  • 从 C 数组中删除大量元素的最快方法

    我有包含数千个甚至更多元素的动态数组 为了不消耗大量内存 我可以从中删除不需要的元素 即元素已被使用 不再需要它们 所以从一开始我可以通过估计每次删除元素后所需的最大大小来分配较小的内存大小 我用这个方法但是需要很长很长的时间才能完成 有时
  • JasperReports 中每个工作表属性一页

    我有一个要求 我必须在 JasperReports 中设计一个报告 该报告有 4 页 第一张纸有 5 页 类似的其他纸有一页或两页 我面临的问题是 如果我使用net sf jasperreports export xls one page
  • 我可以获取VBA代码中的注释文本吗

    可以说我有以下内容 Public Sub Information TEST End Sub 有没有办法得到 TEST 结果 不知何故通过VBA 例如 在 PHP 中 有一个获取注释的好方法 这里有什么想法吗 编辑 应该有办法 因为像 MZ
  • 3D 数组到 3D std::vector

    我在代码函数中用 3D std vector 替换了 3D 数组 它进入了无限循环 你能给我一个提示吗 我真的需要使用向量而不是数组 谢谢 我最初的代码是 arr is a 3D array of a sudoku table the 3
  • VBA 中的匈牙利语好吗?

    我在 Net 中不使用匈牙利语 str int 前缀 但我仍然发现它在 VBA 中很有用 因为在 VBA 中很难看到类型 这很糟糕吗 不必要 也许我错过了一些东西 我真的很感激任何反馈 我想知道有一段时间了 谢谢大家 我想说 这种匈牙利符号
  • 在Excel中,我可以使用超链接来运行vba宏吗?

    我有一个包含多行数据的电子表格 我希望能够单击一个单元格 该单元格将使用该行中的数据运行宏 由于行数总是在变化 我认为每行的超链接可能是最好的方法 ROW MeterID Lat Long ReadX ReadY ReadZ CoeffA
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 检查未绑定控件是否具有值的正确方法

    简单场景 一个表单和一个文本框 未绑定 Text1 If lt gt Text1 Then MsgBox Not Empty End If 上面的代码有效 表达方式 lt gt Text1如果文本框包含字符 则计算结果为 True 无论文本
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm

随机推荐

  • 正则表达式检查新行

    我想检查 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 先生提供的以下工作代码 但它取决于辅助列 我寻求相同的结果 如果它可以在不使用辅助列的情