ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请帮助修改一下宏

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-16 17:39 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请帮助修改一下宏,谢谢!
运行宏,在AJ2单元格给出结果,但因为R3:AH52区域数据是公式生成的,所以目前的宏给出的结果是错误的。
正确的结果应该是 2,7,3,10 。
请修改一下宏,能在不去除R3:AH52区域内公式的基础上得出正确的结果。


Sub matching()
Dim arr, arr1, arr2, arr3, i%, j%, k&, l, m&, n&, p&, q&, s
n = [R65536].End(xlUp).Row
p = [Q1]
arr = Range("R3:AH" & n)
ReDim arr1(1 To 17)
ReDim arr2(1 To 17)
   For k = 1 To 17
     For l = 1 To n - 3
        If arr(l, k) > 0 Then
       arr1(k) = arr1(k) + 1
    End If
  Next l
Next k
    For k = 1 To 17
      If arr1(k) = Application.Max(arr1) Then i = k '最大列号
Next
s = i
For j = 1 To [Q1] - 1
    For k = 1 To 17 '求与最大列号匹配次数
      For l = 1 To n - 3
        If arr(l, k) > arr(l, i) And arr(l, i) = 0 Then
      arr2(k) = arr2(k) + 1
    End If
  Next l
Next k
      For k = 1 To 17
        If arr2(k) = Application.Max(arr2) Then  '最大列号
    m = k
    Exit For
  End If
Next
s = s & "," & m
      For l = 1 To n - 3
          If m = i Then Exit For
             If arr(l, i) < arr(l, m) And arr(l, i) = 0 Then
     arr(l, i) = arr(l, m)
     arr(l, m) = 0
  End If
Next l
ReDim arr2(1 To 17)
Next j
Range("AJ" & [AJ65536].End(xlUp).Row + 1) = s
End Sub
修改.rar (23.42 KB, 下载次数: 5)


TA的精华主题

TA的得分主题

发表于 2024-8-16 18:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主的具体需求是什么?
建议结合附件内容描述清楚

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-16 19:06 | 显示全部楼层
liulang0808 发表于 2024-8-16 18:52
楼主的具体需求是什么?
建议结合附件内容描述清楚

谢谢!
就是上面这段宏得出的结果是错误的,原因就是在数据区R3:AH52内的数据是公式生成的,如果是没用公式用手工输入的数据,这段宏就能给出正确的结果。
所以能否修改一下宏,能在不清除数据区公式的基础上得出正确的结果。

TA的精华主题

TA的得分主题

发表于 2024-8-16 19:15 | 显示全部楼层
yvll 发表于 2024-8-16 19:06
谢谢!
就是上面这段宏得出的结果是错误的,原因就是在数据区R3:AH52内的数据是公式生成的,如果是没用 ...

建议楼主还是结合附件详细描述下需求吧
也不知道楼主所谓的首当输入数据是怎样的
没有个对应,把目前公式转换成数值,代码结果还是不变的

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-16 20:09 | 显示全部楼层
liulang0808 发表于 2024-8-16 19:15
建议楼主还是结合附件详细描述下需求吧
也不知道楼主所谓的首当输入数据是怎样的
没有个对应,把目前公 ...

我水平有限,真不知道再如何解释。
在上面的宏的第三行插入
[R3:AH52].Value = [R3:AH52].Value
得出的结果就正确了,但数据区R3:AH52内的公式都被删除了。我是想既不删除数据区R3:AH52内的公式,也能得到正确的结果。
【数据区R3:AH52内的原有公式:R3=IFERROR(COUNTIF($K3:$P3,COLUMN(A1))^0,"")】

TA的精华主题

TA的得分主题

发表于 2024-8-16 20:26 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-16 20:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liulang0808 发表于 2024-8-16 20:26
增加了红色框内代码

太好了,非常感谢您!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 13:44 , Processed in 0.035041 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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