You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA宏嵌套调用及随机数生成后值粘贴问题求助

解决VB宏生成多个静态随机数的问题

嘿,作为Visual Basic新手遇到这种循环执行的问题太正常了,我来帮你捋清楚怎么搞定!

首先得说清楚你之前的问题出在哪:你的BINGO宏每次生成随机数后都只写到G5单元格,就算你用Call调用三次,后面的结果会直接覆盖前面的,所以看起来好像只执行了一次。而且你需要把每次生成的结果保存到不同的位置,还要确保这些数值是静态的——其实直接给单元格赋值就是静态的,不会跟着后续生成的新数变化,不用特意复制粘贴值(当然复制粘贴值也能实现)。

下面给你两种解决方案,选哪个都可以:

方案一:修改原宏,让它支持指定输出位置(更高效)

先把你的BINGO宏改成可以接受目标单元格参数的版本,这样每次调用时就能指定把结果写到不同地方:

Sub BINGO(targetCell As Range)
    Dim linenumber As Integer, numpick As Integer
    Dim bingonum As String
    linenumber = Range("E1").Value
    numpick = Range("B" & linenumber).Value
    Range("B" & linenumber).ClearContents
    
    ' 原来的分类逻辑保持不变
    If numpick > 90 Then
        bingonum = "W " & numpick
    ElseIf numpick > 80 Then
        bingonum = "A " & numpick
    ElseIf numpick > 70 Then
        bingonum = "R " & numpick
    ElseIf numpick > 60 Then
        bingonum = "D " & numpick
    ElseIf numpick > 50 Then
        bingonum = "* " & numpick
    ElseIf numpick > 40 Then
        bingonum = "3 " & numpick
    ElseIf numpick > 30 Then
        bingonum = "5 " & numpick
    ElseIf numpick > 20 Then
        bingonum = "8 " & numpick
    ElseIf numpick > 10 Then
        bingonum = "1 " & numpick
    Else
        bingonum = "HCC " & numpick
    End If
    
    ' 直接把结果写入指定的目标单元格,自动就是静态值
    targetCell.Value = bingonum
End Sub

然后写一个主宏,调用三次BINGO,分别指定不同的输出位置(比如我用J5、J6、J7,你可以改成你需要的单元格):

Sub GenerateThreeBingoNumbers()
    ' 生成第1个随机数,放到J5
    Call BINGO(Range("J5"))
    ' 生成第2个随机数,放到J6
    Call BINGO(Range("J6"))
    ' 生成第3个随机数,放到J7
    Call BINGO(Range("J7"))
End Sub

方案二:保留原宏,通过主宏处理复制粘贴值

如果你不想修改原来的BINGO宏,就在主宏里完成“生成→复制→粘贴值”的循环:

Sub GenerateThreeBingoNumbers()
    ' 生成第1个随机数并保存
    Call BINGO
    Range("G5").Copy
    Range("J5").PasteSpecial Paste:=xlPasteValues ' 只粘贴值,确保静态
    Application.CutCopyMode = False ' 清除复制状态,避免弹窗
    
    ' 生成第2个随机数并保存
    Call BINGO
    Range("G5").Copy
    Range("J6").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    
    ' 生成第3个随机数并保存
    Call BINGO
    Range("G5").Copy
    Range("J7").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub

额外小技巧:用循环生成任意数量的随机数

如果以后你需要生成更多个随机数,不用一次次写重复代码,用循环就行:

Sub GenerateNBingoNumbers(count As Integer, startCell As Range)
    Dim i As Integer
    For i = 1 To count
        Call BINGO
        ' 从起始单元格开始,依次往下写结果
        startCell.Offset(i - 1, 0).Value = Range("G5").Value
    Next i
End Sub

调用的时候只要写Call GenerateNBingoNumbers(3, Range("J5")),就能生成3个随机数从J5开始往下排列啦。

内容的提问来源于stack exchange,提问作者lfc2001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:52:53