順番をランダムに入れ替える
Excel でやりたいことの前段として、以下が必要になった。
- ある範囲の順番を、ランダムに入れ替える。
そこでまずは、「順番だけ」をランダムに入れ替える。
取り敢えず今回は、辞書(連想配列)を用いてこれを行った。
<おさらい>
連想配列はKeyとItemから成っていて、Keyの重複を許さない。
Function ShuffledOrderDict() As Dictionary Dim iMax As Long iMax = Selection.Count Dim Dict As Dictionary Set Dict = New Dictionary Dim i As Long For i = 1 To iMax Do Dim TempNumber As Long TempNumber = Rnd * (iMax + 1) If TempNumber >= 1 And TempNumber <= iMax And _ Dict.Exists(TempNumber) = False Then Dict(TempNumber) = i Exit Do End If Loop Next Dim Dict2 As Dictionary Set Dict2 = New Dictionary Dim myKey As Variant For Each myKey In Dict.Keys Dict2(Dict(myKey)) = myKey Next Set ShuffledOrderDict = Dict2 End Function
重複NGがKeyであるため、並び替え後の順序を一旦keyとしている。その後に、keysとitemを入れ替えることで、
- 辞書(元の順序)=ランダムに並び替えた後の順序
を作成した。
確認した結果がこちら。
今は未だ「iMax」の部分が選択範囲に対しての処理だが、ここを引数にすれば、何とかなりそうだ。
次回に続きます。
参考まで。