「vba selectedsheets 配列を取得」
という検索キーワードでのアクセスがありました。
Windowオブジェクトに、選択されているシートを表すSheetsコレクションオブジェクトを返す、SelectedSheetsプロパティが存在します。
このWindow.SelectedSheetsプロパティを使って、シートの何かを配列として取得したいということでしょうか。
選択されているシートだけを操作するのに便利なWindow.SelectedSheetsプロパティ
拙著『いちばんやさしいExcel VBAの教本』では、すべてのシートを表すSheetsコレクションオブジェクトを返すSheetsプロパティを、Lesson 70「Sheetsでもワークシートを操作できます」でご紹介しています。
すべてのシートではなく、選択されているシートだけ処理したいといったことも、実務ではありがちです。
そんなときに便利なのがWindowオブジェクトのSelectedSheetsプロパティです。
実際のコードとしてはアクティブなWindowオブジェクトを返すActiveWindowプロパティと組み合わせた「ActiveWindow.SelectedSheets」といったコードで使うことが多いプロパティです。
本当に配列が必要ですか?
「vba selectedsheets 配列を取得」
と検索なさった方には、まず本当に配列が必要なのかを考えていただきたいです。
Window.SelectedSheetsプロパティは、選択されているシートだけを含むSheetsコレクションオブジェクトを返しますから、配列を使った処理と似たこともできます。
既にご紹介しているとおりFor Each~NextやFor~Nextでループ処理することが可能です。
SelectedSheetsで取得したシート名を配列にするサンプルマクロ
どうしてもSelectedSheetsで取得したシート名を配列にする必要があるならば、以下のSubプロシージャが参考になるでしょう。
Dim n As Long
n = ActiveWindow.SelectedSheets.Count
Dim arr() As String
ReDim arr(1 To n)
For i = 1 To n
arr(i) = ActiveWindow.SelectedSheets(i).Name
Next i
Stop
End Sub
上記のSubプロシージャを実行すると、End Sub直前のStopステートメントで一時停止します。
この状態で拙著でも多用しているローカルウィンドウを表示してやれば、配列変数arrに選択されているシート名が格納されていることを確認できます。
上図は「Sheet1」シートと「Sheet3」シートが選択されている状態で実行したところです。
SelectedSheetsで取得したシートのインデックス番号を配列にするサンプルマクロ
シート名ではなく、選択されているシートのインデックス番号を配列にしたいのなら、以下のようなSubプロシージャが参考になるでしょう。
Dim n As Long
n = ActiveWindow.SelectedSheets.Count
Dim arr() As Long
ReDim arr(1 To n)
For i = 1 To n
arr(i) = ActiveWindow.SelectedSheets(i).Index
Next i
Stop
End Sub
Home » エクセルマクロ・Excel VBAの使い方 » Windowオブジェクト » SelectedSheetsで取得した選択シートを配列に