プロが教える店舗&オフィスのセキュリティ対策術

以下はピボットテーブルをマッピングするマクロです。
数値0を色付けしたいのですが、空白部分も色付けしてしまいます。
よろしくお願いします。


For i = 表上端行 + 式行位置1 To 表下端行 - 式行位置3
For j = 表左端列 + 式行位置2 To 表右端列 - 式行位置4
V = Cells(i, j).Value
If V >= 300 Then
Cells(i, j).Interior.Color = RGB(255, 0, 0)
ElseIf V > 0 Then
Cells(i, j).Interior.Color = RGB(255, 0, 255)
ElseIf V <= -300 Then
Cells(i, j).Interior.Color = RGB(0, 0, 255)
ElseIf V < 0 Then
Cells(i, j).Interior.Color = RGB(0, 255, 255)


Else
Cells(i, j).Interior.Color = RGB(255, 0, 255)


End If
Next
Next

A 回答 (2件)

こんな感じです。

 

変数 V が、Integer等、数値の型であるとき

Dim V As Integer

For i = 表上端行 + 式行位置1 To 表下端行 - 式行位置3
  For j = 表左端列 + 式行位置2 To 表右端列 - 式行位置4
    If Cells(i, j).Text <> "" Then
      V = Cells(i, j).Value
      If V >= 300 Then
        Cells(i, j).Interior.Color = RGB(255, 0, 0)
      ElseIf V > 0 Then
        Cells(i, j).Interior.Color = RGB(255, 0, 255) 
      ElseIf V <= -300 Then
        Cells(i, j).Interior.Color = RGB(0, 0, 255)
      ElseIf V < 0 Then
        Cells(i, j).Interior.Color = RGB(0, 255, 255)
      Else
        Cells(i, j).Interior.Color = RGB(255, 0, 255)
      End If
    End If
  Next
Next


変数 V が、バリアント型であるとき

Dim V

For i = 表上端行 + 式行位置1 To 表下端行 - 式行位置3
  For j = 表左端列 + 式行位置2 To 表右端列 - 式行位置4
    V = Cells(i, j).Value
    If Not IsEmpty(V) Then
      If V >= 300 Then
        Cells(i, j).Interior.Color = RGB(255, 0, 0)
      ElseIf V > 0 Then
        Cells(i, j).Interior.Color = RGB(255, 0, 255) '<-- ?
      ElseIf V <= -300 Then
        Cells(i, j).Interior.Color = RGB(0, 0, 255)
      ElseIf V < 0 Then
        Cells(i, j).Interior.Color = RGB(0, 255, 255)
      Else
        Cells(i, j).Interior.Color = RGB(255, 0, 255)
      End If
    End If
  Next
Next

最後Elseの色が既に指定されている色でちょっと?? まぁ書き違いと思いますが・・・
    • good
    • 0
この回答へのお礼

早速の回答、有難うございます。
お陰で0の色付けができました。
変数の指定が漏れていましたので、整数型にして、前者の回答を使わせて頂きました。

>最後Elseの色が既に指定されている色でちょっと?? まぁ書き違いと思いますが・・・
0は色付けできなかったのでコメントで入ってました。教えての質問への転記ミスでした。
' Else
' Cells(i, j).Interior.Color = RGB(0, 255, 0)

詳しい説明、本当に有難うございました。

お礼日時:2004/07/18 08:45

V = Cells(i, j).Value


とセルの値をVに入れる前に、セルの値が空白かどうかを判定したらいかがでしょうか。
    • good
    • 0
この回答へのお礼

早速の回答、有難うございます。
IsEmpty 関数を使うのでしょうか?
ヘルプの使用例を見ても具体的にどういう式にするか分かりません。

お礼日時:2004/07/18 08:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!