过滤唯一值并对 A 到 Z 进行排序 Excel VBA

2024-02-02

我一直在使用下面的代码来过滤唯一值Sheet1并将它们粘贴到Sheet2我的代码工作正常。 但它有一个问题,当我从 Sheet1.Range(C4:C) 单元格中删除任何值时,它会给出空单元格Sheet2就像下面的图片一样。

我希望如果我从 Sheet1 范围中删除任何单元格值,那么代码应该自动调整它。 Sheet2 范围中不应有任何空单元格。

我还想在代码中添加排序功能,以便在工作表 2 中按 A 到 Z 排序时会弹出唯一值。

我最终尝试做这两件事,但都做不到。我们将非常感谢您在这方面的帮助。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim d As Object, c As Variant, i As Long, lr As Long
Set d = CreateObject("Scripting.Dictionary")
lr = Cells(Rows.Count, 1).End(xlUp).Row
c = Sheet1.Range("C4:C" & lr)
For i = 1 To UBound(c, 1)
  d(c(i, 1)) = 1
Next i
Sheet2.Range("C4").Resize(d.Count) = Application.Transpose(d.keys)
End Sub

这是我使用过的代码:

Sub test()
Dim WkSource As Worksheet
Dim WkDestiny As Worksheet
Dim MiMatriz() As Variant
Dim LR As Long
Dim i As Long
Dim ZZ As Long

Set WkSource = ThisWorkbook.Worksheets("source") 'Replace SOURCE with name of your Sheet1
Set WkDestiny = ThisWorkbook.Worksheets("destiny") 'Replace DESTINY with name of your sheet2

With WkSource
    LR = .Cells(.Rows.Count, 3).End(xlUp).Row 'Last non empty cell in colum C
    ReDim MiMatriz(1 To LR - 4 + 1) 'we do LR-4 because your data starts at row 4, and we add 1
    ZZ = 1
    For i = 4 To LR Step 1
        MiMatriz(ZZ) = .Range("C" & i).Value
        ZZ = ZZ + 1
    Next i
End With

'sort
Call QuickSort(MiMatriz, 1, UBound(MiMatriz))

'paste

'we paste array, excluding blanks
ZZ = 4 'starting at row 4
For i = 1 To UBound(MiMatriz) Step 1
    If MiMatriz(i) <> "" Then
        WkDestiny.Range("C" & ZZ).Value = MiMatriz(i)
        ZZ = ZZ + 1
    End If
Next i


'Remove duplicates
WkDestiny.Range("C4:C" & ZZ - 1).RemoveDuplicates Columns:=1, Header:=xlNo

Erase MiMatriz
Set WkSource = Nothing
Set WkDestiny = Nothing

End Sub

您还需要这个 UDF 来对数组进行排序:

Public Sub QuickSort(vArray As Variant, inLow As Long, inHi As Long)
  Dim pivot   As Variant
  Dim tmpSwap As Variant
  Dim tmpLow  As Long
  Dim tmpHi   As Long

  tmpLow = inLow
  tmpHi = inHi

  pivot = vArray((inLow + inHi) \ 2)

  While (tmpLow <= tmpHi)
     While (vArray(tmpLow) < pivot And tmpLow < inHi)
        tmpLow = tmpLow + 1
     Wend

     While (pivot < vArray(tmpHi) And tmpHi > inLow)
        tmpHi = tmpHi - 1
     Wend

     If (tmpLow <= tmpHi) Then
        tmpSwap = vArray(tmpLow)
        vArray(tmpLow) = vArray(tmpHi)
        vArray(tmpHi) = tmpSwap
        tmpLow = tmpLow + 1
        tmpHi = tmpHi - 1
     End If
  Wend

  If (inLow < tmpHi) Then QuickSort vArray, inLow, tmpHi
  If (tmpLow < inHi) Then QuickSort vArray, tmpLow, inHi
End Sub

我的源表(您的 Sheet1)是:

当执行代码时,在我的命运表(你的sheet2)中我得到:

所有数据均已排序,没有空白:)

希望您能根据您的需要进行调整。

