Usando o VBA para calcular números aleatórios únicos em "i" número de linhas

0

Atualmente, estou trabalhando em um projeto de estimação meu. Atualmente estou fazendo uma calculadora de combate para um grupo de jogos I DM. Essencialmente, eu tenho uma tabela com os monstros e suas estatísticas, e uma célula com o número de monstros que eu quero incluir. Quando eu pressiono o botão de comando, eu quero que a tabela seja preenchida com o número "i" de monstros e role a iniciativa, ataque e dano para cada um.

Isto é o que eu tenho até agora

    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

Estou tendo problemas para descobrir o comando adequado para calcular as jogadas de cada monstro subseqüente. Eu acabo rolando tudo na linha 2 (monstro 1), e depois os monstros 2-10 são copiados, não rolados.

    
por maelstrom 08.09.2014 / 21:38

1 resposta

0

Você vai querer re-rolar para cada monstro (linha) assim:

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

Então, para cada linha, ela preenche a matriz e a atribui a cada coluna, conforme você define.

    
por 09.09.2014 / 15:01