- ベストアンサー
VBAでセルに色付けは?
教えてください エクセルの条件付き書式では下記の 事ができません。 VBAでセルに色をつける 方法を教えて欲しいのですが。 例 セルA1 に 10 セルB1 に 入れた数字が 10以下なら 青 11から20なら 赤 21から25なら 黄 26以上なら ピンク と言う感じで B1 のセルに その数字と色を表示したいのですが 最終的には8色表示にしたいです。 よろしくお願いします WINXP EXCLは2002です
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
補足ありがとうございます。長くなるので、あきらめても良いが まだ良くわかりません。 >セルAの室温とセルBに入れた温度を比較してセルBに数字と色をつけたいのです 「数字と色を」の「数字と」の意味が、「数字をセルにセット」=代入する意味なら 「セルBに数字があってAと比較して、セルBに数字をセットする」 はおかしくありませんか。 文字とセル背景色に色をつけたいのなら、 Font.Color nterior.Color と設定を、プログラムでは2行入れれば済むことです。 ただその場合セル色と文字は別色にしないとならず、質問には書いてない。 設定するセルの色(A列+B列ですか)は、当初質問値のBの値の段階でよいらしいですね。 (質問書き直し) B列の値にしたがって 10以下なら 青 11から20なら 赤 21から25なら 黄 26以上なら ピンク の色を、A列とB列のセルの文字と、A、B列の背景色を設定したい。 ーーーー 下記はセル背景色だけ設定してます。 Sub test01() d = Range("B65536").End(xlUp).Row For i = 2 To d Select Case Cells(i, "B").Value Case Is <= 10 Cells(i, "A").Interior.Color = vbBlue Cells(i, "B").Interior.Color = vbBlue Case 11 To 20 Cells(i, "A").Interior.Color = vbRed Cells(i, "B").Interior.Color = vbRed Case 21 To 25 Cells(i, "A").Interior.Color = vbYellow Cells(i, "B").Interior.Color = vbYellow Case Else Cells(i, "A").Interior.Color = vbCyan Cells(i, "B").Interior.Color = vbCyan End Select Next i End Sub ただしVBA実行後に値を変えても、再実行しないと反映しない仕組みです。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
#3です。補足ありがとうございます。しかし 「セルA1にいれた数字に対して (0~25まで変ります例では10にしてます)B1に入れた数字を8段階の条件で色分けしたかったのです」は、読んでもなお、よくわかりません。 A1とB1の値を関連させて、B1の書式を考えるのか 関係なくB1の値だけ考えてB1の書式を考えるのか それ以外か(その場合はないよう説明を) 補足してください。 実例数例をを上げてもらうのが良いかも知れません。 A1の値 ?? B1の値 ?? のとき書式は ???
お礼
早々の回答ありがとうございます。自分ではわかっているので 雑な説明になってしまっているようですね、また説明も若干 違っていたようです。すみません 具体的にはセルAには、現在の室内の温度が入ります セルBにはある物体の発熱温度がはいります セルAの室温とセルBに入れた温度を比較してセルBに数字と 色をつけたいのです。色分けの範囲は最初の質問の設定で 行うので8段階になるため8色必要になります 測定点が20箇所あるので色分けで見えるようにしたい 例 セルA1室温25℃ セルB1 40℃ (40-25=15赤) セルC1 55℃ (49-25=24黄色) 。。。こんな感じで理解いただけたでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
私もセルA1とセルB1の(1)条件として取り扱うのか(2)その関係は について、判りません。至急細くしてください。 ーーーーーー >エクセルの条件付き書式では下記の事ができません。 これは条件付き書式が、3色までということを意識したものですか。 そうであれば、セル範囲にはできないが、下記のように、VBAなら FormattConditionsを使うことができるので、 、細かく言えば、「できないとは言えない」と思います。条件付き書式をDELETE して設定が瞬時に行える(初めからシート全体のケースを設定して置かなくて良いからです。 下記コードのMsgBox 3つは確認用に入れたもので、用済み後ははずします。 質問と同じ値の区画で、セルに色をつけるものです。どのセルでも 全セル対象にしてます。 Private Sub Worksheet_Change(ByVal Target As Range) v = Array(0, 10, 20, 25, 999) c = Array(0, 4, 6, 7, 8) For i = 0 To UBound(v) If Target >= v(i) Then Else f2 = v(i) MsgBox v(i) f1 = v(i - 1) MsgBox v(i - 1) MsgBox c(i) Exit For End If Next i Target.FormatConditions.Delete Target.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:=f1, Formula2:=f2 Target.FormatConditions(1).Interior.ColorIndex = c(i) End Sub ただ、普通は#2のご回答のようにして、こんな馬鹿な回りくどい方法はやらないと思いますが。 ーーーーーー 色とそのコードを選ぶとき Sub test01() For i = 1 To 56 Cells(i, "B").Interior.ColorIndex = i Next i End Sub をやって、セル(B列)に色見本を出し、良さそうなのを選んでください。セル色の場合、下の字が見えなくならないよう選ぶ必要がありますから。 vbXXX式は十数種あったと思いますが、濃すぎてセル色には向かない色があって、残り少なくなるので、ColorIndexの50数種から選んだほうが良いのではと思います。Fontなら逆に薄すぎて、区別しにくい色があります。8色でも選定に苦労するでしょう。
お礼
ありがとうございます。 説明が足りなくてすみません。 セルA1にいれた数字に対して (0~25まで変ります例では10にしてます) B1に入れた数字を8段階の条件で色分けしたかったのです セルはB1としていますが、実際は20セルぐらい使います。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Then Select Case Target.Value Case Is <= 10 Target.Interior.Color = vbBlue Case 11 To 20 Target.Interior.Color = vbRed Case 21 To 25 Target.Interior.Color = vbYellow Case Else Target.Interior.Color = RGB(&HFF, &HC0, &HCB) 'Pink End Select End If End Sub
お礼
ありがとうございます。 BVAはあまり自信がないので 一度やってみます。
- chukenkenkou
- ベストアンサー率43% (833/1926)
質問の意味が分からないのですが? (1)セルA1とB1の関係は? (2)セルA1に入れた数字で、セルBに作用させたいということですか? セルB1にセルA1と同じ数字を入れて、文字の色を変えたいということですか? それなら、条件付き書式でできますが?
お礼
説明が足りなくてすみません。 セルA1にいれた数字に対して (0~25まで変ります例では10にしてます) B1に入れた数字を8段階の条件で色分けしたかったのです セルはB1としていますが、実際は20セルぐらい使います。
お礼
ややこしい質問に回答いただき ありがとうございます。 どうも、いろいろ質問に抜けがあるみたいでまことに すみません。 もうすこし質問文を整理してから、また再度 質問 したいと思います。 お付き合いほんとうにありがとう ございました。次回お目にとまりましたらまた ご指導よろしくお願いします