指定ブックのシートの並びを名前順に並び替える
VBA開発案件にて、運用ブックは本来名前順(日付順)で並んでいる想定が、
ユーザーが触ってしまったなどで並びがおかしい場合があります。
ユーザーにその部分の運用を任すのは無駄なルールになるので、
マクロ側で並び替えをしてしまいます。パーツ化してますので、他に流用が可能です。
指定ブックのシートの並びを名前順に並び替えるコード
'■指定ブックのシートの並びを名前順に並び替える Public Function Call_SortWorkSheets(wb As Workbook) Dim i As Long, j As Long Dim swap As Worksheet Dim cnt As Long: cnt = wb.Worksheets.Count Dim ws() As Worksheet '■ワークシート配列を定義し、wb内のシートをいれる ReDim ws(1 To cnt) For i = 1 To cnt Set ws(i) = wb.Worksheets(i) Next i '■ワークシートを名前順に移動 For i = 1 To cnt - 1 For j = i + 1 To cnt If ws(i).Name > ws(j).Name Then Set swap = ws(i) Set ws(i) = ws(j) Set ws(j) = swap End If Next Next '■並べ替え For i = 1 To cnt ws(i).Move After:=wb.Sheets(wb.Sheets.Count) Next End Function
使い方
実際の使い方は以下です。
Public Sub sample() Call Call_SortWorkSheets(ActiveWorkbook) '前面表示されているブックの場合 ' Call Call_SortWorkSheets(ThisWorkbook) 'マクロ実行ブックの場合 ' Call Call_SortWorkSheets(wb) '変数wbの場合※Workbook変数にSet必要 End Sub
注意点
- すべてのシートが対象となるので、並び替え対象外シートがある場合は、
IF文などでcontinueするなどしてください。
コメント