ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用vba代码对所选单元格区域内最大值单元格进行选定?

如何用vba代码对所选单元格区域内最大值单元格进行选定?

作者:绿色风 分类: 时间:2022-08-17 浏览:102
楼主
kevinchengcw
Q: 如何用vba代码对所选单元格区域内最大值单元格进行选定?
A: 代码如下:
  1. Sub test()
  2. Dim Rng As Range, mMax#, R As Range, RS As Range
  3. On Error GoTo Skip  '设置出错跳转
  4. Set Rng = Application.InputBox("请用鼠标选择要挑选最大值的单元格范围:", "选择区域", , , , , , 8)   '选择要查找的单元格范围
  5. mMax = WorksheetFunction.Max(Rng)   '提取出最大值
  6. Set RS = Rng.Find(mMax, LookIn:=xlValues, LookAt:=xlWhole)  '查找第一个位置
  7. Set R = RS  '储存找到的位置
  8. Do
  9.     Set RS = Rng.FindNext(RS)   '查找下一个
  10.     If RS.Address <> Rng.Find(mMax, LookIn:=xlValues, LookAt:=xlWhole) Then Set R = Union(R, RS)    '如果不是原有单元格则添加到找到的区域
  11. Loop While RS.Address <> Rng.Find(mMax, LookIn:=xlValues, LookAt:=xlWhole).Address  '如果未回到第一个位置则继续循环
  12. R.Select    '选定找到的单元格位置
  13. Exit Sub    '正常退出程序
  14. Skip:   '出错时跳到这里退出
  15. End Sub
2楼
0Mouse
代码考虑了最大值可能有多个的情况,也设置了相应的消错语句,考虑的蛮周到的。
貌似If RS.Address <> Rng.Find(mMax, LookIn:=xlValues, LookAt:=xlWhole) Then这一句不写也可以,因为已经设置了何时中止循环,就算R和RS出现一次相同,Union(R, RS)得到的也是正确的结果。另外,经测试,代码中的出错语句可以避免选取空白单元格区域发生的错误,但是不能避免单击inputbox的“取消”按钮出现错误提示,所以如果能再加上处理这一错误的语句那就更完美了。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap