VBA ブック名の取得法4つの解決策を詳しく解説

vbabooknameeyecatch

エクセルVBAでブック名を取得するコードを説明します。Nameプロパティだけでなく、ダイアログによる取得方法についても知っておくことが必要です。

こんにちは、じゅんぱ店長(@junpa33)です。

エクセルVBAを使ってマクロコードを作成している作業の中で、

「エクセルブックを指定して、そのブックのシート・セルの操作をしたい」、「データ取得のために、目的のエクセルブックを開きたい」など、” そのブックを名指し ” して操作したいということが数多くあります。

今回はそのような場合に、どういったVBAコードで処理をすれば適切なのかを説明して行きます。

ブック名を取得するケース別4つの解決策

vbabooknamep012

一概にブック名を取得したいと言っても、その時のシチュエーションによって、使用すべきVBAコードが変わると言っても過言ではありません。

いまから、4つの場合(ケース)について説明して行きます。

最初に名前を取得するプロパティを確認

まず最初に、名前の取得の基本のプロパティについておさらいをしておきます。

基本的に、エクセルブックの名前を取得するには「Nameプロパティ」を使います。

最初に知っておくべき大切なこと

VBAで取得するブック名とは、その拡張子まで含めたものになります。

例えばエクセルブックBook1なら「Book1」という名前ではなく、

それがExcelブックの.xlsxなら「Book1.xlsx」、マクロ有効ブックの.xlsmなら「Book1.xlsm」というのが、VBAで言うところのブック名となります。

ブック名取得で、拡張子なしにしたい場合は、別に(ブック名の)文字列を操作する必要があります。

文字列操作のMid関数、Left関数などを利用することになります。

またさらに他にも、「FullNameプロパティ」というものもあります。

似た名前のプロパティですが、当然、使い方の区別があります。

Nameプロパティの構文

Workbookオブジェクト.Name

VBA
Sub ブック名取得1()
        MsgBox ThisWorkbook.Name
End Sub
vbabooknamep001
Nameプロパティの戻り値

FullNameプロパティの構文

Workbookオブジェクト.FullName

VBA
Sub ブック名取得2()
        MsgBox ThisWorkbook.FullName
End Sub
vbabooknamep002
FullNameプロパティの戻り値

FullNameプロパティは、戻り値としてフルパスでブック名を返します。

今開いているブックの名前を取得する場合

マクロを実行しているブック(自分自身)の名前を取得

マクロを実行している自分自身を表すVBAコードに、「ThisWorkbookプロパティ」というものがあります。

自身の名前を取得するには、ThisWorkbook.Nameで取得することが出来ます。

変数MywbNameにブック名を代入します。

VBA
Sub ブック名取得1_1()
    Dim MywbName As String
        MywbName = ThisWorkbook.Name
End Sub

アクティブになっているブックの名前を取得

現在フォーカスのあるアクティブになっているエクセルブックの名前を取得することが出来ます。

「ActiveWorkbookプロパティ」を利用して取得します。

変数AwbNameにブック名を代入します。

VBA
Sub ブック名取得3()
    Dim AwbName As String
        AwbName = ActiveWorkbook.Name
End Sub

ウインドウ上で開いているブック名を取得

現在のウインドウ上で開いているエクセルブックの名前を取得することが出来ます。

ブック名の一覧をメッセージボックスで表示する

ブックの一覧表をメッセージボックスで表示するVBAコードは主なコードで2通りの記述方法があります。

メッセージボックスに上手く表示させるためには、改行コード「 & vbCrLfを忘れずに付けておきましょう。

For Each~Nextステートメントを使用したコードのパターン

VBA
Sub ブック名取得4a()
    Dim wb As Workbook
    Dim wbName As String
        For Each wb In Workbooks
            wbName = wbName & wb.Name & vbCrLf
        Next
        MsgBox wbName
End Sub

For~Nextとインデックス番号を使用したコードのパターン

VBA
Sub ブック名取得4b()
    Dim wb As Workbook
    Dim i As Long
    Dim wbName As String
        For i = 1 To Workbooks.Count
            wbName = wbName & Workbooks(i).Name & vbCrLf
        Next i
        MsgBox wbName
End Sub
vbabooknamep003
開いているブック名の一覧
ブック名の一覧をマクロ実行ブックのSheet1に表示する

For Each~Nextを使ってのコード記述します。マクロ実行ブックのSheet1に一覧表示します。

マクロ実行ブックは必ず開かれていますので、そのまま、指定シート名・セル名をセットします。

VBA
Sub ブック名取得4c()
    Dim wb As Workbook
    Dim wbName As String
    Dim s As Long
    s = 3
        For Each wb In Workbooks
            wbName = wb.Name
            ThisWorkbook.Worksheets("Sheet1").Cells(s, 2) = wbName
            s = s + 1
        Next
