複数のワークシートを扱う方法

シート

はじめに

 ワークシートは複数選択して、同じ処理を行わせる事ができます。
選択方法や解除方法なども見ていきます。

複数のワークシートを選択する方法

 ワークシートの複数選択には、いくつか方法があります。

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

コメント

タイトルとURLをコピーしました