1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ブックのシート名を取得して一覧表を作成するエクセルVBA

Last updated at Posted at 2019-05-26

ブックにあるシート名を取得して一覧表を作成するエクセルVBAをご紹介します。

次のサンプルコードを使うと、

  • 「ファイルを開く」ダイアログを表示。
  • シート名を取得したいエクセルブックを選択。
  • 選択したエクセルブックに、「シート名一覧」シートを追加。
  • エクセルブックに含まれる全シート名を取得、「シート名一覧」にシート名の一覧表を作成する。
という作業を自動化します。

操作方法

1、 下記サンプルコードを含むエクセルファイルを開き→「開発」→「マクロ」の順でクリック。 「Aシート名取得」→「実行」の順でクリック。

2、
ファイルを開くダイアログが表示されるので、シート名を取得したい対象のエクセルブックをクリックして、「開く」をクリック。

3、
マクロが実行されます。
「シート名一覧」を追加、全シート名を取得して、
「シート名一覧」にシート名の一覧表を作成します。

完了です。

サンプルコード

Sub Aファイルを開く()
    Dim OpenFileName As String
OpenFileName = Application.GetOpenFilename("Excelファイル,*.xls*")

If OpenFileName = "False" Then
    
    MsgBox "キャンセルされました。処理を終了します。"
    
    End
    
Else
    Workbooks.Open OpenFileName

End If

End Sub
Sub Aシート名取得()
Dim sh As Variant, flag As Boolean
Dim ws As Worksheet
Dim i As Long
i = 0
Call Aファイルを開く


'画面更新停止
Application.ScreenUpdating = False

'確認ダイアログ停止
Application.DisplayAlerts = False

For Each sh In Sheets
    If sh.Name = "シート名一覧" Then
        flag = True
        Exit For
    End If
Next sh

If flag = True Then

    Dim rc As Integer
    
    'メッセージ表示
    rc = MsgBox("シート「シート名一覧」を上書きしますか?" & Chr(13) & "※この処理は戻せません", vbYesNo + vbQuestion, "確認")
    
    If rc = vbYes Then
        '画面更新停止
        Application.ScreenUpdating = False
        
        'シート選択
        Worksheets("シート名一覧").Activate
    
        'シート削除
        ActiveSheet.Delete

        '画面更新停止
        Application.ScreenUpdating = True
        
        'メッセージ表示
        MsgBox "処理前のシート「シート名一覧」は削除済みです"
        
        'シート追加
        Worksheets.Add before:=Worksheets(1)
        
        'シート名変更
        ActiveSheet.Name = "シート名一覧"

        'シート選択
        Worksheets("シート名一覧").Activate

        Worksheets("シート名一覧").Activate
        Worksheets("シート名一覧").Range("A1").Value = "シート名(現在)"
        Worksheets("シート名一覧").Range("B1").Value = "シート名(変更後)"
        
        For Each ws In Worksheets
            Cells(Selection.row + i, Selection.Column).NumberFormatLocal = "@"
            Cells(Selection.row + i, Selection.Column) = ws.Name
            i = i + 1
        Next
        
        ActiveSheet.Name = "シート名一覧"
        Columns("A:B").Select
        Columns("A:B").EntireColumn.AutoFit
        Selection.NumberFormatLocal = "@"
        
    Else
        
        'メッセージ表示
        MsgBox "キャンセルされました。処理を終了します。"
    
    End If
    
Else

    'シート追加
    Worksheets.Add before:=Worksheets(1)
    
    'シート名変更
    ActiveSheet.Name = "シート名一覧"

    'シート選択
    Worksheets("シート名一覧").Activate

    Worksheets("シート名一覧").Activate
    Worksheets("シート名一覧").Range("A1").Value = "シート名(現在)"
    Worksheets("シート名一覧").Range("B1").Value = "シート名(変更後)"
    
    For Each ws In Worksheets
        Cells(Selection.row + i, Selection.Column).NumberFormatLocal = "@"
        Cells(Selection.row + i, Selection.Column) = ws.Name
        i = i + 1
    Next
    
    ActiveSheet.Name = "シート名一覧"
    Columns("A:B").Select
    Columns("A:B").EntireColumn.AutoFit
    Selection.NumberFormatLocal = "@"
    
End If

End Sub

 

コードの特徴

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?