关于数组排序函数,所有功劳归作者所有:https://stackoverflow.com/a/152325/9199828 https://stackoverflow.com/a/152325/9199828

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过滤唯一值并对 A 到 Z 进行排序 Excel VBA 的相关文章

  • 使用 pythoncom 在 Python 进程之间编组 COM 对象

    我希望有人可以帮助我从 Python 进行编组跨进程调用到 Excel 我有一个通过 Python 启动的 Excel 会话 我知道当需要从单独的 Python 进程访问它时 该会话将会启动并运行 我已经使用编组让一切按预期工作CoMars
  • Outlook 无法识别一个或多个姓名

    我有以下 vba 代码 它读取邮箱并向任何发送无效代码作为邮箱回复的用户发送回复 但有时会收到运行时错误 Outlook 无法识别一个或多个名称 我的问题是 创建新的 MAPI 配置文件是否可以解决该问题 或者我是否需要添加一个代码来解析地
  • EPPlus Excel 行高不一致

    我已经使用 EPPlus 生成了一个 excel 文件 在 MS Office 2007 中一切似乎都很完美 但客户端使用的是 MS Office 2010 2013 并且在第 29 行之后未设置行高 这是一个非常奇怪的问题 我已经尝试了
  • 在Google电子表格中划分整列

    我是 Google 电子表格的一个相对较新的用户 我希望 B 列中的每个单元格都是 A 列 同一行 中内容除以 5 的结果 B1 B2 B3 等 商 应为 A1 A2 A3 等 被除数 除以 5 除数 在示例中 B1 A1 5 我知道一项一
  • 文件夹.文件的相对路径

    我有一个 Excel 文件 在同一文件夹中还有一个包含我想要包含的 CSV 文件的文件夹 使用 来自文件夹 查询 第一步将给出以下查询 Folder Files D OneDrive Documents Health Concept2 现在
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 使用 MID、LEN 和 FIND 函数提取单元格文本的某些部分?

    我有一份 Excel 作业 但我陷入了最后部分 我被要求使用 MID LEN 和 FIND 来提取单元格内的特定字符串 我非常了解每个人的工作方式 将这三者结合起来并让它们发挥作用是我遇到的问题 我需要将城市与地址的其余部分分开 然后将其显
  • 在 Node.js 中解析 Json(带有数组和对象)并将数据导出到 Excel 文件中

    我是 Node js 新手 我的要求是 我需要解析 JSON 并将数据导出到 Excel 文件中 其中包含 JSON 中的所有字段 我的 JSON 如下 id 1255 title The Brain and Nervous System
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • numpy NPV 和 Excel NPV 有区别吗?

    我的 Excel 中有一行包含 11 个值 TotalSavings 0 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 贴现率为 0 08 我在 Excel 中使用 计算 NPVNPV
  • 如果总和为 0,则查找并删除带标题的最后一列

    我想创建一个宏 查找带有标题的最后一列 并仅当该列的总和等于零时才将其删除 到目前为止 这是我尝试过的 Dim LastCol As Long Dim i As Long With ThisWorkbook Sheets Sheet1 Fo
  • VSTO 替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 VSTO 有哪些替代方案 ManagedXll 能做什么而 VSTO 不能 你什么时候使用其中一个而不
  • 支持 >65k 行的 Excel VBA SQL 驱动程序

    在 Excel 2010 中通过 VBA 查询 Excel 数据时 我遇到一个有趣的问题 我正在使用这些驱动程序连接到 xls 或 xls x m 文件 Sub OpenCon ByRef theConn As Connection ByV
  • 从 MS Access 调用存储过程会导致错误 3146

    当我使用下面所示的代码从 MS Access 前端调用 SQL Server 存储过程时 它停止运行并抛出运行时错误 3146 这个存储过程在 SQL Server 中工作正常 但是当我从 MS Access 运行时 它首先工作 但突然停止
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航
  • VBA 架构技巧 - 宏封装

    我拼凑了 Excel 的概念证明 以从数据库获取数据 并需要将其打包 以便可以将其分发给我们的客户 我的第一次尝试只是将所有代码放入代码模块中 但随后在 Excel 中我可以看到宏列表中的所有模块 而我实际上只想要列表中的主要模块 我猜想我
  • Powershell - 在不安装 Excel 的情况下将 CSV 转换为 XLS

    我有一台自动生成报告的服务器 报告采用 CSV 格式 我需要能够直接加密文件 无需第三方压缩 无 WinZIP 或 WinRAR 我认为最好的想法是将 CSV 转换为 XLS 然后通过 Powershell 密码保护 XLS 文件 不幸的是
  • 替换字符串变量中的多个字符 (VBA)

    如何替换字符串变量中的多个内容 这是我在 VBA 中的示例函数 Private Function ExampleFunc ByVal unitNr As String If InStr unitNr OE gt 0 Then unitNr
  • 如果 Excel 中的表格包含单元格引用,如何对其进行排序?

    我在工作表 1 中有一个 Excel 数据表 它引用了许多其他工作表中的各种不同单元格 当我尝试对工作表进行排序或过滤时 引用会随着单元格的移动而发生变化 但是 我不想手动进入每个单元格并在各处插入 符号 因为有些引用是连续的 我可能想稍后

