トップ > 汎用コード > 選択セル範囲の値をランダムに並べ替える

選択セル範囲の値をランダムに並べ替える2010.06.10

Excelの並べ替えの機能はとても充実しており、データの並べ替えは大概この機能で十分です。しかし、データをランダムに並べ替える機能はありません。
ワークシート関数「=RAND()」で乱数を発生させ、それを利用しランダムに並べ替える事は出来ますが、ここでは、選択している範囲を手軽に、ランダムに並べ替えるコードを紹介します。


【お薦め】マクロ・プロシージャを管理する無料のツール!
 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


ページトップへ戻る

Excel 汎用コード

Copyright(C) 2009- 坂江 保 All Rights Reserved.