数百のワークシートがあるExcelを扱う機会があったのですが、目的のシートを見つけづらいので名前順でワークシートを並び替えようとしました。
しかし、Excelにはワークシートを名前順で並び替える機能はないんですね。
結局VBA(Visual Basic for Applications)で並び替えたので、その手順をメモしておきます。
ちなみに、ワークシートを名前一覧から選択するには、Excel下部の左矢印を右クリックすると「シートの選択」ダイアログがでてそこで行えます。
手順
VBA
Sub excel_sheet_sort() Dim path As String Dim wb As Object Dim ws As Object Dim arr As Object Dim i As Integer ' open excel file path = Application.GetOpenFilename("Excel File,*.xls?") Set wb = Workbooks.Open(path) ' setup sheet name array Set arr = CreateObject("System.Collections.ArrayList") For Each ws In wb.Worksheets arr.Add (ws.Name) Next ' sort sheet name array arr.Sort 'arr.Reverse ' sort sheet For i = 1 To (arr.Count - 1) wb.Worksheets(arr(i)).Move after:=wb.Worksheets(arr(i - 1)) Next i End Sub
実行すると、ファイル選択ダイアログが開くので、ワークシートを並び替えたいExcelファイルを選択します。
すると、そのExcelを開いてワークシートの並び替えを行ってくれます。
降順にする場合は'arr.Reverse
のコメントを外します。
その他感想など
Office365のビジネスアカウントでOffice Scriptが使える場合は、Excelをオンラインにおいて、下記のOffice Scriptを実行しても並び替えができます。
Office Script
function main(workbook: ExcelScript.Workbook) { workbook.getWorksheets() .map(v=>{ return { obj: v, name: v.getName(), }; }) .sort((a, b)=>{ if(a.name < b.name) return -1; if (a.name > b.name) return 1; return 0; }) .forEach((v,i)=>{ v.obj.setPosition(i); }); }