0
我試圖在Excel工作表中實現隨機數生成。該過程是這樣的:VBA:爲範圍的唯一值生成數字並將它們返回到範圍(模擬骰子卷)
- 有七個單元,每個單元含有在標準符號(XDY + Z,其中X是對卷的Y面骰子的數目被軋製,以Z骰子的數量和類型作爲獎金/罰分)
- 的號碼被通過輥類型
- 的數字是爲每個組(I有這一步工作,所以這是沒有問題的)中產生總結了成唯一的組。
- 一個附加輥對每個組
- 的最低數目被丟棄
- 的號碼被分配到輸出範圍中,爲了製成,所以它們匹配他們的骰子的行。
我知道我可以使用集合從我的輸入中提取唯一值。我也有一個解釋骰子類型並進行翻滾的功能。儘管我能夠計算出獨特的價值,但我很難過,多次滾動+1,最低點,然後將它們返回到正確的行。特別是因爲我不想對結果進行排序。
我將不勝感激任何幫助或任何你可以指向我的方向。
實施例:
Input:
1d6
1d6
1d8
1d10
1d4
1d6
1d4
Divide into buckets: 3 x 1d6; 1 x 1d8; 1 x 1d10; 2 x 1d4
Roll dice, with an extra roll for each bucket:
4 x 1d6 - 4, 4, 5, 2
2 x 1d8 - 8, 7
2 x 1d10 - 1, 3
3 x 1d4 - 1, 1, 4
Drop lowest value, leaving the following numbers:
1d6: 4, 4, 5
1d8: 8
1d10: 3
1d4: 1, 4
Assign them in order:
1d6 - 4
1d6 - 4
1d8 - 8
1d10 - 3
1d4 - 1
1d6 - 5
1d4 - 4
這是原來的功能,這僅僅下降列表,生成正確的輸出單元中的輥(通過執行所述輥上的RollDice
功能),並將其放置:
Sub GenerateOld()
For i = 1 To 7
Range("Dice_Output").Cells(i).Value = _
RollDice(Range("Dice_Input").Cells(i).Value)
Next i
End Sub
這是我這段代碼的新版本的嘗試。註釋掉是部分我想不通:如果
Sub GenerateNew()
Dim diceDictionary
Set diceDictionary = CreateObject("Scripting.Dictionary")
For Each Cell In Range("Char_Characteristics_Dice").Cells
If diceDictionary.Exists(Cell.Value) Then
diceDictionary(Cell.Value) = diceDictionary(Cell.Value) + 1
Else
diceDictionary.Add Cell.Value, 1
End If
Next Cell
For Each diceType In diceDictionary
' RollDice(diceType)
' Roll X drop lowest
Next cont
' Place back into Dice_Output range in order
End Sub
你到目前爲止嘗試過哪些代碼? – braX
我已經編寫了代碼,用單元格的值作爲Key來輸出具有唯一類型的骰子的集合。我仍然需要弄清楚如何計算有多少。 – FatMan
幫助這裏的人幫助你調整現有的代碼,而不是完全爲你寫。請嘗試並將其發佈在您的問題中。 – braX