随机推荐

  • 判断Lua编译器是运行32位还是64位

    我目前正在使用Windows在我的默认开发系统上和Linux在我部署 Lua 脚本的服务器上 为了Windows只有几个 32 位解释器 例如Windows 下的 Lua https github com rjpcomputing luaf
  • 有可用的 ccTalk 库吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将硬币接收器集成到我们的一个应用程序中 这个特定的硬币接收器使用ccTalk协议 http en
  • Firebase Blaze 计划和云功能

    不幸的是 Firebase 的 Flame 计划消失了 我现在必须处理 Blaze 计划 我不喜欢它 因为它的预算 无限 但我的钱包不是 昨天 我在编码时错误地创建了一个名为 3 Cloud Functions 的循环 我发现该循环的速度足
  • Visual Studio 意外停止调试且没有错误

    我正在调试一个项目 Visual Studio 停止调试并在以下行关闭程序 没有异常或错误消息 我已启用选项中任何引发的异常的通知 var query Session Linq
  • 使用 Maven 进行集成测试:在测试之前运行 jar,并在测试之后终止

    我有一个可运行的 jar 我想在集成测试开始之前在新进程中运行 在pre integration test 并在我的集成测试完成后终止它 在post integration test 我可以使用的东西之一是maven antrun 插件 h
  • 自定义 @font-face 无法在 chrome 中加载(chrome 自定义字体不渲染)

    custom font face无法在 chrome 中加载 chrome 自定义字体不渲染 使用 CSS 使用自定义字体 font face font family gotham rounded medium src url fonts
  • 如何在 fstream 文件之间切换而不关闭它们(同时输出文件) - C++

    我有一个 C 的小问题 无法通过在线浏览解决 这是我的代码 摘录 if File is open while File eof i getline File Line if i gt 2 Skip Headers int CharCount
  • 确定一个矩形是否被另一组矩形完全覆盖所需的算法

    我正在寻找一种算法来确定新矩形是否被一组现有矩形完全覆盖 问题的另一种方式是 新矩形是否完全存在于现有矩形覆盖的区域中 似乎有很多算法可以确定矩形重叠等 但我找不到任何可以解决这个确切问题的算法 矩形将使用 x y 坐标表示 这个问题与地理
  • 单元测试WCF方法

    我创建了一个 WCF 服务并尝试测试其中一种方法 我右键单击 WCF 服务方法并选择创建单元测试 它创建了一个新的测试项目并创建了一个单元测试 我尝试运行测试项目 但我不确定应该是什么UrlToTest价值 我已将 url 放入该服务 Te
  • python从具有相同方法名称的不同路径进行多重继承

    通过以下代码示例 可以super被使用 或者C必须打电话A foo and B foo明确地 class A object def foo self print A foo class B object def foo self print
  • 从午夜开始的日期时间到毫秒

    我怎样才能转换time给定的一部分DATETIME自午夜以来的毫秒数 例如 2011 08 29 00 00 00 gt 0 2011 08 28 00 00 00 gt 0 2011 08 29 01 00 00 gt 3600000 在
  • 我的 Eclipse 可以编译,但找不到 JDK!

    我不久前在 Windows 机器上安装了 Eclipse 几天前 我正在做一些 Java 编码 我注意到我没有 JDK 但 Eclipse 仍然可以编译和运行 Java 类 它包含编译器吗 是的 Eclipse 包含它自己的增量编译器 增量
  • 如何从 Express 路由中的 URL 获取可选语言参数?

    我陷入了一个愚蠢的问题 如何与optional区域设置参数 那就是我的意思 例如 我有首页 and contacts 这是路线 app get frontpage get app get contacts contacts get 现在我正
  • 使用 UNION 子句进行 SELECT

    例如 我有这两张桌子 DEPARTMENT DNAME CITY RESEARCH BOSTON IT CITY SCIENCE DALLAS RESEARCH DALLAS 所以我用这个声明 SELECT DNAME FROM DEPAR
  • 如何使 BoxLayout 表现得像垂直 FlowLayout?

    FlowLayout从右侧执行 压力 因此所有组件都试图采用其最小宽度 相反 BoxLayout尝试分散所有组件以填充空间的整个高度 我可以添加一些填充物作为最后一个组件还是使所有组件的高度最小BoxLayout 您可以使用 Box cre
  • 当在下拉列表中选择值时,MVC 使用 ajax 发布值

    我的表单中有几个下拉列表 每次用户在这些下拉列表之一中选择一个值时 我是否希望将该值保存到后端 数据库 我不想重新加载页面 所以我想实现这一点的最佳方法是使用ajax 这就是我需要的帮助 当我在下拉列表中选择一个值时 如何让它自动将值发布到
  • 如何在 Python 2 中发送 HEAD HTTP 请求?

    我在这里尝试做的是获取给定 URL 的标头 以便确定 MIME 类型 我想看看是否http somedomain foo 例如 将返回 HTML 文档或 JPEG 图像 因此 我需要弄清楚如何发送 HEAD 请求 以便我可以读取 MIME
  • 从cmd命令中获取字符串?进程.StartInfo

    所以我尝试过 Process 并启动 cmd exe 并将命令直接发送到该窗口 然后获取写入 cmd exe 窗口的值 代码如下所示 Dim arrServers As ArrayList Dim s ListBoxServers Item
  • 通过 ssh 将脚本和二进制数据传输到 stdin

    我想远程执行一个 bash 脚本 该脚本使用 tarball 并对其执行一些逻辑 诀窍是我只想使用一个 ssh 命令来完成此操作 而不是scp对于 tarball 然后是ssh对于脚本 bash 脚本如下所示 cd tmp tar zx a
  • 过滤唯一值并对 A 到 Z 进行排序 Excel VBA

    我一直在使用下面的代码来过滤唯一值Sheet1并将它们粘贴到Sheet2我的代码工作正常 但它有一个问题 当我从 Sheet1 Range C4 C 单元格中删除任何值时 它会给出空单元格Sheet2就像下面的图片一样 我希望如果我从 Sh