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

【EXCEL_VBA_实战】两组数据比对是否一致(字符串数组)

工作背景:比对两组数据是否一致(位置非一一对应

思路构建:两组数据转换为两组字符串数组,比对所包含元素是否相同

问题点:A数组的第一个元素不一定与B数组的第一个元素对应,此时无法通过公式简单对照

注:网上很多方法都是仅考虑位置一一对应的情况,没有考虑数据错位的情况

突破点:利用统一的排序规则,先分别将两个数组作排序,然后再比对。

逐一比对数组内相应位置的元素,若均相同,则两数组相同,即两组数据相同。

参考链接:比較不同排列的字符串内容是否相同

目录

范例:图示两行数据的是否一致(M1、M2、M3)

1. 构建字符串数组,并调用比较函数(主过程)

2. 构建排序函数(低版本EXCEL需要,高版本可直接使用EXCEL内置Sort)

3. 构建比较函数(模块化编程,避免主函数冗杂)

其他 VBA StrComp函数


范例:图示两行数据的是否一致(M1、M2、M3)

1. 构建字符串数组,并调用比较函数(主过程)

 注1:比对两行的M1、2、3组合是否一致,构建数组元素时要将 材料&板厚 作为一个整体考虑。

注2:执行时需要将1,2,3个代码块同时放在同一个模块下

Sub Example()
Dim M(), M_Temp(), M1, M2, M3, M1_Temp, M2_Temp, M3_Temp As Variant
Dim i As BooleanM1 = Sheet3.Range("a32") & Sheet3.Range("b32")
M2 = Sheet3.Range("c32") & Sheet3.Range("d32")
M3 = Sheet3.Range("e32") & Sheet3.Range("f32")
M1_Temp = Sheet3.Range("a33") & Sheet3.Range("b33")
M2_Temp = Sheet3.Range("c33") & Sheet3.Range("d33")
M3_Temp = Sheet3.Range("e33") & Sheet3.Range("f33")M = Array(M1, M2, M3)
M_Temp = Array(M1_Temp, M2_Temp, M3_Temp)'结果输出
i = Compare_Combination(M, M_Temp, 3)Sheet3.Range("b35") = iEnd Sub

2. 构建排序函数(低版本EXCEL需要,高版本可直接使用EXCEL内置Sort)

Function Sort_Array(arr() As Variant) As VariantDim i, j As Integer
Dim temp As Variant'因字符串比较,因此仅能使用StrComp
For i = LBound(arr) To UBound(arr)For j = i + 1 To UBound(arr)If VBA.StrComp(arr(i), arr(j), vbTextCompare) > 0 Then' 字符顺序由小到大排序temp = arr(i)arr(i) = arr(j)arr(j) = tempEnd IfNext j
Next iSort_Array = arr()End Function

3. 构建比较函数(模块化编程,避免主函数冗杂)

Function Compare_Combination(M() As Variant, M_Temp() As Variant, num As Integer)' M() 基准组合,M_Temp() 待比对组合,num 为元素数量'比对结果,默认为True
Dim result As Boolean
result = TrueDim T(), T_Temp() As Variant' 低版本EXCEL自主构建sort函数
T = Sort_Array(M)
T_Temp = Sort_Array(M_Temp)'高版本EXCEL内置sort函数时可使用
' Sort函数需数组为列存储时方可正确排序(行数据无法正确排序),因此需转置再排序
'T = Excel.Application.WorksheetFunction.Sort(Application.WorksheetFunction.Transpose(M))
'T_Temp = Excel.Application.WorksheetFunction.Sort(Application.WorksheetFunction.Transpose(M_Temp))Dim i As Integer
For i = 0 To num - 1If T(i) <> T_Temp(i) Thenresult = FalseExit ForEnd If
NextCompare_Combination = resultEnd Function

其他 VBA StrComp函数

http://www.lryc.cn/news/351723.html

相关文章:

  • 寻找峰值 ---- 二分查找
  • C语言--输入一个整数代表秒数,将这个数转化为对应的小时数、分钟数、和秒数
  • 二分搜索技术
  • docker容器安装nexus3以及nexus3备份迁移仓库数据
  • 无线领夹麦克风哪个品牌音质最好,揭秘无线领夹麦哪个牌子好用
  • pcd点云江湖之处处碰壁:点云文件pcd加载02
  • 【SQL国际标准】ISO/IEC 9075:2023 系列SQL的国际标准详情
  • 15.1数组练习题
  • Flink 任务调度策略:Lazy from Sources 深入解析
  • 【NumPy】关于numpy.reshape()函数,看这一篇文章就够了
  • 探寻最强性能云电脑:ToDesk云电脑、无影云、网易云游戏、易腾云横测大比拼
  • 回溯法——(2)n皇后问题(C语言讲解)(LeetCode51 N皇后思想)(4皇后棋盘画图举例)(附代码)
  • 数据库系统概论(第5版)复习笔记
  • 数仓领域,Serving 是什么概念?
  • Python筑基之旅-MySQL数据库(三)
  • (全面)Nginx格式化插件,Nginx生产工具,Nginx常用命令
  • 软考 软件设计师 场景分析题 速成篇
  • [学习笔记](Python3)防止SQL注入、XSS攻击和文件上传漏洞
  • 西门子CPU与汇川伺服通信与控制
  • 移动硬盘无法读取怎么修复?简单八步,轻松搞定!
  • c4d云渲染是工程文件会暴露吗?
  • C语言/数据结构——每日一题(有效的括号)
  • STM32使用旋转编码开关
  • OneMO同行 心级服务:中移物联OneMO模组助力客户终端寒冷环境下的稳定运行
  • 爬虫视图展示之 Power BI
  • 微软刚发布的Copilot+PC为什么让Intel和AMD尴尬?2024 AI PC元年——产业布局及前景展望
  • 抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具
  • 类的组合、作用域与可见性、类的静态成员、单例模式、
  • 高速公路定向广播(声光一体) HT-600D
  • 2024离婚新规已生效,不用等30天冷静期,线上开庭