指定ブックのシートの並びを名前順に並び替える
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するなどしてください。




コメント