エクセルVBAでブック名を取得するコードを説明します。Nameプロパティだけでなく、ダイアログによる取得方法についても知っておくことが必要です。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルVBAを使ってマクロコードを作成している作業の中で、
「エクセルブックを指定して、そのブックのシート・セルの操作をしたい」、「データ取得のために、目的のエクセルブックを開きたい」など、” そのブックを名指し ” して操作したいということが数多くあります。
今回はそのような場合に、どういったVBAコードで処理をすれば適切なのかを説明して行きます。
- ブックの知識
- ブックの操作
- ワークブックを開くOpenメソッドの書き方 Excelマクロ
- VBA ブック名の取得法4つの解決策を詳しく解説
- VBA 開く,保存,閉じる,作成,削除 ブックの存在確認後のコード記述
- ファイルの保存に年月日+時刻を付けて管理する
- VBA 保存先フォルダをダイアログ指定で変数化
- 新規ブック5つの保存法。AddとSaveAsの使い方がわかる
- セル値を使いブック名として保存。統一フォームに有用
- VBA シートをブックから切り出し名付け保存する
- ブック名に作成者名を付加。 プロパティ変更とファイル保存
- 不要フォルダを削除する2種類のコードの作成
- 要らないファイルを自動削除するコードの作成
- ワークブックを閉じる12のパターン使い分け VBA最速理解
- ピンポイントでファイルを完全に削除するマクロ(コピペ可)
コンテンツ
ブック名を取得するケース別4つの解決策
一概にブック名を取得したいと言っても、その時のシチュエーションによって、使用すべきVBAコードが変わると言っても過言ではありません。
いまから、4つの場合(ケース)について説明して行きます。
最初に名前を取得するプロパティを確認
まず最初に、名前の取得の基本のプロパティについておさらいをしておきます。
基本的に、エクセルブックの名前を取得するには「Nameプロパティ」を使います。
ブック名取得で、拡張子なしにしたい場合は、別に(ブック名の)文字列を操作する必要があります。
文字列操作のMid関数、Left関数などを利用することになります。
またさらに他にも、「FullNameプロパティ」というものもあります。
似た名前のプロパティですが、当然、使い方の区別があります。
Workbookオブジェクト.Name
Sub ブック名取得1()
MsgBox ThisWorkbook.Name
End Sub
Workbookオブジェクト.FullName
Sub ブック名取得2()
MsgBox ThisWorkbook.FullName
End Sub
FullNameプロパティは、戻り値としてフルパスでブック名を返します。
今開いているブックの名前を取得する場合
マクロを実行している自分自身を表すVBAコードに、「ThisWorkbookプロパティ」というものがあります。
自身の名前を取得するには、ThisWorkbook.Nameで取得することが出来ます。
変数MywbNameにブック名を代入します。
Sub ブック名取得1_1()
Dim MywbName As String
MywbName = ThisWorkbook.Name
End Sub
現在フォーカスのあるアクティブになっているエクセルブックの名前を取得することが出来ます。
「ActiveWorkbookプロパティ」を利用して取得します。
変数AwbNameにブック名を代入します。
Sub ブック名取得3()
Dim AwbName As String
AwbName = ActiveWorkbook.Name
End Sub
現在のウインドウ上で開いているエクセルブックの名前を取得することが出来ます。
ブックの一覧表をメッセージボックスで表示するVBAコードは主なコードで2通りの記述方法があります。
メッセージボックスに上手く表示させるためには、改行コード「 & vbCrLf」を忘れずに付けておきましょう。
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
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
For Each~Nextを使ってのコード記述します。マクロ実行ブックのSheet1に一覧表示します。
マクロ実行ブックは必ず開かれていますので、そのまま、指定シート名・セル名をセットします。
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
VBAコード進行のプロセスとして、
まず目的のエクセルブックが開かれているかどうかをチェックする必要があります。開かれていればVBAコードを進行させ、開かれていなければ、マクロを終了させます。
開かれている場合は、目的のエクセルブックの指定のシート上のセルにブック一覧表を作成します。目的のブックは「Book3.xlsx」としています。
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
指定したフォルダ内のブックの名前を取得する場合
マクロ実行ブックと同じディレクトリに保存資料フォルダを作成しています。
その保存資料フォルダにあるエクセルブックの一覧リストを作成します。
Dir関数とDo While~Loopを使用しています。
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
組み込みダイアログでブック名を選んで取得する場合
組み込みダイアログのファイルを開くダイアログを利用して、ブック名を取得します。
VBA実行時に、指定したブックが開かれると同時に、そのブックの「Sheet1」のセルB3にブック名が入力されます。(メッセージボックスでも表示されます。)
ダイアログはカレントディレクトリのものが表示されますので、
「ChDirステートメント」で適切な場所に変更しておきます。
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
フォルダダイアログからの指定でブック名の一覧を取得する場合
フォルダダイアログで任意のフォルダを指定して、その中にあるエクセルブックの名前を一覧表で取得します。
VBAコード作成のプロセスは、まずフォルダ指定のためにダイアログを表示させ、指定されたフォルダのパスを取得します。さらに、そのパスからFileSystemObjectを使って中の全ファイル名を取得し、エクセルで有るファイルのみを抽出します。
マクロ実行ブックのSheet1にブック名の一覧として表示させます。
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
まとめ
エクセルVBAでマクロを作成していると、ブック名の取得が必要な時が多くあります。
その場その場のケースで、適切な取得方法も異なってきます。いくつかのパターン分けをしておくことが必要です。
ブック名を取得するには「Nameプロパティ」が中心的なコードですが、そればかりではないということも覚えておきましょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。