『乱数表について』(やしき)
6列6行の乱用いた用いた座席表があります。各セルにはrandbetween(1,36)の関数を入れてあります。これをマクロ登録してボタンをクリックすることで席替えが出来るようにしてあります。ところでこの表には別の処理をするため、他にもマクロのボタンや関数処理するための入力セルを設けてあります。そのたえ、席替え以外ボタンをボタンをクリックしたり、関数処理のために数を入れてエンターキーを押すとやはり乱数が発生してしまいます。席替えボタンを押したときのみ乱数が発生するようにするにはどうしたら良いのでしょうか。
< 使用 Excel:Excel2010、使用 OS:Windows8 >
randbetween(1,36)では、重複や欠落がでるがそれでいいのだろうか。 座席がない人や、座席が複数ある人がでたりするのだが。
まあ、それはスルーするとして、 VBAで式を設定したあと、値に変換しておけばいいでしょう。
Sub Test3() With Range("A1:F6") .Value = "=randbetween(1,36)" .Value = .Value End With End Sub (hatena) 2024/05/06(月) 08:27:02
ボタンクリックしたときのみ変更という仕様ならVBAしか無理でしょう。
重複、欠落付加なら乱数ではなくランダムな並べ替え(シャッフル)になりますね。
バージョンが365なら関数でシャッフルは可能ですが、2010ですので無理ですね。 配列をシャッフルする関数を作成してそれを利用することになります。
Sub Test4() Dim ary(1 To 36) As Long Dim i As Long, j As Long For i = 1 To 36 ary(i) = i Next AryShuffle ary With Range("A1:F6") For i = 1 To 36 .Cells(i) = ary(i) Next End With End Sub
'配列をランダムに並べ替える Sub AryShuffle(ByRef MyAry) Dim i As Integer, buf, UB As Long, LB As Long, P As Long If Not IsArray(MyAry) Then Exit Sub Randomize UB = UBound(MyAry) LB = LBound(MyAry) For i = UB To LB + 1 Step -1 P = Int((i + 1) * Rnd) + LB buf = MyAry(P) MyAry(P) = MyAry(i) MyAry(i) = buf Next End Sub
(hatena) 2024/05/06(月) 12:30:18
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.