Excel(エクセル)でセルをランダムに並び替え(シャッフル)する方法

bingo IT

並び替え機能と乱数を利用して、セルの内容をシャッフルする方法のご紹介です。

スポンサーリンク

成果物

randomsort1
この状態から、
randomsort8
セルの並び順をシャッフルさせます。

ランダムに並び替え

randomsort2
並べ替えたい列のひとつ右の列に=Rand()と入力してEnterを押し、
randomsort3
オートフィルで関数を下にコピーすると、このようにそれぞれランダムな0~1の値が返ります。
randomsort4
このランダムな値を並べ替えしたいので、選択範囲はそのままでホームタブ並べ替えとフィルター昇順をクリックします。
randomsort5
今選択されているのはB列ですが、隣接するA列も一緒に並べ替えしたいので、「選択範囲を拡張する」にチェックを付けたまま並べ替えを押します。
randomsort6
乱数および隣接するA列が並べ替えされました。
Rand関数で作った乱数は何か処理を行うたびに再計算が入り、ちがう数値に変わります。
数値が昇順の並びになっていませんが、並べ替える前とちがう数値になっているためなので気にしないでOKです。
randomsort7
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 シャッフル
上の手順をVBA化するとこんな感じになります。A列の文字の数は自動で取得されます。
余計なデータがあると意図しない動きをする(最悪元に戻せない形でデータを削除する)ので、必ずA列、B列にシャッフル対象以外何もない状態で実行してください。
Excel(エクセル):ランダム、乱数
Excelの乱数、ランダム関連操作、関数等まとめです。 乱数の作成 関数で乱数を求める場合、Rand関数(0~1の乱数)またはRandBetween関数(指定範囲の整数)を用います。 もしビンゴで使うような重複...

コメント