全体的な私の目標は、ワークシートを通過し、ユーザーが設計した関数を使用して条件付き書式設定式を適用する VBA マクロを作成することです。ワークシートは、それぞれ 31 行のさまざまなグループに分割されているため、31 行に基づいてステップし、条件付き書式を設定する必要があります。というカスタム関数を作成しました。IdentifyFormulaCells
その式は条件付き書式で使用され、色やテキストなどを処理します。
Function IdentifyFormulaCells(rng As Range) As Boolean
' Determine if cell contains a formula based on input range and returns True if there is a formula
IdentifyFormulaCells = rng.HasFormula
End Function
Sub LoopGroup()
Dim rng As Range
Dim iRng As Range
Dim iStep As Long
Dim ProjectRow As Long
Dim FormulaString As String
Dim rngStart As Range
Dim rngEnd As Range
Dim iCol As Long
Dim iRow As Long
Dim nCol As Long
Dim nRow As Long
Set rng = Range("I34:FH994")
nCol = rng.Columns.Count
nRow = rng.Rows.Count
'Sets the first project row
ProjectRow = 34
FormulaString = "=IdentifyFormulaCells(I" & CStr(ProjectRow) & ")"
'Based on number of employees listed per project
iStep = 31
For iRow = 1 To nRow Step iStep
MsgBox "Project Row before action = " & ProjectRow
MsgBox "FormulaString before action = " & FormulaString
Set iRng = Range(rng.Cells(iRow, 1), rng.Cells(iRow, nCol))
iRng.Select
With Selection
.FormatConditions.Delete
'THIS IS WHERE THE PROBLEM IS, NEED TO MAKE A FUNCTION OR STRING THAT INCREMENTS BASED ON THE PROJECT ROW BUT IT STOP AFTER THE FIRST GROUP
'.FormatConditions.Add Type:=xlExpression, Formula1:="=IdentifyFormulaCells(I34)"
.FormatConditions.Add Type:=xlExpression, Formula1:=FormulaString
End With
MsgBox "project row before step= " & ProjectRow
ProjectRow = ProjectRow + iStep
FormulaString = "=IdentifyFormulaCells(I" & CStr(ProjectRow) & ")"
Next iRow
End Sub
行をコメントアウトすると.FormatConditions.Add....
、コードは 31 行の各グループをループして正常に実行されますが、現在のコードでは、34 行のみに条件付き書式を入力した後に停止します。
1行目だけ入るのはなぜ?