すべてのワークブックシートに条件付き書式 VBA を適用する

すべてのワークブックシートに条件付き書式 VBA を適用する

私はこの分野に非常に不慣れですが、行内のすべての値の平均を超える数値を強調表示する条件付き書式を作成しています。

この書式設定をワークブック内のすべてのシートのすべての行に適用する必要があります。

私が収集したものから、次のものを得ました:

 Sub AllSheets()
         Dim ws As Worksheet
         For Each ws In Worksheets
            Range("A1:S1").Copy
            For Each r In Selection.Rows
            r.PasteSpecial (xlPasteFormats)
            Next r
            Application.CutCopyMode = False
        Next ws
 End Sub

しかし、これを実行すると、アクティブな選択されたセルにのみ適用されます。これを修正するにはどうすればよいでしょうか?

答え1

Range()使用されている が実際に 内の範囲であることを確認する必要がありますws。そうでない場合は、Activesheet 上で実行されます。

 Dim ws As Worksheet
 For Each ws In Worksheets
    ws.Range("A1:S1").Copy 
    For Each r In Selection.Rows
         r.PasteSpecial (xlPasteFormats)
    Next r
    Application.CutCopyMode = False
Next ws

End Sub

しかし、これは効果があるのでしょうか?少し「きつい」ですが、主に私が試みているのは使用を避ける.Selection

 Dim ws As Worksheet
 For Each ws In Worksheets
    ws.Range("A1:S1").Copy ' Or replace this with actual range, not just `Selection`
    For Each r In ws.Range("A1:S1").Rows
         r.PasteSpecial (xlPasteFormats)
    Next r
Next ws

End Sub

編集: 今気づきました...For each rとにかく 1 行しか使用しないのに、なぜループを使用するのでしょうか?

答え2

この書式設定をワークブック内のすべてのシートのすべての行に適用する必要があります。

確かに、「正しい質問をする方法を知る」には練習が必要です。それができるようになったら、簡単に検索してみましょう。

ワークシートを循環する vba

  Sub WorksheetLoop()

     Dim WS_Count As Integer
     Dim I As Integer

     ' Set WS_Count equal to the number of worksheets in the active
     ' workbook.
     WS_Count = ActiveWorkbook.Worksheets.Count

     ' Begin the loop.
     For I = 1 To WS_Count

        ' Insert your code here.
        ' The following line shows how to reference a sheet within
        ' the loop by displaying the worksheet name in a dialog box.
        MsgBox ActiveWorkbook.Worksheets(I).Name

     Next I

  End Sub

参照:https://support.microsoft.com/en-us/help/142126/macro-to-loop-through-all-worksheets-in-a-workbook

関連情報