Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:シートの並べ替え
#VBA100本ノック 15本目
「2020年04月」から「2021年03月」のシートがあります。
しかし、シートの順番が狂ってしまっています。
「2020年04月」から昇順に並べ替えてください。
・上記以外のシートは存在しません。
・シート名は「yyyy年mm月」これで統一されています。

◇ 出題ページはこちら
ソースコード
メインモジュール
Option Explicit ' 100本ノック015:シートの並べ替え Sub アクティブブックのシートを並び替える() Dim wb対象ブック As Workbook Set wb対象ブック = ActiveWorkbook ' 新規シートにシートリストを書き出し Dim wsシートリスト As Worksheet Set wsシートリスト = Workbooks.Add.Worksheets(1) wsシートリスト.Columns(1).NumberFormatLocal = "@" Dim シート番号 As Long For シート番号 = 1 To wb対象ブック.Worksheets.Count wsシートリスト.Cells(シート番号, 1) _ = wb対象ブック.Worksheets(シート番号).Name Next ' シート上でソート wsシートリスト.UsedRange.Sort wsシートリスト.Cells(1, 1) ' ソート順にシートを並び替え For シート番号 = 1 To wb対象ブック.Worksheets.Count wb対象ブック.Worksheets(wsシートリスト.Cells(シート番号, 1).Value).Move _ before:=wb対象ブック.Worksheets(シート番号) Next wsシートリスト.Parent.Close False End Sub
解説
シートの並び替えを行う問題でした。
シート.Moveでソートアルゴリズムを作る方法もありますが、
本解答ではシート名を作業シートに書き出してソートしています。
ワークシートのソートは優秀なので、
配列やシートなどの並び替えは基本ワークシートを使っておけばOKです。
この手の作業シートは、
' wsシートリスト.Parent.Close False
このようにコメントアウトすることでログとしても機能します。
この手法も便利なので合わせて覚えておいてください。