0

以前のセルに手動で入力した情報に基づいて、セルの背景色を変更するコードを Excel 2003 に書き込もうとしています。これは、トップ 10 の顧客の顧客満足度スコアを表示するためのものです。

以下にこのコードを書きましたが、セルの範囲ではなく、1 つのセルに対してのみ機能させる方法を知っています。私はこれを使用することに関しては素人なので、助けていただければ幸いです。

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("B1").Value < Range("A1").Value Then Range("B1").Interior.ColorIndex = 3
If Range("B1").Value = Range("A1").Value Then Range("B1").Interior.ColorIndex = 6
If Range("B1").Value > Range("A1").Value Then Range("B1").Interior.ColorIndex = 45
If Range("B1").Value = 1 Then Range("B1").Interior.ColorIndex = 4
End Sub

このコードは 1 つのセルに対しては完全に機能しますが、スプレッドシートのさまざまな領域にあるセル範囲に対してこれを行う必要があります

列 C26 から C35 までの情報に基づいて、セル F26 から F35 までのコードで色を変更したいと思います。これは 12 か月を超えるため、コードでセル I26 の色を F26 の情報から I35 に変更し、F35 などに変更したいと考えています。

これが非常にばかげた質問のように聞こえる場合は申し訳ありませんが、私はアマチュアであり、これについて手がかりのある誰かからの助けを探しています

4

4 に答える 4

1

OK、詳細な解決策は次のとおりです。

列 3 は非表示にする必要があります。これは、sign() 数式関数を使用するだけです: =SIGN(B2-A2) 列のデフォルトの背景色は、sign=1 の場合に表示する色であることに注意してください。

これは、シートがどのように見えるかです

そして、これらは条件付き書式のルールです。セル B2 に対してのみ実行し、残りの列の書式を設定しました。sign=1 のルール、sign=-1 のルール、B2 = 1 のルール。

これらはあなたの3つのルールです

于 2012-08-03T13:30:01.723 に答える
0

計算された値 (差の符号など) を含む非表示の列を使用し、その列に条件付き書式設定を使用することをお勧めします。Martin は正しいため、Excel の速度が低下します。

ただし、そのイベント ハンドラーで本当にそれを行いたい場合、そのルーチンは、変更された範囲であるパラメーターを受け取ります。行または列を反復処理できます。

于 2012-07-31T11:55:48.933 に答える
0

Worksheet_Changeイベントで本当にやる必要があるの?これにより、動作が少し遅くなります。

とにかく、範囲に対してこのようなコードを書く方法はありません。範囲内のセルを1つずつ反復処理する必要があります。たとえば、次のようにします。

Dim r As Range
Dim ws As Worksheet
Set ws = ActiveSheet
For Each r In ws.Range("F26:F35")
    If r.Value < ws.Cells(r.Row, 3) Then r.Interior.ColorIndex = 3  '3 -- Column C
    '...
Next
于 2012-07-31T11:53:18.140 に答える
0
Private Sub Worksheet_Change(ByVal Target As Range)

Dim oCell           As Range

For Each oCell In Target
    Call Input_Ranges(oCell, Range("F26:F35"), -3)
    Call Input_Ranges(oCell, Range("I26:I35"), -3)
    Call Input_Ranges(oCell, Range("L26:L35"), -3)
    Call Input_Ranges(oCell, Range("O26:O35"), -13)
Next oCell

End Sub

Public Sub Input_Ranges(oCell As Range, oRange As Range, iOffset As Integer)

    If Not Intersect(oCell, oRange) Is Nothing Then
        If oCell < oCell.Offset(0, iOffset) Then
             oCell.Interior.ColorIndex = 3
         ElseIf oCell > oCell.Offset(0, iOffset) Then
             oCell.Interior.ColorIndex = 45
         ElseIf oCell = oCell.Offset(0, iOffset) Then
             oCell.Interior.ColorIndex = 6
         ElseIf oCell = 1 Then
             oCell.Interior.ColorIndex = 4
         End If
    End If

End Sub

リクエスト (コメント) に基づいて、コードをもう一度修正しました。

簡単な説明:
ターゲットは、変更され、イベントをトリガーする範囲です。
Intersect メソッドは、Target が定義された範囲内にあるかどうかを確認します。
Offset は、変更されたターゲット範囲から左に 3 番目の列をチェックします。
これを任意の列に変更できます。

于 2012-07-31T12:24:08.360 に答える