• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

如何用脚本进行EXCEL数据对比?详解来了!【附按键源码】 [复制链接]

1#
-教程最后附按键源码,欢迎新手学习-
在抖音上关注“按键精灵”(抖音号:GUKOOHOT),我们将不定期发布各类办公中、生活里会用到的脚本小技巧,本篇教程小视频,已发布于抖音,欢迎观看!

办公中经常用到excel处理数据,遇到两列数据,需要找不同项时如何用脚本来实现呢? 来,这篇小技巧也许可以帮到你!

一、脚本思路

对比A列和B列数据不同,最简单的方式就是通过遍历来对比
1、获取A列第一个数据
2、遍历B列数据,用刚才获取的A列的数据逐个对比,如果在B列里没有找到相同的数据,就说明B列缺失此数据
3、遍历完B列数据,继续获取A列的第二个数据。以此类推循环下去,直到A列数据全部遍历一边

思路整理完毕,那就开始动手写了……


二、插件命令

按键精灵自带没有直接很好用来操作EXCEL的命令,所以需要用到第三方的【懒人Office】插件来实现了。
您所在的用户组无法下载或查看附件

先来看下需要用到核心命令:

命令名称: ExcelOpen
命令功能: 打开EXCEL文档,若EXCEL已经手动打开,则本命令仅返回操作所需的索引值而不影响表格
命令参数: 【参数1】 EXCEL完整路径
【参数2(可选)】 打开方法,0不可见,1为可见。默认为0
【参数3(可选)】 打开权限密码,无密码则不需填写
【参数4(可选)】 修改权限密码,无密码则不需填写
【参数5(可选)】 设为1以只读模式打开

命令名称: ExcelRead
命令功能: 读取单元格内容
命令参数: 【参数1】 工作表页,可用整数型数值表示是第几个工作表标签,也可用字符串型的标签名称
【参数2】 行,整数型
【参数3】 列,整数型数值表示是第几列,或者直接使用列名称
【参数4(可选)】 索引值 ,如果只用本插件打开了一个EXCEL,则可以留空


三、脚本实现

1、获取界面配置
需要先获取界面上一些配置,比如文档的路径起始的位置什么的,以便后续使用
  1. // 获取表格路径并打开表格
  2. Dim ExlIndex
  3. Dim ExlPath : ExlPath = Form1.BrowseBox1.Path
  4. ExlIndex = LazyOffice.ExcelOpen(ExlPath, 1)
  5. TracePrint LazyOffice.ExcelPath()

  6. Dim Start_Row1, Start_Row2, Start_Colum1, Start_Colum2

  7. // 单元格地址转换成行列
  8. Call LazyOffice.AddToLoc(Form1.InputBox2.Text, Start_Row1, Start_Colum1)
  9. Call LazyOffice.AddToLoc(Form1.InputBox3.Text, Start_Row2, Start_Colum2)
  10. TracePrint "第一列起始位置:第" & Start_Row1 & "行,第" & Start_Colum1 & "列"
  11. TracePrint "第二列起始位置:第" & Start_Row2 & "行,第" & Start_Colum2 & "列"
复制代码

AddToLoc 命令是用来把EXCEL的单元格地址(如:B2)转换成行和列的功能。

2、获取A\B列的最大行数
  1. // 计算两列的最大行数
  2. Dim MaxCount_A : MaxCount_A = Start_Row1
  3. Dim MaxCount_B : MaxCount_B = Start_Row2
  4. Do
  5. If LazyOffice.ExcelRead(1, MaxCount_A, Start_Colum1, ExlIndex) <> "" Then
  6. MaxCount_A = MaxCount_A + 1
  7. Else
  8. Exit Do
  9. End If
  10. Loop
  11. TracePrint "第一列数据最大行数:" & MaxCount_A

  12. Do
  13. If LazyOffice.ExcelRead(1, MaxCount_B, Start_Colum2, ExlIndex) <> "" Then
  14. MaxCount_B = MaxCount_B + 1
  15. Else
  16. Exit Do
  17. End If
  18. Loop
  19. TracePrint "第二列数据最大行数:" & MaxCount_B
复制代码

3、遍历A列和B列,并对比其中的数据
  1. // 对比两列数据查找不同
  2. For i = Start_Row1 To MaxCount_A - 1
  3. Dim isExits : isExits = false
  4. Dim Text_A : Text_A = LazyOffice.ExcelRead(1, i, Start_Colum1, ExlIndex)
  5. For j = Start_Row2 To MaxCount_B - 1
  6. Dim Text_B : Text_B = LazyOffice.ExcelRead(1, j, Start_Colum2, ExlIndex)
  7. If Text_A = Text_B Then
  8. isExits = true
  9. Exit For
  10. End If
  11. Next
  12. If isExits = false Then
  13. TracePrint Text_A & " 账号在B列中不存在"
  14. End If
  15. Delay 50
  16. Next
复制代码

至此整个数据对比就实现了。有兴趣的小伙伴可以下载源码用于参考,希望这篇教程对你有帮助哦!


完整源码下载:
您所在的用户组无法下载或查看附件


关注按键精灵抖音号,我们将不定期发布各类办公中、生活里会用到的脚本小技巧哦~


您所在的用户组无法下载或查看附件


本主题由 按键精灵总策划 果壳王子 于 2021/11/13 13:55:06 执行 审核帖子 操作
2#

启动没反应啊,插件也放在相应文件夹了

3#

不错的脚本

4#

支持

发新话题 回复该主题