はじめに
ワークシートは複数選択して、同じ処理を行わせる事ができます。
選択方法や解除方法なども見ていきます。
複数のワークシートを選択する方法
ワークシートの複数選択には、いくつか方法があります。
Arrayを使う
Sheets (Worksheetsでも同じ) のプロパティにArrayを使ってリストを指定する事で複数のシートを選択できます。
Rangeのように、ただカンマで区切るだけではだめです。
リストは、インデックス番号でもシート名でも指定できます。
Sub macro1()
Sheets(Array(1, 2)).Select
Sheets(Array("Sheet1", "Sheet2")).Select
End Sub
この時、リストの最初に指定したシートがアクティブになります。(上の例では、Sheet1がアクティブ)
Sub macro2()
Sheets(Array(2, 1, 3)).Select
End Sub
上のコードでは、2番目のシートがアクティブになります。
Select False を使う
SelectメソッドにFalseを指定する事で、複数選択のメンバーに入れることができます。
Sub macro3()
Dim i As Long
For i = 1 To Sheets.Count Step 2
If i = 1 Then
Sheets(i).Select 'シートを単独で選択(アクティブ)
Else
Sheets(i).Select False 'シート選択リストに追加
End If
Next i
End Sub
SelectメソッドにFalseを指定する場合は注意が必要です。
もし、対象とは別のシートが選択されていた場合、それに追加される形になってしまいます。
上記のコードでは、1番目のシートを選択する時のみFalseを指定していません。
これで、1番目のシートのみが単独選択となり、続きの選択シートを追加していきます。
仮に4番目のシートが選択された状態だった場合、 For文で Sheets(i).Select False を繰り返しただけだと、1,3,4,5番目のシートが選択された状態になってしまいます。
尚、アクティブなシートになるのは、Selectのみで選択したシートか、元アクティブだったシートになります。
複数選択されたワークシートに同じ処理をする
複数選択されたシートは、ActiveWindowオブジェクトの SelectedSheetsプロパティで取得できます。
For Each を使えば、選択されたシートに同じ処理を行う事ができます。
Sub macro4()
Sheets(Array(1, 2, 3)).Select
Dim sh
For Each sh In ActiveWindow.SelectedSheets
sh.Range("A1") = sh.Name
Next sh
End Sub
このプログラムでは、選択されたシートのA1セルにそれぞれのシート名を記述します。
全てのシートに同じ処理を行いたい場合は、Worksheets を使えば良いでしょう。
この場合、シートの選択状態に影響はありません。
Sub macro5()
Sheets(Array(1, 2, 3)).Select
Dim sh
For Each sh In Worksheets
sh.Range("A1") = sh.Name
Next sh
End Sub
シートの選択と関係なく、特定のシートに同じ処理を行いたい場合は、Sheetsにリストを指定します。
この場合もシートの選択状態とは無関係です。
Sub macro6()
Dim sh
For Each sh In Sheets(Array(1, 2, 3))
sh.Range("A1") = sh.Name
Next sh
End Sub
複数選択されたワークシートのうち1つをアクティブにする
シートを1つ選択すると、そのシートはアクティブになりますが、本来シートの選択とシートをアクティブにする事は別の話です。
Select と Activate で以下のようなコードが書けます。
Sub macro7()
Worksheets(Array(1, 3, 5)).Select
Worksheets(3).Activate
End Sub
1行目では、リストの最初に指定した1番目のシートがアクティブになっていますが、2行目で3番目もシートをアクティブにしています。
シートの選択状態とは関係ありません。
複数選択されたワークシートを解除する
複数選択を解除したい場合は、何か1つのシートをSelectするだけです。
Selectされたシートは単独で選択となり、かつアクティブになります。
Sub macro8()
Worksheets(Array(1, 3, 5)).Select
Worksheets(3).Activate
Worksheets(1).Select '上の2行はキャンセルされ、
'1番目のシートが選択されてアクティブとなる。
End Sub
複数選択されたワークシートを削除
選択されたシートのみ削除したい場合は、ActiveWindow.SelectedSheets の Deleteメソッドを使うと1行で書けます。
Sub macro9()
Sheets(Array(1, 3, 5)).Select
ActiveWindow.SelectedSheets.Delete
End Sub
コメント