■解答例
・乱数とソートを使ってみる
A列に乱数、B列に参加者の番号を記入し、A列をキーにソートをかけるとB列がシャッフルされて当選者数分の番号を返せばよいですね。
↑A列に乱数、B列に参加者の番号を記入
↑A列をキーにA列、B列をソート
では、コードです。
モジュール名:SubModule
3行目:引数 n…参加者全員の数を指定、m…選ばれる人数を指定
4行目:乱数のシードを変更する。Randomize(Number) Numberは省略可。省略時、時刻からシード値を取得。
6行目:変数 r・・・行数を格納する用の変数を宣言
8行目:A列に乱数を記載する
9行目:B列に参加者の番号を記載
10行目:繰り返し
12行目:A列をキーにA列、B列をソート
14行目:変数 result・・・当選者の番号を格納する。
15行目:result配列の要素を確定する
18行目:B列の値を当選者としてresult変数に格納する
19行目:繰り返し
21行目:返り値としてresult配列を返す
実際にこんな感じで使う
モジュール名:MainModule
実行結果
・乱数とソートを使ってみる
A列に乱数、B列に参加者の番号を記入し、A列をキーにソートをかけるとB列がシャッフルされて当選者数分の番号を返せばよいですね。
↑A列に乱数、B列に参加者の番号を記入
↑A列をキーにA列、B列をソート
では、コードです。
モジュール名:SubModule
- Option Explicit
- Function lot(n As Integer, m As Integer) As Variant
- Randomize
- Dim r As Integer
- For r = 1 To n
- Cells(r, 1) = Rnd()
- Cells(r, 2) = r
- Next
- Range(Cells(1, 1), Cells(r, 2)).Sort key1:=Range("A1")
- Dim result As Variant
- ReDim result(m - 1)
- For r = 1 To m
- result(r - 1) = Cells(r, 2)
- Next
- lot = result
- End Function
4行目:乱数のシードを変更する。Randomize(Number) Numberは省略可。省略時、時刻からシード値を取得。
6行目:変数 r・・・行数を格納する用の変数を宣言
8行目:A列に乱数を記載する
9行目:B列に参加者の番号を記載
10行目:繰り返し
12行目:A列をキーにA列、B列をソート
14行目:変数 result・・・当選者の番号を格納する。
15行目:result配列の要素を確定する
18行目:B列の値を当選者としてresult変数に格納する
19行目:繰り返し
21行目:返り値としてresult配列を返す
実際にこんな感じで使う
モジュール名:MainModule
- Option Explicit
- Sub main()
- Dim result As Variant
- result = lot(10, 3)
- Dim i As Integer
- For i = 0 To UBound(result)
- Debug.Print result(i)
- Next
- Debug.Print "-------------"
- End Sub
実行結果
- 8
- 4
- 2
- ------------
- 1
- 3
- 2
- ------------
- 7
- 5
- 6
- ------------
- 5
- 8
- 9
- ------------
0 件のコメント:
コメントを投稿