0

スプレッドシートの列の 1 つで与えられた結果に基づいて、スプレッドシートに色を付けようとしています。私は次のコードを使用しています:

With newSheet.Range("B:B")
    .FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue, Excel.XlFormatConditionOperator.xlEqual, "CORRECT")
    .FormatConditions(1).Interior.ColorIndex = 4

    .FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue, Excel.XlFormatConditionOperator.xlEqual, "INCORRECT")
    .FormatConditions(2).Interior.ColorIndex = 3
End With

残念ながら、これは「CORRECT」または「INCORRECT」を含むセルのみに色を付けます。それらが入っている行まで拡張したい (たとえば、B12 に "CORRECT" が含まれている場合、A12:G12 をすべて緑色にしたい)。式を使用するように提案されたので、次のコードを試しました。

.FormatConditions.Add(Type:=XlFormatConditionType.xlExpression, Formula1:="=B" & row & "= ""CORRECT"")")
.FormatConditions(1).Interior.ColorIndex = 4

ただし、これは E_INVALIDARG 例外を返します。これを修正する方法についてのヒントをいただければ幸いです。また、何千もの行があるため、すべての行をループして一度に 1 つずつチェックすることは実際にはオプションではないことに注意してください。

4

3 に答える 3

4

余分な閉じ括弧を削除して列を絶対値にすると、数式が機能するはずです

.FormatConditions.Add(Type:=XlFormatConditionType.xlExpression, Formula1:="=$B1= ""CORRECT""")
.FormatConditions(1).Interior.ColorIndex = 4

数式$B1の行を書式設定された範囲の最初の行として設定してください (ループを実行する必要はありません)。

于 2012-11-05T22:15:17.403 に答える
0

これを問題のシートに貼り付けることができます。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    i = 1
    While Range("B" & i).Value2 <> ""
        If Range("B" & i).Value2 = "INCORRECT" Then
            Range("A" & i & ":G" & i).Interior.ColorIndex = 3
        ElseIf Range("B" & i).Value2 = "CORRECT" Then
            Range("A" & i & ":G" & i).Interior.ColorIndex = 4
        Else
            Range("A" & i & ":G" & i).Interior.ColorIndex = 0
        End If
        i = i + 1
    Wend
End Sub

これは、データが行1から始まることを前提としています(そうでない場合は、の開始値を変更しますi)。

于 2012-11-05T22:10:15.830 に答える
0

これは非常にローテクな答えです。ただし、(コードを使用して)必要な色でセルを強調表示したら、列のすべての値をコピーして、行自体の「フォーマット」に特別な貼り付けを行います。

それに関する問題は、それが静的であり、値が入力によって変化する場合、行の色がオフになることです。

しかし、それが1回限りのことであれば、それでうまくいくかもしれません。

これを行う場合は、評価する列が、貼り付ける行のデータと互換性のあるセル形式タイプ(つまり、「一般」、「テキスト」など)であることを確認してください。

応急修理ですが、絶対にこれを速く必要とし、一度だけ行う必要がある場合は、うまくいく可能性があります。

編集:以下のKevinの答えは、実際にはコードで解決され、評価されたセルの値が変更されても機能するように見えるため、より良い答えであると確信しています。

于 2012-11-05T22:10:38.043 に答える