Home » エクセルマクロ・Excel VBAの使い方 » Windowオブジェクト » SelectedSheetsで取得した選択シートを配列に

SelectedSheetsで取得した選択シートを配列に

対象:Excel2010, Excel2013, Windows版Excel2016

「vba selectedsheets 配列を取得」
という検索キーワードでのアクセスがありました。

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

オブジェクトブラウザー:Window.SelectedSheets

このWindow.SelectedSheetsプロパティを使って、シートの何かを配列として取得したいということでしょうか。

[スポンサードリンク]

選択されているシートだけを操作するのに便利なWindow.SelectedSheetsプロパティ

Sheetsでもワークシートを操作できます

拙著『いちばんやさしい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プロシージャが参考になるでしょう。

Sub 選択シート名を配列に()
 Dim n As Long
 n = ActiveWindow.SelectedSheets.Count

 Dim arr() As String
 ReDim arr(1 To n)

 Dim i As Long
 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プロシージャが参考になるでしょう。

Sub 選択シートのインデックスを配列に()
 Dim n As Long
 n = ActiveWindow.SelectedSheets.Count

 Dim arr() As Long
 ReDim arr(1 To n)

 Dim i As Long
 For i = 1 To n
  arr(i) = ActiveWindow.SelectedSheets(i).Index
 Next i
 Stop
End Sub

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Windowオブジェクト » SelectedSheetsで取得した選択シートを配列に

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

検索


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