Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 開いているブックのパスを取得-Workbook.Pathプロパティ

開いているブックのパスを取得-Workbook.Pathプロパティ

対象:Excel 2010, Excel 2013, Windows版Excel 2016

WorkbookオブジェクトのPathプロパティ

「vba 開いているブックのフルパス」
「excel vba 開いているファイルのパス」
といった検索キーワードで、時折アクセスがあります。

「vba 開いているファイルの場所を調べる」
も、同じことを調べていた可能性が高いと考えています。

[スポンサードリンク]

個々のブックのパスは、拙著『いちばんやさしいExcel VBAの教本』のLesson 75「WorkbooksとWorkbookのプロパティ・メソッドについて学習しましょう」でもご紹介している、WorkbookオブジェクトのPathプロパティで取得できます。

For~Next文で開いているブックのパスを取得するサンプルマクロ

以下のSubプロシージャを実行すると、開いているブックのパスがイミディエイトウィンドウに出力されます。
Sub 開いているブックのパスを取得する()
 Dim i As Long
 For i = 1 To Workbooks.Count
  Debug.Print Workbooks(i).Path
 Next i
End Sub

上記SubプロシージャのFor~Next文の構造部分
  For i = 1 To Workbooks.Count
  Next i
は拙著の、Lesson 77「すべてのブックからシートを複製するマクロを理解しましょう」で紹介しているマクロと同じです。Lesson 77の、ブックをアクティブにしてブック名を順番に表示するマクロや、開いている全ブックの全シートをこのブックに複製するマクロと違うのは、
  For i = 1 To Workbooks.Count
  Next i
の間に書かれているコードだけです。

「vba 開いているブックのフルパス」
「excel vba 開いているファイルのパス」
ということですから、上記プロシージャでは、Workbook.Pathプロパティでパスを取得して、Debug.Printでイミディエイトウィンドウに出力しています。
  For i = 1 To Workbooks.Count
   Debug.Print Workbooks(i).Path
  Next i

For Each~Next文で開いているブックのパスを取得するサンプルマクロ

For Each~Next文でも、開いているブックのパスを取得できます。
Sub 開いているブックのパスを取得する2()
 Dim bk As Workbook
 For Each bk In Workbooks
  Debug.Print bk.Path
 Next bk
End Sub

イミディエイトウィンドウに出力するだけなら、For Each~Next文のほうがFor~Next文よりも若干シンプルになります。

For~Next文で開いているブックのパスを一覧にするするサンプルマクロ

パスを取得するだけでなく、ワークシートに一覧を作成するなら以下のようなSubプロシージャです。

以下のSubプロシージャを実行すると、アクティブシートのA列に、開いているブックのパスが出力されます。
Sub 開いているブックの一覧を作成する()
 Dim i As Long
 For i = 1 To Workbooks.Count
  Cells(i, "A").Value = Workbooks(i).Path
 Next i
End Sub

パスを取得してイミディエイトウィンドウに出力する場合は、For~Next文の中が、
  Debug.Print Workbooks(i).Path
でしたけれど、セルに書き出すために、
  Cells(i, "A").Value = Workbooks(i).Path
になっています。

For Each~Next文で開いているブックのパスを一覧にするするサンプルマクロ

For Each~Next文を使って開いているブックのパスを一覧にする場合は、以下のようなSubプロシージャです。
Sub 開いているブックの一覧を作成する2()
 Dim n As Long
 n = 1
 Dim bk As Workbook
 For Each bk In Workbooks
  Cells(n, "A").Value = bk.Path
  n = n + 1
 Next bk
End Sub

パスを書き出すセルを指定する必要があるので、イミディエイトウィンドウに出力したSubプロシージャよりも行数が増えています。

For~Next文とFor Each~Next文の違いが明確になっていない段階の方の場合、For Each~Next文内の、
   n = n + 1
を忘れがちです。

最終更新日時:2018-10-03 13:09

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 開いているブックのパスを取得-Workbook.Pathプロパティ

「Workbooks・Workbook」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.