找回密码
 立即注册
搜索
查看: 1121|回复: 6

[软件] 求助:如何用按键精灵处理Excel数据

[复制链接]
     
发表于 2019-2-11 12:53 | 显示全部楼层 |阅读模式
有表格A和表格B,表格A中的部分行的数据(非全部)需要从表格B里查找出来复制平时都是取表头里名称那列用vlookup函数查找出来的,但这次发行A与B里的名称并不完全一致,B的名称比A要多了几个文字
由于无法得知B的名称多了那些字,暂时只想到用查找功能在B里找出来,再复制过去
于是想到把这些重复劳动交按键精灵,那么怎样才能实现这个操作?
回复

使用道具 举报

头像被屏蔽
     
发表于 2019-2-11 13:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2019-2-11 13:36 | 显示全部楼层
本帖最后由 HYNDコン 于 2019-2-11 13:42 编辑

写脚本,一个比较好的思路是把动作先粗分。讲个脑筋急转弯:如何把大象放进冰箱里?第一步:打开冰箱门;第二步,把大象放进去;第三步,关上冰箱门。博人一笑的急转弯却蕴含着人类处理事情的逻辑。我们可以把一个复杂的操作,拆分成可重复的简单操作,实现这些简单操作的脚本会比较好写。

获取两个Excel的句柄。
A复制表A指定表头()
B用复制内容在B表查询()
C用若干次方向键复制B表内容()
D用若干次方向键粘贴进A表()
E用若干次方向键选中表A下一个表头()
A复制表A指定表头()
B用复制内容在B表查询()
……

然后详写以上子函数的代码即可。

上述操作的关键在于B函数能否成功查询到,如果无法成功查询到,那么要写个判断,让变量:是否成功查询 = 0 ,让CD函数在变量:是否成功查询 = 0 时不工作,即跳过CD操作。判断功能可以用指定区域找图函数来实现。
回复

使用道具 举报

发表于 2019-2-11 14:19 | 显示全部楼层
先干掉數據輸入不規范的人吧
回复

使用道具 举报

     
发表于 2019-2-11 14:46 | 显示全部楼层
本帖最后由 readmetxt 于 2019-2-11 14:49 编辑

=VLOOKUP( 要查找的单元格&"*",目标选区,列数,false)大概是这个意思?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1战斗力 +2 收起 理由
gundammarkⅡ + 2 这可行

查看全部评分

回复

使用道具 举报

     
发表于 2019-2-11 16:26 | 显示全部楼层
readmetxt 发表于 2019-2-11 14:46
=VLOOKUP( 要查找的单元格&"*",目标选区,列数,false)大概是这个意思?

这个只能通配后面的字符串有异的情况。前后都加*不知道行不行?比如 "*"&要查找的单元格&"*"
回复

使用道具 举报

     
发表于 2019-2-11 16:54 | 显示全部楼层
本帖最后由 spikedingo 于 2019-2-11 17:01 编辑

用autoit获取两个excel文件的句柄就可以随意操作了

用stringInStr('B单元格内容', 'B单元格内容中与A相同的部分')函数来确定某一行为对应A内的数据

简单写一下

  1. #include <Excel.au3>
  2. #include <Constants.au3>

  3. Opt('MouseCoordMode', 2)
  4. AutoItSetOption("SendKeyDelay", 100)
  5. ; 链接到已打开的excel工作表
  6. Local $excelA = _ExcelBookAttach("A.xlsx" ,"FileName")
  7. Local $excelB = _ExcelBookAttach("B.xlsx" ,"FileName")
  8. ; 弹框请求起始循环的行数
  9. Dim $readLine = 1
  10. Dim $readLineB = 1
  11. ; Dim $i = 102

  12. ; While语句,A表b列没有数据时,则需要从B表取数据
  13. While _ExcelReadCell($excelA,"b"&$readLine) = ""
  14.         ; 取得A表a列值用于判断
  15.         Local $sCheck = _ExcelReadCell($excel,"a"&$readLine)


  16.         $readLineB = 1

  17.         ; B表a列有数据时,进行读取,否则就不再遍历
  18.         While _ExcelReadCell($excelB,"a"&$readLineB) <> ""

  19.                 Local $sStr = _ExcelReadCell($excelB,"a"&$readLineB)
  20.                 ; B表a列的值包含之前存的A表a列标题,则取B表b列的值去粘贴到A表

  21.                 If StringInStr($sStr, $sCheck) Then
  22.                         Local $Value = _ExcelReadCell($excelB,"b"&$readLineB)
  23.                         ; 粘贴A表并跳出while
  24.                         _ExcelWriteCell($excelA, $Value, "b"&$readLine)
  25.                         ExitLoop
  26.                 EndIf

  27.                 $readLineB +=1
  28.         WEnd
  29.         ; 给A表检查完毕栏做个记号
  30.         _ExcelWriteCell($excelA, 'done', "c"&$readLine)

  31.         $readLine += 1
  32. WEnd
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-8-5 22:52 , Processed in 0.035533 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表