ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求教怎么在三层for循环中跳出内层循环,好难啊

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-4 22:33 | 显示全部楼层 |阅读模式
本帖最后由 猪腰子 于 2020-3-5 15:21 编辑

求高手指点。新手自学VBS有点不太懂,论坛里没找到解决方法。原理是sheet1中的工资表,比对sheet2中的薪酬分级,分级的值相互有覆盖,向下取值。
我套了三层for循环以后,原本设定是从sheet2左下往右上挨个比对,结果比对上的时候里面两个循环跳出不了了。。。用exit for好像也不起效果。

代码贴在下面,搞不懂exit for是不是跟next一样和for一一对应,但是好像不管放在哪里都没啥用。求高手指点迷津

  1. Sub 薪酬分级()
  2. Dim Z&
  3. Dim i%, j%, k%
  4. Z = Range("A5000").End(xlUp).Row '表格sheet1中,从A25000开始自下而上获取第一个非空数据,a为其行数
  5. For k = 2 To Z
  6. For i = 2 To 8
  7. For j = 2 To 8
  8.     If Sheets("sheet1").Cells(k, 2).Value <= Sheets("sheet2").Cells(10 - i, j).Value Then '如果单元格(K,2)的值小于等于单元格(i,j)的值,则
  9.     Cells(k, 3) = (Sheets("Sheet2").Cells(1, j) & "-" & Sheets("Sheet2").Cells(10 - i, 1)) '返回单元格(K,3)=单元格(i,1)&单元格(1,j)
  10. ElseIf Sheets("sheet1").Cells(k, 2).Value <= Sheets("sheet2").Cells(10 - i, j + 1).Value Then '如果单元格(K,2)的值小于等于单元格(i,j+1)的值
  11.         Cells(k, 3) = (Sheets("sheet2").Cells(1, j + 1) & "-" & Sheets("sheet2").Cells(10 - i, 1)) '返回单元格(K,3)=单元格(i,1)&单元格(1,j+1)的值
  12. Exit For
  13.         End If
  14. Next
  15. Next
  16. Next
  17. End
复制代码

微信截图_20200304221948.png
微信截图_20200304222000.png
微信截图_20200304222013.png

薪酬分级.zip

8.16 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2020-3-5 06:58 | 显示全部楼层
Exit For只能退出一层循环,不知道楼主需要实现什么效果

TA的精华主题

TA的得分主题

发表于 2020-3-5 07:06 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-5 10:16 | 显示全部楼层
taller 发表于 2020-3-5 06:58
Exit For只能退出一层循环,不知道楼主需要实现什么效果

你好前辈,代码中i和j分别是行和列,本来的设想是遍历sheet2中的单元格,对比中以后就返回结果,然后退出内层的i和j两个循环,继续执行最外层的k循环。但是现在跳出不了,我写的比较啰嗦,大概就是这么个设想。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-5 10:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yuwd3 发表于 2020-3-5 07:06
简单点,用goto就行的

谢谢大佬,我试试看

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-5 10:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
搞定了,加了个GOTO能正常运行了,顺便纠正了代码中两个低级错误,昨天晚上折腾到10点多,头晕眼花写错了,哈哈哈,感谢两位前辈

TA的精华主题

TA的得分主题

发表于 2020-3-5 11:25 | 显示全部楼层
直接看不懂你要将什么对比,比如k=2,i=2,j=2时,Sheets("sheet1").Cells(k, 2).Value <= Sheets("sheet1").Cells(10 - i, j).Value
就是将Sheet1自身的Cells(2,2)和Cells(8,2)对比

TA的精华主题

TA的得分主题

发表于 2020-3-5 12:01 | 显示全部楼层
'退出不同循环m的值是不一样的

'一般错误处理时才会使用goto的,,,

Option Explicit

Sub test()
  Dim arr, i, j, k, m
  arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  For i = 0 To UBound(arr)
    For j = 0 To UBound(arr)
      For k = 0 To UBound(arr)
        m = m + 1
        If m = 5 Then
          j = UBound(arr): Exit For '同时退出j循环
'          j = UBound(arr): i = j: Exit For '全部退出
        End If
      Next
    Next
  Next
  Debug.Print m
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-5 15:59 | 显示全部楼层
shenjianrong163 发表于 2020-3-5 11:25
直接看不懂你要将什么对比,比如k=2,i=2,j=2时,Sheets("sheet1").Cells(k, 2).Value

你好,最内层的两个比较式是我写错了,低级失误

TA的精华主题

TA的得分主题

发表于 2020-3-5 16:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
編程需要tab分層啊
這樣看不死人嗎
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 22:08 , Processed in 0.055581 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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