
私はこの分野に非常に不慣れですが、行内のすべての値の平均を超える数値を強調表示する条件付き書式を作成しています。
この書式設定をワークブック内のすべてのシートのすべての行に適用する必要があります。
私が収集したものから、次のものを得ました:
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