1

私は VBA (およびあらゆる種類のプログラミング全般) に非常に慣れていないため、ここでどのように進めればよいかわかりません。コードが別の方法で設定されたときにエラーが発生し、範囲が重複しなくなるとエラーが発生したため、エラーは条件付きフォーマットの範囲の重複と関係があると思います。ここではそうではないかもしれませんが、知っておくと役立つと思いました。

次のコードで「添え字が範囲外です」というエラーが発生します。

Sub test2()
    Dim rngToFormat As Range
    Set rngToFormat = ActiveSheet.Range("$a$1:$z$1000")
    Dim rngToFormat2 As Range
    Set rngToFormat2 = ActiveSheet.Range("$k$20:$k$1000")
    Dim rngToFormat3 As Range
    Set rngToFormat3 = ActiveSheet.Range("$j$22:$j$1000")
    Dim rngToFormat4 As Range
    Set rngToFormat4 = ActiveSheet.Range("$i$22:$i$1000")
    Dim rngToFormat5 As Range
    Set rngToFormat5 = ActiveSheet.Range("$g$20:$g$1000")
    Dim rngToFormat6 As Range
    Set rngToFormat6 = ActiveSheet.Range("$d$9, $f$9")
    Dim rngToFormat7 As Range
    Set rngToFormat7 = ActiveSheet.Range("$G$3:$G$7,$G$11:$G$15,$E$3:$E$7,$E$11:$E$15,$N$3:$N$7,$N$11:$N$15,$L$3:$L$7,$L$11:$L$15")
    rngToFormat.FormatConditions.Delete
    rngToFormat.FormatConditions.Add Type:=xlExpression, _
        Formula1:="=if(R[]C20=1, true(), false())"
        rngToFormat.FormatConditions(1).Font.Color = RGB(228, 109, 10)
    rngToFormat2.FormatConditions.Add Type:=xlExpression, _
        Formula1:="=and(R[]C7=""6. Negotiate"", R[]C11<25)"
        rngToFormat2.FormatConditions(2).Font.ColorIndex = 3
    rngToFormat2.FormatConditions.Add Type:=xlExpression, _
        Formula1:="=and(R[]C7=""4. Develop"", R[]C11<15)"
        rngToFormat2.FormatConditions(3).Font.ColorIndex = 3
    rngToFormat2.FormatConditions.Add Type:=xlExpression, _
        Formula1:="=and(R[]C7=""5. Prove"", R[]C11<20)"
        rngToFormat2.FormatConditions(4).Font.ColorIndex = 3
    rngToFormat2.FormatConditions.Add Type:=xlExpression, _
        Formula1:="=and(R[]C7=""7. Committed"", R[]C11<30)"
        rngToFormat2.FormatConditions(5).Font.ColorIndex = 3
    rngToFormat2.FormatConditions.Add Type:=xlExpression, _
        Formula1:="=and(R[]C7=""Closed Won"", R[]C11<35)"
        rngToFormat2.FormatConditions(6).Font.ColorIndex = 3
    rngToFormat3.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreater, Formula1:=200
        rngToFormat3.FormatConditions(7).Font.ColorIndex = 3
    rngToFormat4.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreater, Formula1:=60
        rngToFormat4.FormatConditions(8).Font.ColorIndex = 3
    rngToFormat5.FormatConditions.Add Type:=xlExpression, _
        Formula1:="=or(R[]C7=""1. Plan"", R[]C7=""2. Create"", R[]C7=""3. Qualify"")"
        rngToFormat5.FormatConditions(9).Font.ColorIndex = 3
    rngToFormat6.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlLess, Formula1:=0
        rngToFormat6.FormatConditions(10).Font.ColorIndex = 3
        rngToFormat6.FormatConditions(10).Interior.Color = RGB(204, 204, 255)
        rngToFormat6.FormatConditions(10).Interior.Pattern = xlSolid
    rngToFormat7.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlLess, Formula1:=0
        rngToFormat7.FormatConditions(11).Font.ColorIndex = 3
        rngToFormat7.FormatConditions(11).Interior.Color = RGB(215, 228, 158)
        rngToFormat7.FormatConditions(11).Interior.Pattern = xlSolid
End Sub

アドバイスをいただければ幸いです。

4

1 に答える 1

1

