見出し画像

シート名目次を作成して既に目次があるときはその並び順通りにシートを並び変えるよ

この説明は、ChatGPTで作成しています。


このVBAのプロシージャは、Excelのシート名の目次を作成したり、すでにある目次に合わせてシートの並び順を変えたりします。Excelでたくさんシートがあると探すのが大変ですよね。このプログラムを使うと、自動で一覧表(目次)ができて便利です。

やっていること

  1. すでに「目次」という名前のシートがあるかを調べます。

  2. あれば、その目次のリスト(A列)に書かれた順番に他のシートを並び替えます。

    • Excelの左から右の順番が目次と同じになります。

    • そのあと「目次」シート自体を一番左(先頭)に持ってきます。

  3. なければ、新しく「目次」シートを作ります。

    • 他のすべてのシート名をA列にリストアップします。

    • これがシート名の一覧表になります。

ポイント

  • Application.ScreenUpdating = False
     → 処理中に画面がチラつくのを防ぎます。

  • ws.Cells(Rows.Count, 1).End(xlUp).Row
     → A列の最後のデータ行を調べています。

  • Worksheets(CStr(wsName(i, 1))).Move Before:=Sheets(1)
     → 指定されたシートを一番左に移動します。

  • シートが多いExcelファイルでとても役立ちます!


初心者さんへのアドバイス

プログラムの内容は難しそうに見えますが、実は「目次があれば並び替え」「なければ作る」だけのシンプルな仕組みです。
今後、Excelのシート管理を自動化したい時にとても役立ちますよ!


Excel VBA リファレンス | Microsoft Learn
Excelアイコンは、Icons8が作成したものです
この記事のYouTube動画はこちら

Sub シート名目次を作成して既に目次があるときはその並び順通りにシートを並び変えるよ()
    Application.ScreenUpdating = False
    
    'すでに「目次」シートがあったら
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Sheets
        If ws.Name = "目次" Then
            Dim a As Long
            a = ws.Cells(Rows.Count, 1).End(xlUp).Row
            Dim wsName As Variant
            wsName = ws.Range("A1", "A" & a).Value
            '--- ここから追加 ---
            Dim i As Long
            For i = a To 1 Step -1
                Worksheets(CStr(wsName(i, 1))).Move Before:=Sheets(1)
            Next i
            '--- ここまで追加 ---
            '最後の目次シートを一番左側に移動
            ws.Move Before:=Sheets(1)
            Exit Sub
        Else
            Worksheets.Add Before:=Worksheets(1)
            ActiveSheet.Name = "目次"
            Dim i2 As Long
            For i2 = 2 To Worksheets.Count
                Cells(i2 - 1, 1) = Worksheets(i2).Name
            Next i2
            Exit Sub
        End If
    Next ws
    Application.ScreenUpdating = True
End Sub

ハッシュタグ

#excel #できること #vba #目次作成 #シート並び替え #シート管理 #自動化 #初心者向け #vbaマクロ #excel操作 #シート順序変更 #シート一覧 #業務効率化 #オフィス業務 #excelマクロ #業務改善 #プログラミング入門 #excel自動化 #excel便利技 #ワークシート操作


English Translation


Create Sheet Name Index and Reorder Sheets to Match the Index if It Already Exists

This explanation is created with ChatGPT.


This VBA procedure creates an index of sheet names in Excel or rearranges sheets according to an existing index.
If your Excel file has many sheets, this makes finding sheets much easier.

What it does

  1. Checks if there is already a sheet named "目次" ("Index").

  2. If it exists, it reads the list of sheet names in column A and rearranges the sheets to match that order.

    • The sheet order from left to right will follow the index.

    • The "Index" sheet itself is then moved to the far left.

  3. If it does not exist, it creates a new "Index" sheet and lists the names of all other sheets in column A.

Key points

  • Application.ScreenUpdating = False prevents the screen from flickering during the process.

  • ws.Cells(Rows.Count, 1).End(xlUp).Row finds the last data row in column A.

  • Worksheets(CStr(wsName(i, 1))).Move Before:=Sheets(1) moves the sheet to the first position.

This is very useful for managing Excel workbooks with many sheets!


Advice for beginners

Though the code may seem complex, it simply "reorders sheets if the index exists, or creates an index if it doesn't."
It's very helpful for automating sheet management.


Excel VBA Reference | Microsoft Learn
Excel icon by Icons8
YouTube video for this article


Hashtags

#excel #できること #vba #目次作成 #シート並び替え #シート管理 #自動化 #初心者向け #vbaマクロ #excel操作 #シート順序変更 #シート一覧 #業務効率化 #オフィス業務 #excelマクロ #業務改善 #プログラミング入門 #excel自動化 #excel便利技 #ワークシート操作

いいなと思ったら応援しよう!