Excel VBA ワークシートを昇順に並べ替える

スポンサーリンク

ワークシートを昇順に並べ替える方法

「Excel」では、ワークシートを挿入する機能はありますが、すでに存在しているワークシート名をセルの値のように、昇順や降順で並べ替える機能はありません。

例えば、シート名を日付にしていたり番号を振ってあったりしても作業している間に順番がおかしくなってしまうことがあると思います。通常はシート左から昇順で並ぶことが多いと思いますので、左からシート名で昇順にシートを並べ替えるコードをご紹介します。

追加したワークシートにシート名を書き出してセル上でシート名を昇順に並べ替えて、Sheete【シーツ】プロパティの引数でそのシートのシート名を順に参照し、WorkSheet【ワークシート】オブジェクトのMove【ムーブ】メソッドを使用してシートを昇順に移動させます。

シート名を昇順に並べ替えるコードと解説

Sub シート並べ替え()
Application.ScreenUpdating = False
Dim i As Long
With Sheets.Add
For i = 1 To Sheets.Count
.Cells(i, 1) = Sheets(i).Name
Next i
.Range("A1").CurrentRegion.Sort key1:=.Columns(1), order1:=xlAscending, Header:=xlNo
Sheets(.Cells(1, 1).Value).Move Before:=Sheets(1)
For i = 2 To Sheets.Count
Sheets(.Cells(i, 1).Value).Move After:=Sheets(i - 1)
Next i
Application.DisplayAlerts = False
.Delete
Application.DisplayAlerts = True
End With
Application.ScreenUpdating = True
End Sub
2行目【Application.ScreenUpdating = False】
Application【アプリケーション】オブジェクトのScreenUpdating【スクリーンアップディーティング】プロパティに Falseを設定して処理の高速化の為に画面更新を抑止します。


3行目【Dim i As Long】
繰り返し処理で使用されるセルの行数とシートのインデックス番号を兼ねる値を格納するカウンター変数「i」を長整数型(Long)で宣言します。


4行目【With Sheets.Add】
Sheets【シーツ】コレクションのAdd【アド】メソッドを使用してワークシートを追加して、追加したシートをWith【ウィズ】ステートメントで指定します。


5行目【For i = 1 To Sheets.Count】
For Next【フォーネクスト】ステートメントを使用して繰り返し処理の始まりです。、1から、Sheets【シーツ】コレクションのCount【カウント】プロパティで取得したシートの枚数分の値をカウンター変数「i」に順次格納して繰り返し処理の繰り返し条件とします。


6行目【.Cells(i, 1) = Sheets(i).Name】
With【ウィズ】ステートメントで指定した新規のシートのCells【セルズ】プロパティで1列目で変数「i」行目のセルを参照してSheets【シーツ】プロパティでインデックス番号変数「i」のシートを参照してWorksheet【ワークシート】オブジェクトのName【ネーム】プロパティで、このシート名を取得し、代入演算子「=」でCells【セルズ】プロパティで参照したセルに代入します。
つまり、シート名を左から取得して、追加した新しいシートのA列に順にシート名を代入します。


8行目【.Range(“A1”).CurrentRegion.Sort key1:=.Columns(1),order1:=xlAscending, Header:=xlNo】
With【ウィズ】ステートメントで指定した追加したシート、つまりA列に存在するシートのシート名が代入されているシートのA1セルからCurrentRegion【カレントリージョン】プロパティでデータが入力されている範囲を参照し、Range【レンジ】オブジェクトのSort【ソート】メソッドを使用してシート名を昇順で並べ替えします。


9行目【Sheets(.Cells(1, 1).Value).Move Before:=Sheets(1)】
Sheets【シーツ】プロパティの参照するシートを表す引数にWith【ウィズ】ステートメントで指定した追加したA列にシート名が昇順で代入されているシートのCells【セルズ】プロパティで参照したA1セルの値のシート名のシートを参照し、Worksheet【ワークシート】オブジェクトのMove【ムーブ】メソッドを使用して、そのシートを1番左側に移動します。


10行目【For i = 2 To Sheets.Count】
2回目の繰り返し処理の始まりです。iカウンタ―変数に2から順にシート枚数分の数を代入します。このカウンタ―変数「i」には、シート名が昇順で書き出されているセルの行番号が代入されます。2から始まるわけは1行目のシート名は9行目の処理で一番左側に移動が済んでいるからです。


11行目【Sheets(.Cells(i, 1).Value).Move After:=Sheets(i – 1)】
繰り返し処理の中でシート名が書き出されたシートの2行目の名前を参照して、順にMove【ムーブ】メソッドでシートを移動します。移動先はAfter:=Sheets(i – 1)つまり、最初の2行目のセル名を参照したシートの場合は(2-1)でインデックス番号(1)のシートのAfterで後(右側)に移動させます。これで、シート名の昇順にシートの並べ替えができます。


13行目【Application.DisplayAlerts = False】
Application【アプリケーション】オブジェクトのDisplayAlerts【ディスプレイアラーツ】プロパティにFalseを設定して、次の14行目の処理でシートを削除するときに発生するアラートの表示を抑止します。


14行目【.Delete】
Withステートメントで指定した追加してシート名を代入したシートをWorksheet【ワークシート】オブジェクトのDelete【デリイト】メソッドを使用して削除します。

以上で、ワークシートを昇順に並べ替える方法の解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告