0

全体的な私の目標は、ワークシートを通過し、ユーザーが設計した関数を使用して条件付き書式設定式を適用する 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行目だけ入るのはなぜ?

4

1 に答える 1