Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2767|回复: 10

[已解决]多个表与原表比较,用颜色标识不同的地方

[复制链接]
发表于 2012-8-16 16:04 | 显示全部楼层 |阅读模式
本帖最后由 octopusfish 于 2012-8-16 16:44 编辑

如何用宏来实现,尝试用了条件格式,录制了宏,但不好用,不知道问题出在哪里。
目标是:先将标准答案导入,选手的答案依次导入,导入一次,运行一次宏进行比较,
在选手的答案上将不同于标准答案的地方用红色标识。
也可以使所有数据导入后,运行一次宏,在各个选手答案上将不同于标准答案的地方用红色标识。
请问各位高手这样的宏如何写,请帮助,谢谢!

最佳答案
2012-8-16 16:55
本帖最后由 askteller 于 2012-8-16 17:00 编辑
  1. Sub test()
  2. Dim arr, brr
  3. Dim i, m, n
  4. arr = Sheets("标准答案").Range("A1:BI" & [a65536].End(3).Row)
  5. For i = 1 To Sheets.Count
  6. If Sheets(i).Name <> "标准答案" Then
  7. With Sheets(i)
  8. brr = .Range("A1:BI" & [a65536].End(3).Row)
  9. For m = 1 To UBound(arr)
  10. For n = 1 To UBound(arr, 2)
  11. If arr(m, n) <> brr(m, n) Then .Cells(m, n).Interior.ColorIndex = 3
  12. Next n
  13. Next m
  14. End With
  15. End If
  16. Next i
  17. End Sub
复制代码
上面的程序运行有点慢,用这个试试。

TCL.rar

489.47 KB, 下载次数: 20

发表于 2012-8-16 16:18 | 显示全部楼层
你导入到数据格式还有不一样的!
选手1从第二行开始
选手2从第一行开始
以那个为准?
回复

使用道具 举报

 楼主| 发表于 2012-8-16 16:31 | 显示全部楼层
不好意思,格式应该是一样的,选手1第一行应该删掉的
回复

使用道具 举报

 楼主| 发表于 2012-8-16 16:32 | 显示全部楼层
比较相同位置的文本是否一样
回复

使用道具 举报

发表于 2012-8-16 16:52 | 显示全部楼层
  1. Sub test2()
  2. Dim arr, brr
  3. Dim i, m, n
  4. arr = Sheets("标准答案").Range("A1:BI" & [a65536].End(3).Row)
  5. For i = 1 To Sheets.Count

  6. If Sheets(i).Name <> "标准答案" Then
  7. With Sheets(i)
  8. For m = 1 To UBound(arr)
  9. For n = 1 To UBound(arr, 2)
  10. If arr(m, n) <> .Cells(m, n) Then .Cells(m, n).Interior.ColorIndex = 6
  11. Next n
  12. Next m
  13. End With
  14. End If
  15. Next i
  16. End Sub
复制代码
回复

使用道具 举报

发表于 2012-8-16 16:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 askteller 于 2012-8-16 17:00 编辑
  1. Sub test()
  2. Dim arr, brr
  3. Dim i, m, n
  4. arr = Sheets("标准答案").Range("A1:BI" & [a65536].End(3).Row)
  5. For i = 1 To Sheets.Count
  6. If Sheets(i).Name <> "标准答案" Then
  7. With Sheets(i)
  8. brr = .Range("A1:BI" & [a65536].End(3).Row)
  9. For m = 1 To UBound(arr)
  10. For n = 1 To UBound(arr, 2)
  11. If arr(m, n) <> brr(m, n) Then .Cells(m, n).Interior.ColorIndex = 3
  12. Next n
  13. Next m
  14. End With
  15. End If
  16. Next i
  17. End Sub
复制代码
上面的程序运行有点慢,用这个试试。
回复

使用道具 举报

 楼主| 发表于 2012-8-16 17:02 | 显示全部楼层
非常感谢,第二个运行速度果然很快。再附加一个问题,如果行,列都不确定又该如何写啊
回复

使用道具 举报

发表于 2012-8-16 17:03 | 显示全部楼层
  1. Sub 比较答案()
  2. For i = 1 To 3
  3.     Sheets("选手" & i).Cells.Interior.Color.Clear
  4.     For h = 1 To Range("a65536").End(3).Row
  5.         For l = 1 To 61
  6.             If Sheets("选手" & i).Cells(h, l) <> Sheets("标准答案").Cells(h, l) Then
  7.                 Sheets("选手" & i).Cells(h, l).Interior.Color = 255
  8.             End If
  9.         Next
  10.     Next
  11. Next
  12. End Sub
复制代码
回复

使用道具 举报

发表于 2012-8-16 17:07 | 显示全部楼层
本帖最后由 askteller 于 2012-8-16 17:11 编辑
octopusfish 发表于 2012-8-16 17:02
非常感谢,第二个运行速度果然很快。再附加一个问题,如果行,列都不确定又该如何写啊


只要区域大小是一样的,不同行列的话要改一下以下这3句,因为用了循环,所以选手1,2,3的行列要一样。
arr = Sheets("标准答案").Range("A1:BI" & [a65536].End(3).Row)

brr = .Range("A1:BI" & [a65536].End(3).Row)

.Cells(m, n).Interior.ColorIndex = 3

[a65536].End(3).Row表示A列的最后一行的行号。
回复

使用道具 举报

 楼主| 发表于 2012-8-16 19:47 | 显示全部楼层
askteller 发表于 2012-8-16 17:07
只要区域大小是一样的,不同行列的话要改一下以下这3句,因为用了循环,所以选手1,2,3的行列要一样。
...

区域大小是一样的。用程序导入数据,但是最大列可能不是BI,可能比BI大,也可能比BI小。
也在考虑怎么往宏里面传参数,没找到相关的资料,不知您是否做过,c#.net,能否往宏里传参数
在数据导入的过程中已经获得了最大行和最大列。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-6 03:17 , Processed in 0.895656 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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