電子書籍の厳選無料作品が豊富!

エクセルのVBAで以下のプログラムを作動させたいです。
AクラスシートのA1からA6まで名前が入っており、その名前を名簿シートのA1,A3,A5,B1,B3,B5にボタンを押すごとにランダムに表示したいです。
ボタンを押すとそれぞれのセルの名前がランダムに入れ替わるようなものとしたいです。

どのようなプログラムにしたらいいでしょうか。よろしくお願いします。

A 回答 (3件)

こんばんは!



https://oshiete.goo.ne.jp/qa/10059650.html

↑のサイトの関連質問になるのですね。

>ボタンを押すとそれぞれのセルの名前がランダムに・・・
応用だけです。

「Aクラス」シートにコマンドボタンを配置しているとします。
コマンドボタンのコードを↓にしてみてください。

Private Sub CommandButton1_Click()
Dim c As Range, myRng As Range
Dim myNum As Long, myFlg(1 To 6) As Boolean
Randomize
With Worksheets("名簿")
Set myRng = .Range("A1,A3,A5,B1,B3,B5")
For Each c In myRng
Do
myNum = Int(6 * Rnd + 1)
Loop Until myFlg(myNum) = False
c = Cells(myNum, "A")
myFlg(myNum) = True
Next c
End With
End Sub

こんな感じで大丈夫だと思います。m(_ _)m
「エクセルのVBAでランダムに表示する。」の回答画像1
    • good
    • 1
この回答へのお礼

早速ご回答頂きありがとうございました。

お礼日時:2017/11/27 10:48

たぶん、ここでは、私のは、理解されないかもしれません。

ランダムの基数が6だけでは、どれも差はでません。

Excelの擬似乱数ジェネレーターは、「一様乱数(ひとつのパレットでできる乱数)」に欠陥があるそうで、その一様乱数は 32768 種しかありません。だから、専門的な乱数には使えないとも言われています。
以下は、Flag を使わず、重複を出さないシステムです。乱数によって、一意の数字を見つける方法ですと、数によっては、アテのない時間を待つ可能性があります。本格的には、アルゴリズムを利用します。今回は、ワークシート関数で間に合わせました。

'//
Sub RandomGenerate1()
 Dim sh1 As Worksheet
 Dim sh2 As Worksheet
 Dim prsns As Range
 Dim nums(1 To 6)
 Dim Ar(1 To 6) As Variant
 Dim i As Long, j As Long, k As Long
 Dim c As Variant
 Dim v As Variant
 Set sh1 = Worksheets("Aクラス")
 Set sh2 = Worksheets("名簿")
 Set prsns = sh1.Range("A1:A6")
 Randomize '一様乱数は、一回の発生につき1回限り
 For i = 1 To 6
  nums(i) = Rnd
 Next
 With Application
  For i = 1 To 6
   v = .Small(nums, i)
   Ar(i) = .Match(v, nums, 0)
  Next
 End With
 k = 1
 For Each c In sh2.Range("A1,A3,A5,B1,B3,B5")
  c.Value = prsns(Ar(k)).Value
  k = k + 1
 Next c
End Sub
    • good
    • 0
この回答へのお礼

詳しい説明をしていただき勉強になりました。ありがとうございました。

お礼日時:2017/11/27 10:48

こんなのはいかがでしょうか?


--------------------------------------------------------------------------------
Sub test()
Dim 行 As Long
Dim 列 As Long
Dim 使用済(5) As Boolean
Dim 数 As Long
Randomize
Sheets("名簿").Select
For 行 = 1 To 5 Step 2
For 列 = 1 To 2
Do
数 = Int(6 * Rnd)
Loop Until 使用済(数) = False
Cells(行, 列).Value = Sheets("Aクラス").Cells(数 + 1, 1).Value
使用済(数) = True
Next
Next
End Sub
--------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

分かりやすいプログラムを教えていただきありがとうございました。

お礼日時:2017/11/27 10:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!