並び替え機能と乱数を利用して、セルの内容をシャッフルする方法のご紹介です。
成果物
この状態から、
セルの並び順をシャッフルさせます。
ランダムに並び替え
使うのは乱数を作るRand関数と、
セルを並び替える並べ替えとフィルタ機能です。
並べ替えたい列のひとつ右の列に=Rand()と入力してEnterを押し、
オートフィルで関数を下にコピーすると、このようにそれぞれランダムな0~1の値が返ります。
このランダムな値を並べ替えしたいので、選択範囲はそのままでホームタブ→並べ替えとフィルター→昇順をクリックします。
今選択されているのはB列ですが、隣接するA列も一緒に並べ替えしたいので、「選択範囲を拡張する」にチェックを付けたまま並べ替えを押します。
乱数および隣接するA列が並べ替えされました。
Rand関数で作った乱数は何か処理を行うたびに再計算が入り、ちがう数値に変わります。
数値が昇順の並びになっていませんが、並べ替える前とちがう数値になっているためなので気にしないでOKです。
Rand関数で作った乱数は何か処理を行うたびに再計算が入り、ちがう数値に変わります。
数値が昇順の並びになっていませんが、並べ替える前とちがう数値になっているためなので気にしないでOKです。
Deleteを押し、Rand関数を削除したら完成です。
VBA(マクロ)でシャッフル
' vba
Sub シャッフル()
'A、B列にシャッフルに関係ないデータがない状態で実行すること
'A列の文字列の数を取得
Dim A列の数 As Integer
A列の数 = WorksheetFunction.CountIf(Range("A:A"), "<>")
'B列の1~「A列の数」行にRand関数を入力
For i = 1 To A列の数
Cells(i, 2).Value = "=rand()"
Next
'B列を優先してソート
Range("A:B").Sort Range("B1")
'B列を削除
Range("B1:B" & A列の数).Delete
End Sub
上の手順をVBA化するとこんな感じになります。A列の文字の数は自動で取得されます。
余計なデータがあると意図しない動きをする(最悪元に戻せない形でデータを削除する)ので、必ずA列、B列にシャッフル対象以外何もない状態で実行してください。
余計なデータがあると意図しない動きをする(最悪元に戻せない形でデータを削除する)ので、必ずA列、B列にシャッフル対象以外何もない状態で実行してください。
Excel(エクセル):ランダム、乱数
Excelの乱数、ランダム関連操作、関数等まとめです。
乱数の作成
関数で乱数を求める場合、Rand関数(0~1の乱数)またはRandBetween関数(指定範囲の整数)を用います。
もしビンゴで使うような重複...
コメント