当前位置: 首页 > news >正文

Microsoft VBA Excel 去重小工具

问题简述

在本工作表中,A1:B3单元格样式如下,通过名称管理器B列的单元格被命名为"LinkFile"、“SheetName”、“InputArea”,请实现以下功能:读取Excel文件中的数据,去除重复的数据,并记录每个数据项最后一次出现的位置,最后将结果输出到当前工作表中。

AB
1Link File:
2Sheet Name:
3Input Area:

代码描述

第一步:
读取:输入一个xls表格文件的地址到"LinkFile"、该文件内工作表名称到"SheetName"和需要读取数据的范围(例如A2:A102)到"InputArea",根据指定范围在该文件内指定工作表中读取所有数据;
第二步:
去重和获得索引:上一步获取的数据中存在重复,因此只需要保留唯一值,根据唯一值获得该值最后一次出现在读取数据范围的行列位置信息;
第三步:
输出:在本工作表中,在"InputArea"单元格下两行开始输出从上一步得到的单元格数据和对应的行列信息,也就是从A5开始输入单元格数据,B5开始输入对应的行列信息。

Sub ProcessData()Dim srcWb As WorkbookDim ws As Worksheet, srcWs As WorksheetDim linkFile As String, sheetName As String, inputArea As StringDim rng As Range, cell As RangeDim dict As ObjectDim outputRow As Long' 创建字典来存储唯一值和对应的最后位置Set dict = CreateObject("Scripting.Dictionary")' 获取当前活动的工作表Set ws = ThisWorkbook.ActiveSheet' 读取工作表中的相关数据linkFile = ws.Range("LinkFile").ValuesheetName = ws.Range("SheetName").ValueinputArea = ws.Range("InputArea").Value' 打开源数据文件Set srcWb = Workbooks.Open(linkFile)Set srcWs = srcWb.Sheets(sheetName)' 获取指定范围Set rng = srcWs.Range(inputArea)' 遍历范围,收集数据For Each cell In rngIf Not dict.Exists(cell.Value) Thendict.Add cell.Value, cell.Address(False, False)Elsedict(cell.Value) = cell.Address(False, False)  ' 更新为最后出现的位置End IfNext cell' 关闭源数据文件srcWb.Close False' 输出结果outputRow = ws.Range("InputArea").Row + 2For Each key In dict.Keysws.Cells(outputRow, 1).Value = keyws.Cells(outputRow, 2).Value = dict(key)outputRow = outputRow + 1NextMsgBox "数据处理完毕!"
End Sub

English:

Sub ProcessData()Dim srcWb As WorkbookDim ws As Worksheet, srcWs As WorksheetDim linkFile As String, sheetName As String, inputArea As StringDim rng As Range, cell As RangeDim dict As ObjectDim outputRow As Long' Create a dictionary to store unique values and corresponding last positionsSet dict = CreateObject("Scripting.Dictionary")' Get the currently active worksheetSet ws = ThisWorkbook.ActiveSheet' Read relevant data from the worksheetlinkFile = ws.Range("LinkFile").ValuesheetName = ws.Range("SheetName").ValueinputArea = ws.Range("InputArea").Value' Open the source data fileSet srcWb = Workbooks.Open(linkFile)Set srcWs = srcWb.Sheets(sheetName)' Get the specified rangeSet rng = srcWs.Range(inputArea)' Iterate over the range, collecting dataFor Each cell In rngIf Not dict.Exists(cell.Value) Thendict.Add cell.Value, cell.Address(False, False)Elsedict(cell.Value) = cell.Address(False, False)  ' Update to the last position of occurrenceEnd IfNext cell' Close the source data filesrcWb.Close False' Output the resultsoutputRow = ws.Range("InputArea").Row + 2For Each key In dict.Keysws.Cells(outputRow, 1).Value = keyws.Cells(outputRow, 2).Value = dict(key)outputRow = outputRow + 1NextMsgBox "Data processed successfully!"
End Sub

总结

相关文章:

  • 解决go install 网络问题
  • 电子电器架构 - AUTOSAR软件架构介绍
  • 设计原则-
  • docker 命令总结
  • 4个宝藏网站,免费即用,办公运营效率利器!
  • Three.js 研究:2、如何让动画线性运动
  • 7.Redis之String编码方式应用场景业务
  • [书生·浦语大模型实战营]——第三节:茴香豆:搭建你的 RAG 智能助理
  • 如何从恢复出厂设置的Android手机恢复联系人?
  • 算法与数据结构汇总
  • C语言--输入一个整数代表秒数,将这个数转化为对应的小时数、分钟数、和秒数
  • 第一篇【传奇开心果系列】Python的跨平台开发工具beeware技术点案例示例:使用beeware实现跨平台开发,从hello world开始
  • 软件杯 题目: 基于深度学习的疲劳驾驶检测 深度学习
  • java hashmap在项目中的使用
  • 【FPGA】Verilog:奇校验位检查器的实现(Odd Parity Bit Checker)
  • 0基础学习移动端适配
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • ESLint简单操作
  • gitlab-ci配置详解(一)
  • gulp 教程
  • java第三方包学习之lombok
  • KMP算法及优化
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • miaov-React 最佳入门
  • ViewService——一种保证客户端与服务端同步的方法
  • vue脚手架vue-cli
  • Web Storage相关
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 关于字符编码你应该知道的事情
  • 欢迎参加第二届中国游戏开发者大会
  • 开发基于以太坊智能合约的DApp
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 应用生命周期终极 DevOps 工具包
  • 用mpvue开发微信小程序
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 数据可视化之下发图实践
  • ​Java基础复习笔记 第16章:网络编程
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 达梦数据库知识点
  • #include到底该写在哪
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (39)STM32——FLASH闪存
  • (7) cmake 编译C++程序(二)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (void) (_x == _y)的作用
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (利用IDEA+Maven)定制属于自己的jar包
  • (算法二)滑动窗口
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略