End Sub
vbabooknamep004
Sheet1に一覧表示
目的のブックを探してそのブックのSheet2にブック名を一覧表示

VBAコード進行のプロセスとして、

まず目的のエクセルブックが開かれているかどうかをチェックする必要があります。開かれていればVBAコードを進行させ、開かれていなければ、マクロを終了させます。

開かれている場合は、目的のエクセルブックの指定のシート上のセルにブック一覧表を作成します。目的のブックは「Book3.xlsx」としています。

VBA
Sub ブック名取得4d()
    Dim wb As Workbook
    Dim Twbname As String
    Dim t As Long
    Dim Flag As Boolean
        Twbname = "Book3.xlsx"
        t = 1
        For Each wb In Workbooks
            If wb.Name = Twbname Then
                Flag = True
                Exit For
            End If
        Next
        If Flag = True Then
                For Each wb In Workbooks
                    Workbooks(Twbname).Activate
                    Worksheets("Sheet2").Cells(t + 2, 2) = wb.Name
                    t = t + 1
                Next
        Else
            MsgBox Twbname & " は、開かれていません。"
        End If
End Sub
vbabooknamep005
Book3.xlsxのSheet2に一覧表示

指定したフォルダ内のブックの名前を取得する場合

マクロ実行ブックと同じディレクトリに保存資料フォルダを作成しています。

その保存資料フォルダにあるエクセルブックの一覧リストを作成します。

Dir関数とDo While~Loopを使用しています。

VBA
Sub ブック名取得5()
    Dim wbname As String
    Dim p As Long
    Dim Mypath As String
        Mypath = ThisWorkbook.Path & "\保存資料"
        p = 3
        wbname = Dir(Mypath & "\*.xls")
        Do While wbname <> ""
            ThisWorkbook.Worksheets("Sheet1").Cells(p, 2) = wbname
            ActiveCell.Offset(1).Select
            wbname = Dir()
            p = p + 1
        Loop
End Sub
vbabooknamep007
保存資料フォルダ
vbabooknamep006
保存資料フォルダのブック一覧表

組み込みダイアログでブック名を選んで取得する場合

組み込みダイアログのファイルを開くダイアログを利用して、ブック名を取得します。

VBA実行時に、指定したブックが開かれると同時に、そのブックの「Sheet1」のセルB3にブック名が入力されます。(メッセージボックスでも表示されます。)

ダイアログはカレントディレクトリのものが表示されますので、

「ChDirステートメント」で適切な場所に変更しておきます。

VBA
Sub ブック名の取得6()
    Dim wbname As String
    Dim flag As Boolean
        ChDir ThisWorkbook.Path & "\保存資料"
        flag = Application.Dialogs(xlDialogOpen).Show
        If flag = False Then
            MsgBox "キャンセルされました"
            Exit Sub
        End If
        wbname = Dir(ActiveWorkbook.Name)
        ActiveWorkbook.Worksheets("Sheet1").Cells(3, 2) = wbname
        MsgBox wbname
End Sub
vbabooknamep008
ダイアログでブックを選択する
vbabooknamep009
選択したBook104.xlsxにブック名が表示された

フォルダダイアログからの指定でブック名の一覧を取得する場合

フォルダダイアログで任意のフォルダを指定して、その中にあるエクセルブックの名前を一覧表で取得します。

VBAコード作成のプロセスは、まずフォルダ指定のためにダイアログを表示させ、指定されたフォルダのパスを取得します。さらに、そのパスからFileSystemObjectを使って中の全ファイル名を取得し、エクセルで有るファイルのみを抽出します。

マクロ実行ブックのSheet1にブック名の一覧として表示させます。

VBA
Sub ブック名の取得7()
    Dim FlePath As Variant
        With Application.FileDialog(msoFileDialogFolderPicker)
            If .Show = 0 Then
                MsgBox "キャンセルされました。"
                Exit Sub
            End If
            FlePath = .SelectedItems(1)
        End With
    Dim Fso, Fle, F As Object
    Dim x As Long
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set Fle = Fso.getfolder(FlePath)
        x = 3
        For Each F In Fle.Files
            If F.Type Like "Microsoft Excel*" Then
                ThisWorkbook.Worksheets("Sheet1").Cells(x, 2) = F.Name
                x = x + 1
            End If
        Next
End Sub
vbabooknamep010
フォルダを選択した
vbabooknamep011
マクロ実行ブックに表示

まとめ

vbabooknamep013

エクセルVBAでマクロを作成していると、ブック名の取得が必要な時が多くあります。

その場その場のケースで、適切な取得方法も異なってきます。いくつかのパターン分けをしておくことが必要です。

ブック名を取得するには「Nameプロパティ」が中心的なコードですが、そればかりではないということも覚えておきましょう。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min