選択セル範囲の値をランダムに並べ替える2010.06.10
Excelの並べ替えの機能はとても充実しており、データの並べ替えは大概この機能で十分です。しかし、データをランダムに並べ替える機能はありません。
ワークシート関数「=RAND()」で乱数を発生させ、それを利用しランダムに並べ替える事は出来ますが、ここでは、選択している範囲を手軽に、ランダムに並べ替えるコードを紹介します。
【お薦め】マクロ・プロシージャを管理する無料のツール!
Excelマクロ管理ツール
Excelマクロ管理ツール
サンプルコード2010.06.10
コードの貼り付け場所 VBAコードをカラーで印刷・Web掲載するためのツールはこちら
・セル範囲を選択していないと、マクロは動作しません。
・選択しているセルが単一の場合、マクロは動作しません。
Sub Rand_3() If TypeName(Selection) <> "Range" Then Exit Sub '連想配列の作成 Dim myDic As Object Set myDic = CreateObject("Scripting.Dictionary") Dim varRes As Variant Dim varSel As Variant Dim varKey As Variant Dim lngRnd As Long Dim c As Long Dim i As Long Dim j As Long With Selection If 1 < .Areas.Count Or .Cells.Count = 1 Then Exit Sub varRes = .Value: varSel = .Value '選択セル範囲の値を2つの変数にそれぞれ代入 Randomize Do lngRnd = Int(.Rows.Count * Rnd()) + 1 '1~行数の間のランダム値取得 If Not myDic.Exists(lngRnd) Then 'ランダム値が初出なら処理を行う c = c + 1 myDic.Add lngRnd, c 'Keyにランダム値を追加 End If Loop Until c = .Rows.Count varKey = myDic.Keys For i = 1 To .Rows.Count For j = 1 To .Columns.Count varRes(i, j) = varSel(varKey(i - 1), j) 'Keyのランダム値を基に変数内で並べ替え Next Next .Value = varRes '変数の値を選択セル範囲に代入 End With End Sub