コードには 2 つの問題があります。

  1. 最初の範囲の条件付き書式のみを削除しますが、すべての範囲に条件を追加します。後で、作成したばかりのものではない可能性が高い特定の書式にアクセスします ( FormatConditions(3))
  2. 入力した数式はデフォルトの英語の数式です。ただし、何らかの奇妙な理由でFormatConditions.Add、ローカルの数式が必要です。

コードを作り直しました。問題が解決するかどうかを確認してください。

サブ test2()

    fctApply rng:=Range("$a$1:$z$1000"), strFormulaR1C1:="=(R[]C20=1)", dblRGB:=RGB(228, 109, 10), blnDeleteOldConditions:=True

    fctApply rng:=Range("$k$20:$k$1000"), strFormulaR1C1:="=and(R[]C7=""6.交渉"",R[]C11<25)", intColorIndex:=3
    fctApply rng:=Range("$k$20:$k$1000"), strFormulaR1C1:="=and(R[]C7=""4.開発"", R[]C11<15)", intColorIndex:=3
    fctApply rng:=Range("$k$20:$k$1000"), strFormulaR1C1:="=and(R[]C7=""5.証明"", R[]C11<20)", intColorIndex:=3
    fctApply rng:=Range("$k$20:$k$1000"), strFormulaR1C1:="=and(R[]C7=""7.コミット済み"", R[]C11<30)", intColorIndex:=3
    fctApply rng:=Range("$k$20:$k$1000"), strFormulaR1C1:="=and(R[]C7=""Closed Won"", R[]C11<35)", intColorIndex:=3

    fctApply rng:=Range("$j$22:$j$10000"), strFormulaR1C1:=200, intType:=xlCellValue, intOperator:=xlGreater, intColorIndex:=3

    fctApply rng:=Range("$i$22:$i$1000"), strFormulaR1C1:=60, intType:=xlCellValue, intOperator:=xlGreater, intColorIndex:=3

    fctApply(rng:=Range("$g$20:$g$1000"), strFormulaR1C1:=0, intType:=xlCellValue, intOperator:=xlLess, intColorIndex:=3) の場合
        .インテリア.カラー = RGB(204, 204, 255)
        .Interior.Pattern = xlSolid
    で終わる

    fctApply(rng:=Range("$G$3:$G$7,$G$11:$G$15,$E$3:$E$7,$E$11:$E$15,$N$3:$N$7,$ の場合) N$11:$N$15,$L$3:$L$7,$L$11:$L$15"), strFormulaR1C1:=0, intType:=xlCellValue, intOperator:=xlLess, intColorIndex:=3)
        .インテリア.カラー = RGB(215, 228, 158)
        .Interior.Pattern = xlSolid
    で終わる
サブ終了

Private Function fctApply(rng As Range, _
    バリアントとしての strFormulaR1C1、_
    オプションの intType As XlFormatConditionType = xlExpression, _
    オプションの intOperator As XlFormatConditionOperator, _
    オプションの intColorIndex As Integer = -1, _
    オプションの dblRGB As Double = -1、_
    オプションの blnDeleteOldConditions As Boolean = False _
    ) FormatCondition として

    objCond を FormatCondition として薄暗い
    Dim strFormula As String

    If blnDeleteOldConditions Then rng.FormatConditions.Delete

    strFormula = Application.ConvertFormula(strFormulaR1C1, xlR1C1, xlA1)

    エラー時 GoTo ConvertLocal
    If intOperator <> 0 Then
        rng.FormatConditions.Add Type:=intType, _
            Formula1:=strFormula、演算子:=intOperator
    そうしないと
        rng.FormatConditions.Add Type:=intType, _
            Formula1:=strFormula
    終了条件
    エラー時 GoTo 0
    objCond = rng.FormatConditions(rng.FormatConditions.Count) を設定します。
    If intColorIndex <> -1 Then
        objCond.Font.ColorIndex = intColorIndex
    ElseIf dblRGB <> -1 その後
        objCond.Font.Color = dblRGB
    終了条件
    fctApply = objCond を設定します。

    終了機能
ConvertLocal:
    With Range("A1") 'これを空のセル アドレスに変更します - ローカルの数式から通常の数式に変換するために一時的に使用されます
        .Formula = strFormula
        strFormula = .FormulaLocal
        .Formula = ""
    で終わる
    履歴書
終了機能
于 2013-02-04T12:37:34.090 に答える