使用 VBA 计算“i”行中的唯一随机数

使用 VBA 计算“i”行中的唯一随机数

我目前正在从事我的一个业余项目。我目前正在为我担任 DM 的游戏组制作一个战斗计算器。本质上,我有一张包含怪物及其统计数据的表格,以及一个包含我想要包含的怪物数量的单元格。当我按下命令按钮时,我希望表格中填充“i”个怪物,并为每个怪物掷出主动权、攻击力和伤害。

这是我目前所拥有的

    Sub Fill()
    'Monster
        Dim i As Integer
        i = Range("W2").Value

        With Range("L2")
            .Value = ComboBox1.Value
            .AutoFill .Resize(i + 0, 1), xlFillCopy
        End With

    With Sheets("Sheet1")
    Dim Roll(1 To 8) As Variant
    Roll(1) = Int((10 - 1 + 1) * Rnd + 1) + Range("E2").Value 'Initiative
    Roll(2) = Int((20 - 1 + 1) * Rnd + 1) - Range("F2").Value 'Attack
    Roll(3) = Int(((Range("G2").Value) - 1 + 1) * Rnd + 1) + Range("H2").Value 'Damage

    Roll(7) = Range("B2").Value
    Roll(4) = Range("D2").Value
    Roll(5) = Range("I2").Value
    Roll(6) = Range("J2").Value
    Roll(8) = Range("C2").Value


    LRow = Sheet1.Cells(Rows.Count, 12).End(xlUp).Row
    .Range("M2:M" & LRow).Formula = Roll(1)
    .Range("N2:N" & LRow).Formula = Roll(2)
    .Range("O2:O" & LRow).Formula = Roll(3)
    .Range("P2:P" & LRow).Formula = Roll(4)
    .Range("Q2:Q" & LRow).Formula = Roll(5)
    .Range("R2:R" & LRow).Formula = Roll(6)
    .Range("S2:S" & LRow).Formula = Roll(7)
    .Range("T2:T" & LRow).Formula = Roll(8)
    End With


    End Sub

我无法找到计算每个后续怪物掷骰结果的正确命令。我最终掷出了第 2 行(怪物 1)上的所有数字,然后怪物 2-10 只是被复制,而不是掷出。

答案1

您将需要为每个怪物(行)重新滚动,如下所示:

Sub Fill()

 Dim Roll(1 To 8) As Variant
    Dim i As Integer
    i = Range("A3").End(xlDown).Row

    For j = 3 To i
    Roll(1) = Int((10 - 1 + 1) * Rnd + 1) + Range("E2").Value 'Initiative
    Roll(2) = Int((20 - 1 + 1) * Rnd + 1) - Range("F2").Value 'Attack
    Roll(3) = Int(((Range("G2").Value) - 1 + 1) * Rnd + 1) + Range("H2").Value 'Damage

    Roll(7) = Range("B2").Value
    Roll(4) = Range("D2").Value
    Roll(5) = Range("I2").Value
    Roll(6) = Range("J2").Value
    Roll(8) = Range("C2").Value
        Cells(j, 2) = Roll(1)
        Cells(j, 3) = Roll(2)
        Cells(j, 4) = Roll(3)
        Cells(j, 5) = Roll(4)
        Cells(j, 6) = Roll(5)
        Cells(j, 7) = Roll(6)
        Cells(j, 8) = Roll(7)
    Next
End Sub

因此,对于每一行,它会填充数组,然后按照您的定义将其分配给每一列。

相关内容