Excelマクロを作っているときに、選択されているシートに対してループ処理を行いたいと、感じることがあります。
「エクセル マクロ 選択しているシート 取得」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスもあります。
しかし、選択されているシートを取得するプロパティや、シートが選択されているかどうかを判別するようなプロパティが、SheetsコレクションやWorksheetオブジェクトに見つからないので、簡単にはできないと思ってしまう方がいらっしゃるようです。
実はWindowオブジェクトに、選択されているSheetsコレクションを返すプロパティが存在しています。SelectedSheetsプロパティです。
For Each~Nextで選択されているシート名を取得する
Windowオブジェクトに用意されているSelectedSheetsプロパティを使えば、選択されているシートにだけ処理を行うようなマクロも簡単に作れます。
Dim sht As Object
For Each sht In ActiveWindow.SelectedSheets
MsgBox sht.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ループでも書けますから、オブジェクト変数が苦手な方は、以下のようなコードのほうが理解しやすいでしょう。
With ActiveWindow.SelectedSheets
Dim i As Long
For i = 1 To .Count
MsgBox .Item(i).Name
Next
End With
End Sub
With文が苦手な方は、以下の書き方から理解しましょう。
Dim i As Long
For i = 1 To ActiveWindow.SelectedSheets.Count
MsgBox ActiveWindow.SelectedSheets(i).Name
Next
End Sub
最終更新日時:2024-05-15 15:31
Home » エクセルマクロ・Excel VBAの使い方 » Windowオブジェクト » VBAで選択されているシートの名前を取得する-Window.SelectedSheets