ExcelVBA 応用編 Do〜Loop を使う

「ExcelVBA入門」を応用したサンプルプロシージャです。
このサンプルプロシージャは、私の環境で作成したものです。このままでは実行できない場合があります。(ブックやシートが無いと動きません) そのようなときには、自分の環境に合わせて作成しなおしてください。

★ランダム整数を求める


Sub ランダムに並べ替える()

    Dim myNameNO As Integer    'データ番号を格納する変数
    Dim myOrderNO As Integer   '席次番号を格納する変数
    Dim myRow As Long          '配列表の行位置を格納する変数
    Dim myCol As Integer       '配列表の列位置を格納する変数

    With Worksheets("リスト")    'リストシートを対象とする
     .Range("C2:C17").Value = 0  'セルの初期化
    myOrderNO = 1                '変数の初期化
    Randomize                    '乱数系列の初期化
   
    Do 'ループ開始
   
         myNameNO = Int(16 * Rnd + 1) '1〜16までの整数乱数を発生させる
     
     '整数の乱数の求め方
     'Int((最大値 - 最小値 + 1) * Rnd + 最小値)
     
    
        If .Cells(myNameNO + 1, 3).Value = 0 Then 'C列の該当セルの値が0ならば
           .Cells(myNameNO + 1, 3).Value = myOrderNO '席次番号を代入する
                
            myRow = (myOrderNO - 1) \ 4 + 5   '配列表の行位置を決める
            myCol = (myOrderNO - 1) Mod 4 + 1 '配列表の列位置を決める
            '行位置:席番号から1を引き、その結果を4で割った余りに1を加算
            '※このサンプルの場合は4行分のズレを加算している。
            '列位置:席番号から1を引き、その結果を4で割った余りに1を加算
        
             '配列表にリストのデータを表示
            Worksheets("配列表").Cells(myRow, myCol).Value = _
           .Cells(myNameNO + 1, 2).Value
        
            myOrderNO = myOrderNO + 1 '席順をカウント
      End If
   
     Loop Until myOrderNO > 16 '全データの席が決まるまで繰り返す
   

    End With

End Sub