1

StackOverflow と VBA は初めてです。私は、ゼロから VBA でコードを作成することを除いて、Excel のすべての側面のエキスパートです。

私がやろうとしているのは、特定の用語が含まれている場合、インデックスからセルの内部に色を適用することです。ここに私が持っているものがあります:

Sub ConditionalFormatting()

Do Until ActiveCell = ""

If ActiveCell = "STAR DISTRICT" Then
ActiveCell.Interior.ColorIndex = 50
ElseIf ActiveCell = "STAR SCHOOL" Then
ActiveCell.Interior.ColorIndex = 50
ElseIf ActiveCell = "HIGH PERFORMING" Then
ActiveCell.Interior.ColorIndex = 43
ElseIf ActiveCell = "SUCCESSFUL" Then
ActiveCell.Interior.ColorIndex = 34
ElseIf ActiveCell = "ACADEMIC WATCH" Then
ActiveCell.Interior.ColorIndex = 38
ElseIf ActiveCell = "LOW PERFORMING" Then
ActiveCell.Interior.ColorIndex = 22
ElseIf ActiveCell = "AT RISK OF FAILING" Then
ActiveCell.Interior.ColorIndex = 18
ElseIf ActiveCell = "FAILING" Then
ActiveCell.Interior.ColorIndex = 3
Else: ActiveCell.Interior.ColorIndex = 1
End If

ActiveCell.Offset(1, 0).Select

Loop

End Sub

オプションは次のとおりです。 スター地区または学校、高パフォーマンス、成功、アカデミック ウォッチ、低パフォーマンス、失敗のリスクあり、失敗

このコードは 1 つの列 (下の 2 つの用語を除く) で機能しますが、ワークシートの他の場所では機能しません。他の場所で試してみると、セルに何が含まれていても、すべてのセルが黒 (または ColorIndex = 1) になります。

どんな助けでも大歓迎です。

トレントン

4

2 に答える 2

1

Excelスプレッドシートに入力データが表示されていない場合、これが正しい理由を正確に言うことは困難です。

This code works for one column (except for the bottom two terms) but it will not work anywhere else in the worksheet. When I try it anywhere else, all of the Cells turn Black (or ColorIndex = 1) no matter what the cell contains.

ただし、VBAのデフォルトの文字列比較はバイナリ比較です。つまり、大文字と小文字が区別ActiveCellされ、さまざまな大文字の文字列と比較します。Excelスプレッドシートに大文字以外のものが含まれている場合、すべてのテストが失敗します。

あなたは2つのことのうちの1つをする必要があります。Option Compare Textまず、コードシートの上部に追加できます。これにより、すべての比較が比較ではTextなくに変更されBinaryます。

ActiveCellまたは、それぞれを関数でラップUCASEして、比較を実行する前にアクティブセルの値を大文字にすることもできます。

If UCase(ActiveCell) = "STAR DISTRICT" Then
...
ElseIf UCase(ActiveCell) = "STAR SCHOOL" Then
...
...
...
End If

編集:

コメントで述べたように、問題はセル値の末尾のスペースでした。適切なコード修正は、関​​数をラップActiveCellするTrimことです。また、次のように関数を相互にネストできます。

If UCase(Trim(ActiveCell)) = "STAR DISTRICT" Then
...
ElseIf UCase(Trim(ActiveCell)) = "STAR SCHOOL" Then
...
...
...
End If

これにより、の値から末尾と先頭のスペースActiveCellが削除され、フラグ付きの値と比較するために大文字になります。

于 2012-06-27T17:09:48.587 に答える
1

このコードを適用する範囲がわかりません。あなたのコードで私が見たものから、VBAにこの「フォーマット」をActiveCellに適用してから、下の別のセルを選択し、「条件付きフォーマット」手順を繰り返してから、別のセルを選択し(を使用ActiveCell.Offset(1, 0).Select)、最初の空のセルに遭遇するまで繰り返します。細胞。

このため、コードは基本的に機能するはずです(試してみました)、条件に応じて、処理するセルの内部カラーインデックスを変更します。このマクロは、ActiveCellから最後の空でないセルまでの 1 つの列のセルに適用されるためです。 cell 2 つの列で使用する方法がわかりません。

このマクロが任意のセルを ColorIndex 1 に変える理由は、「条件リスト」の一部ではないテキストが含まれているためだけです。また、大文字と小文字は異なる文字であるため、セル内の値はコード内の単語/文字列と大文字/小文字が正確に一致する必要があることに注意してください。または、単語内のすべての文字を大文字に変換するようにコードを拡張することもできます (UCase例えば)

問題の書式設定を選択した範囲内のすべてのセルに適用するこのコードを試すことができます。

Sub ConditionalInteriorColor()

Dim r As Range
Dim cell As Range
Dim index As Integer
Dim word As String

    'Set the targeted range to be the selected range
Set r = Selection

For Each cell In r

    word = UCase(cell.Value)

    'Choose index
    Select Case word
        Case "STAR DISTRICT"
            index = 50
        Case "STAR SCHOOL"
            index = 50
        Case "HIGH PERFORMING"
             index = 43
        Case "SUCCESSFUL"
             index = 39
        Case "ACADEMIC WATCH"
            index = 38
        Case "LOW PERFORMING"
             index = 22
        Case "AT RISK OF FAILING"
            index = 20
        Case "FAILING"
            index = 3
        Case Else
            index = 3
    End Select
    'Color interior of cell
    cell.Interior.ColorIndex = index

Next

End Sub
于 2012-06-27T17:15:10.287 に答える