Rnd()

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

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


サンプルコード

・セル範囲を選択していない場合は、マクロは動作しません。
・選択しているセルが単一の場合、マクロは動作しません。

Sub Rand_3() '選択しているセル範囲の値をランダムに並べ替える

    Dim lngI As Long, lngII As Long
    Dim lngRnd As Long, lngRowsC As Long, lngColsC As Long
    Dim lngCount As Long, lngValue() As Long
    Dim bolFlg() As Boolean
    Dim varResult() As Variant, varSelection() As Variant

    With Application
        If TypeName(.Selection) <> "Range" Then Exit Sub
        .ScreenUpdating = False
        With .Selection
            If 1 < .Areas.Count Or .Cells.Count = 1 Then Exit Sub
            Randomize
            varResult = .Value
            varSelection = .Value
            lngRowsC = .Rows.Count
            lngColsC = .Columns.Count
            ReDim bolFlg(1 To lngRowsC)
            ReDim varData(1 To lngRowsC)
            ReDim lngValue(1 To lngRowsC)
            lngCount = 1
            Do
                lngRnd = Int(lngRowsC * Rnd()) + 1
                If bolFlg(lngRnd) = False Then
                    bolFlg(lngRnd) = True
                    lngValue(lngCount) = lngRnd
                    lngCount = lngCount + 1
                    If lngRowsC < lngCount Then Exit Do
                End If
            Loop
            For lngI = 1 To lngRowsC
                For lngII = 1 To lngColsC
                    varResult(lngI, lngII) = varSelection(lngValue(lngI), lngII)
                Next
            Next
            .Value = varResult
        End With
        .ScreenUpdating = True
    End With
End Sub

Excel Tips for Teachers

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