Home » エクセルマクロ・Excel VBAの使い方 » Windowオブジェクト » VBAで選択されているシートの名前を取得-SelectedSheetsプロパティ

VBAで選択されているシートの名前を取得-SelectedSheetsプロパティ

対象:Excel2003, Excel2007, Excel2010, Excel2013

Excelマクロを作っているときに、選択されているシートに対してループ処理を行いたいと、感じることがあります。

「エクセル マクロ 選択しているシート 取得」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスもあります。

しかし、選択されているシートを取得するプロパティや、シートが選択されているかどうかを判別するようなプロパティが、SheetsコレクションやWorksheetオブジェクトに見つからないので、簡単にはできないと思ってしまう方がいらっしゃるようです。

実はWindowオブジェクトに、選択されているSheetsコレクションを返すプロパティが存在しています。SelectedSheetsプロパティです。

[スポンサードリンク]

For Each~Nextで選択されているシート名を取得する

Windowオブジェクトに用意されているSelectedSheetsプロパティを使えば、選択されているシートにだけ処理を行うようなマクロも簡単に作れます。

Sub 選択されているシート名を取得する_1()
 Dim sh As Object
 For Each sh In ActiveWindow.SelectedSheets
  MsgBox sh.Name
 Next
End Sub

For Each~Next文のInの後ろがポイントです。
  For Each sh In ActiveWindow.SelectedSheets

ActiveWindowプロパティでアクティブなウィンドウを表すWindowオブジェクトを取得して、Windowオブジェクトに用意されているSelectedSheetsプロパティで、アクティブウィンドウで選択されているシートだけを含むSheetsコレクションを取得しています。

ActiveWindow.SelectedSheetsで取得した、選択されているシートに対して、For Each~Nextループを回してシートを表すWorksheetオブジェクトまたはChartオブジェクトを順番に取得して、その名前をメッセージボックスに表示しています。

For~Nextで選択されているシート名を取得する

オブジェクト変数を使うFor Each~Nextループは、For~Nextループでも書けますから、オブジェクト変数が苦手な方は、以下のようなコードのほうが理解しやすいでしょう。

Sub 選択されているシート名を取得する_2()
 With ActiveWindow.SelectedSheets
  Dim i As Long
  For i = 1 To .Count
   MsgBox .Item(i).Name
  Next
 End With
End Sub

With文が苦手な方は、以下の書き方から理解しましょう。

Sub 選択されているシート名を取得する_3()
 Dim i As Long
 For i = 1 To ActiveWindow.SelectedSheets.Count
  MsgBox ActiveWindow.SelectedSheets(i).Name
 Next
End Sub

最終更新日時:2020-09-05 06:37

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Windowオブジェクト » VBAで選択されているシートの名前を取得-SelectedSheetsプロパティ

「Windowオブジェクト」の記事一覧

検索


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

.