新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Excelのワークシートを名前順で並び替える

数百のワークシートがある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);
  });
}

関連カテゴリー記事

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com