Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » ワークシートからブック名を取得するExcelマクロ

ワークシートからブック名を取得するExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba ワークシートからブック名を取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

ワークシートが特定できているときに、そのワークシートの含まれるブックの名前を取得する、Excel VBA(Visual Basic for Applications)のコードを探している方による検索です。

[スポンサードリンク]

ワークシートからブック名を取得するサンプルマクロ

以下のSubプロシージャを実行すると、開かれているブックのいずれかに、定数・FIND_SHで指定されている名前のワークシートが存在しているときに、そのワークシートが含まれているブックの名前がメッセージボックスに表示されます。

Sub シート名がわかっているときにブック名を取得する()
 Const FIND_SH = "顧客マスター"
 Dim bk As Workbook
 Dim sh As Worksheet

 For Each bk in Workbooks
  For Each sh in bk.Worksheets
   If sh.Name = FIND_SH Then
     MsgBox sh.Parent.Name
     Exit Sub
   End If
  Next sh
 Next bk
 MsgBox "「" & FIND_SH & "」シートは存在しません。"
End Sub

サンプルマクロの解説

開いている全ブックにFor Each~Nextループを回して、
  For Each bk in Workbooks

各ブック内の全ワークシートにFor Each~Nextループを回して、
   For Each sh in bk.Worksheets

シートの名前を調べて、探しているシート名だったときに、
    If sh.Name = FIND_SH Then

Parentプロパティで、親オブジェクトであるWorkbookオブジェクトを取得して、その名前をメッセージボックスに表示して、Subプロシージャを抜け、
     MsgBox sh.Parent.Name
     Exit Sub

シートが見つからなかった場合には、メッセージを表示します。
  MsgBox "「" & FIND_SH & "」シートは存在しません。"

Parentプロパティを使わない場合

ちなみに、上記の条件であれば、Parentプロパティを使わなくても、以下のようなコードで同じ結果を得られます。
  For Each bk in Workbooks
   For Each sh in bk.Worksheets
    If sh.Name = FIND_SH Then
      MsgBox bk.Name
      Exit Sub
    End If
   Next sh
  Next bk

私としては、たくさんプロパティをただ覚えるよりは、Parentプロパティを使わなくてもロジックからでも取得できることを考えられるほうが、より大切なことのように思います。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » ワークシートからブック名を取得するExcelマクロ

「Workbooks・Workbook」の記事一覧

検索


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

.