如何让指定Excel公式运行直至返回值≤25?
实现Excel随机取值直到结果≤25的VBA方案
方案1:使用 Do...Loop 循环(更贴合需求逻辑)
这种循环会直接判断结果是否满足条件,直到拿到符合要求的值,逻辑更直观:
Sub GetRandomValueUntil25() Dim randomVal As Variant Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") ' 循环直到获取到≤25的数值 Do ' 计算指定区域的随机值 randomVal = Application.Index(ws.Range("A1:F15"), Application.RandBetween(1, 15), Application.RandBetween(1, 6)) ' 加入防死循环判断,最多尝试1000次 Static attemptCount As Integer attemptCount = attemptCount + 1 If attemptCount >= 1000 Then MsgBox "尝试1000次仍未找到符合条件的值,已终止" Exit Sub End If Loop Until randomVal <= 25 ' 将结果写入目标单元格(示例为Sheet2的A1,可自行修改) ThisWorkbook.Worksheets("Sheet2").Range("A1").Value = randomVal MsgBox "找到符合条件的值:" & randomVal End Sub
方案2:使用 For...Next 循环(满足你的需求偏好)
如果一定要用For...Next,可以设置足够大的循环次数,在循环内判断是否符合条件,符合就提前退出:
Sub GetRandomValueWithForLoop() Dim randomVal As Variant Dim ws As Worksheet Dim i As Integer Set ws = ThisWorkbook.Worksheets("Sheet1") ' 设置最多循环1000次,避免无限循环 For i = 1 To 1000 randomVal = Application.Index(ws.Range("A1:F15"), Application.RandBetween(1, 15), Application.RandBetween(1, 6)) If randomVal <= 25 Then ' 写入结果并退出循环 ThisWorkbook.Worksheets("Sheet2").Range("A1").Value = randomVal MsgBox "找到符合条件的值:" & randomVal & "(尝试次数:" & i & ")" Exit For End If Next i ' 如果循环结束仍未找到 If i > 1000 Then MsgBox "尝试1000次仍未找到符合条件的值" End If End Sub
使用说明
- 打开Excel,按下
Alt + F11打开VBA编辑器 - 右键点击当前工作簿,选择「插入」→「模块」
- 将上述代码粘贴到模块中
- 按下
F5运行宏,或回到Excel界面通过「开发工具」→「宏」选择对应宏运行
注意事项
- 确保
Sheet1的A1:F15区域包含数值型数据,否则可能返回错误值 - 设置最大尝试次数是为了防止区域内没有≤25的值导致无限循环,可根据实际情况调整次数
内容的提问来源于stack exchange,提问作者OmNamohBhagwateVasudevaye
相关产品推荐
相关产品推荐

