ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5559|回复: 23

[求助] 按动态条件比较数值大小关系

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-5-20 19:00 | 显示全部楼层 |阅读模式
本帖最后由 jackyava 于 2017-5-20 20:12 编辑

AF:AH列与AK:AM列为两位员工的工资奖金补助。数据量多,用函数体积变大,故求助VBA
1.png
1-1.png
2.png
2-2.png
3.png
3-3.png
另外添加下字体和背景颜色(详见附件)
附件 按动态条件比较数值大小关系.rar (2.93 KB, 下载次数: 15)


2.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-21 18:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-5-21 18:47 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-21 19:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-5-21 23:25 | 显示全部楼层
jackyava 发表于 2017-5-21 19:54
老师能帮忙做一下吗

我也是在学习阶段,没法上车。。。
一起努力吧。

TA的精华主题

TA的得分主题

发表于 2017-5-22 17:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-5-22 17:41 | 显示全部楼层
  1. Sub lqt()
  2.     tms = Timer
  3.     r = Cells(Rows.Count, 32).End(3).Row
  4.     Range("w1:ac" & r).Clear
  5.     arr = Range("af1:ah" & r)
  6.     brr = Range("ak1:am" & r)
  7.     crr = Range("w1:y" & r)
  8.     drr = Range("aa1:ac" & r)
  9.     Application.ScreenUpdating = False
  10.     For i = 3 To r Step 4
  11.         For j = 1 To 3
  12.             If arr(i, j) <> "" And brr(i, j) <> "" Then
  13.                 crr(i - 1, j) = arr(i - 1, j): drr(i - 1, j) = brr(i - 1, j)
  14.                 If arr(i, 1) = brr(i, 1) Then
  15.                      crr(i, 1) = "参照"
  16.                      If arr(i, 2) > arr(i, 1) Then
  17.                          crr(i, 2) = "大于参照"
  18.                      ElseIf arr(i, 2) < arr(i, 1) Then
  19.                          crr(i, 2) = "小于参照"
  20.                      End If
  21.                      If arr(i, 3) > arr(i, 1) Then
  22.                         crr(i, 3) = "大于参照"
  23.                      ElseIf arr(i, 3) < arr(i, 1) Then
  24.                         crr(i, 3) = "小于参照"
  25.                      End If
  26.                 End If
  27.                 If arr(i, 2) = brr(i, 2) Then
  28.                      crr(i, 2) = "参照"
  29.                      If arr(i, 2) < arr(i, 1) Then
  30.                          crr(i, 1) = "大于参照"
  31.                      ElseIf arr(i, 2) > arr(i, 1) Then
  32.                          crr(i, 1) = "小于参照"
  33.                      End If
  34.                      If arr(i, 3) > arr(i, 2) Then
  35.                          crr(i, 3) = "大于参照"
  36.                      ElseIf arr(i, 3) < arr(i, 2) Then
  37.                          crr(i, 3) = "小于参照"
  38.                      End If
  39.                 End If
  40.                 If arr(i, 3) = brr(i, 3) Then
  41.                      crr(i, 3) = "参照"
  42.                      If arr(i, 1) < arr(i, 3) Then
  43.                          crr(i, 1) = "小于参照"
  44.                      ElseIf arr(i, 1) > arr(i, 3) Then
  45.                          crr(i, 1) = "大于参照"
  46.                      End If
  47.                      If arr(i, 3) < arr(i, 2) Then
  48.                         crr(i, 2) = "大于参照"
  49.                      ElseIf arr(i, 3) > arr(i, 2) Then
  50.                         crr(i, 2) = "小于参照"
  51.                     End If
  52.                 End If
  53.                 If arr(i + 1, 1) = brr(i + 1, 1) Then
  54.                      crr(i + 1, 1) = "参照"
  55.                      If arr(i + 1, 2) > arr(i + 1, 1) Then
  56.                          crr(i + 1, 2) = "大于参照"
  57.                      ElseIf arr(i + 1, 2) < arr(i + 1, 1) Then
  58.                          crr(i + 1, 2) = "小于参照"
  59.                      End If
  60.                      If arr(i + 1, 3) > arr(i + 1, 1) Then
  61.                         crr(i + 1, 3) = "大于参照"
  62.                      ElseIf arr(i + 1, 3) < arr(i + 1, 1) Then
  63.                         crr(i + 1, 3) = "小于参照"
  64.                      End If
  65.                 End If
  66.                 If arr(i + 1, 2) = brr(i + 1, 2) Then
  67.                      crr(i + 1, 2) = "参照"
  68.                      If arr(i + 1, 2) < arr(i + 1, 1) Then
  69.                          crr(i + 1, 1) = "大于参照"
  70.                      ElseIf arr(i + 1, 2) > arr(i + 1, 1) Then
  71.                          crr(i + 1, 1) = "小于参照"
  72.                      End If
  73.                      If arr(i + 1, 3) > arr(i + 1, 2) Then
  74.                          crr(i + 1, 3) = "大于参照"
  75.                      ElseIf arr(i + 1, 3) < arr(i + 1, 2) Then
  76.                          crr(i + 1, 3) = "小于参照"
  77.                      End If
  78.                 End If
  79.                 If arr(i + 1, 3) = brr(i + 1, 3) Then
  80.                      crr(i + 1, 3) = "参照"
  81.                      If arr(i + 1, 1) < arr(i + 1, 3) Then
  82.                          crr(i + 1, 1) = "小于参照":
  83.                      ElseIf arr(i + 1, 1) > arr(i + 1, 3) Then
  84.                          crr(i + 1, 1) = "大于参照"
  85.                      End If
  86.                      If arr(i + 1, 3) < arr(i + 1, 2) Then
  87.                         crr(i + 1, 2) = "大于参照"
  88.                      ElseIf arr(i + 1, 3) > arr(i + 1, 2) Then
  89.                         crr(i + 1, 2) = "小于参照"
  90.                     End If
  91.                 End If
  92.                 If arr(i, 1) = brr(i, 1) Then
  93.                       drr(i, 1) = "参照"
  94.                      If brr(i, 2) > brr(i, 1) Then
  95.                           drr(i, 2) = "大于参照"
  96.                      ElseIf brr(i, 2) < brr(i, 1) Then
  97.                           drr(i, 2) = "小于参照"
  98.                      End If
  99.                      If brr(i, 3) > brr(i, 1) Then
  100.                          drr(i, 3) = "大于参照"
  101.                      ElseIf brr(i, 3) < brr(i, 1) Then
  102.                         drr(i, 3) = "小于参照"
  103.                      End If
  104.                 End If
  105.                 If arr(i, 2) = brr(i, 2) Then
  106.                       drr(i, 2) = "参照"
  107.                      If brr(i, 2) < brr(i, 1) Then
  108.                           drr(i, 1) = "大于参照"
  109.                      ElseIf brr(i, 2) > brr(i, 1) Then
  110.                           drr(i, 1) = "小于参照"
  111.                      End If
  112.                      If brr(i, 3) > brr(i, 2) Then
  113.                           drr(i, 3) = "大于参照"
  114.                      ElseIf brr(i, 3) < brr(i, 2) Then
  115.                           drr(i, 3) = "小于参照"
  116.                      End If
  117.                 End If
  118.                 If arr(i, 3) = brr(i, 3) Then
  119.                       drr(i, 3) = "参照"
  120.                      If brr(i, 1) < brr(i, 3) Then
  121.                           drr(i, 1) = "小于参照"
  122.                      ElseIf brr(i, 1) > brr(i, 3) Then
  123.                           drr(i, 1) = "大于参照"
  124.                      End If
  125.                      If brr(i, 3) < brr(i, 2) Then
  126.                          drr(i, 2) = "大于参照"
  127.                      ElseIf brr(i, 3) > brr(i, 2) Then
  128.                          drr(i, 2) = "小于参照"
  129.                     End If
  130.                 End If
  131.                 If arr(i + 1, 1) = brr(i + 1, 1) Then
  132.                       drr(i + 1, 1) = "参照"
  133.                      If brr(i + 1, 2) > brr(i + 1, 1) Then
  134.                          drr(i + 1, 2) = "大于参照"
  135.                      ElseIf brr(i + 1, 2) < brr(i + 1, 1) Then
  136.                           drr(i + 1, 2) = "小于参照"
  137.                      End If
  138.                      If brr(i + 1, 3) > brr(i + 1, 1) Then
  139.                          drr(i + 1, 3) = "大于参照"
  140.                      ElseIf brr(i + 1, 3) < brr(i + 1, 1) Then
  141.                          drr(i + 1, 3) = "小于参照"
  142.                      End If
  143.                 End If
  144.                 If arr(i + 1, 2) = brr(i + 1, 2) Then
  145.                       drr(i + 1, 2) = "参照"
  146.                      If brr(i + 1, 2) < brr(i + 1, 1) Then
  147.                           drr(i + 1, 1) = "大于参照"
  148.                      ElseIf brr(i + 1, 2) > brr(i + 1, 1) Then
  149.                           drr(i + 1, 1) = "小于参照"
  150.                      End If
  151.                      If brr(i + 1, 3) > brr(i + 1, 2) Then
  152.                           drr(i + 1, 3) = "大于参照"
  153.                      ElseIf brr(i + 1, 3) < brr(i + 1, 2) Then
  154.                           drr(i + 1, 3) = "小于参照"
  155.                      End If
  156.                 End If
  157.                 If arr(i + 1, 3) = brr(i + 1, 3) Then
  158.                       drr(i + 1, 3) = "参照"
  159.                      If brr(i + 1, 1) < brr(i + 1, 3) Then
  160.                           drr(i + 1, 1) = "小于参照"
  161.                      ElseIf brr(i + 1, 1) > brr(i + 1, 3) Then
  162.                           drr(i + 1, 1) = "大于参照"
  163.                      End If
  164.                      If brr(i + 1, 3) < brr(i + 1, 2) Then
  165.                         drr(i + 1, 2) = "大于参照"
  166.                      ElseIf brr(i + 1, 3) > brr(i + 1, 2) Then
  167.                          drr(i + 1, 2) = "小于参照"
  168.                     End If
  169.                 End If
  170.             End If
  171.         Next
  172.     Next
  173.     Range("w1:y" & r) = crr
  174.     Range("aa1:ac" & r) = drr
  175.     With [w1].Resize(r, 3)
  176.         For i = 3 To r Step 4
  177.             .Cells(i, 1).Resize(2, 3).Font.Bold = True
  178.             .Cells(i, 1).Resize(2, 3).HorizontalAlignment = xlCenter
  179.         Next
  180.         For i = 3 To r
  181.             For j = 1 To 3
  182.                 With .Cells(i, j)
  183.                     If crr(i, j) = "大于参照" Then
  184.                         .Font.ColorIndex = 6
  185.                         .Interior.ColorIndex = 3
  186.                     ElseIf crr(i, j) = "小于参照" Then
  187.                         .Font.ColorIndex = 6
  188.                         .Interior.ColorIndex = 7
  189.                     ElseIf crr(i, j) = "参照" Or crr(i, j) = "等于参照" Then
  190.                         .Font.ColorIndex = 1
  191.                         .Interior.ColorIndex = 40
  192.                     End If
  193.                 End With
  194.             Next
  195.         Next
  196.     End With
  197.     With [aa1].Resize(r, 3)
  198.         For i = 3 To r Step 4
  199.             .Cells(i, 1).Resize(2, 3).Font.Bold = True
  200.             .Cells(i, 1).Resize(2, 3).HorizontalAlignment = xlCenter
  201.         Next
  202.         For i = 3 To r
  203.             For j = 1 To 3
  204.                 With .Cells(i, j)
  205.                     If drr(i, j) = "大于参照" Then
  206.                         .Font.ColorIndex = 6
  207.                         .Interior.ColorIndex = 3
  208.                     ElseIf drr(i, j) = "小于参照" Then
  209.                         .Font.ColorIndex = 6
  210.                         .Interior.ColorIndex = 7
  211.                     ElseIf drr(i, j) = "参照" Or crr(i, j) = "等于参照" Then
  212.                         .Font.ColorIndex = 1
  213.                         .Interior.ColorIndex = 40
  214.                     End If
  215.                 End With
  216.             Next
  217.         Next
  218.     End With
  219.     Application.ScreenUpdating = True
  220.     MsgBox "比较完成!耗时:" & Timer - tms & "秒"
  221. End Sub
复制代码

用个笨办法,终于勉强完成了:

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-5-22 21:03 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-22 21:46 | 显示全部楼层
本帖最后由 jackyava 于 2017-5-22 22:25 编辑
lsc900707 发表于 2017-5-22 21:03
可能有更简便的方法,我可能走了弯路,呵呵。

老师的代码,有错误的地方

TA的精华主题

TA的得分主题

发表于 2017-5-22 21:52 | 显示全部楼层
jackyava 发表于 2017-5-22 21:46
老师的代码,显示不出等于参照点

当时看附件没有,所以没加这个,确实疏忽了。

评分

1

查看全部评分

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 06:22 , Processed in 0.050078 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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