VBAの条件分岐を利用したセルの色分け

このQ&Aのポイント
  • VBAを使用してセルの色分けを行いたい場合、セルに関数を入力することはできません。
  • VBAの条件分岐を利用してセルの色分けを行う場合、セルに直接数値を入力することで色分けが可能です。
  • しかし、他のデータシートの値を参照させたい場合、セルに関数を入力すると色分けが無効になってしまいます。
回答を見る
  • ベストアンサー

VBAの条件分岐を利用したセルの色分け

VBAの条件分岐を使用してセルの色分けをしようとしています。 (条件が5つあり、条件付書式では対応できないためです。) 得点による色分けを行いたいのですが、色分けを行いたいセルに関数(ただ単に「=(イコール)」です)を入れて他のセルを参照する様にしたら、色分けが無効になってしまいました。 例: 【設定した条件】  0~20点の場合  赤  21~40点の場合  橙  41~60点の場合  黄  61~80点の場合  緑  81~100点の場合 青 【現象】 VBAでプログラミング後にセルA1に数値「50」を入力したら、セルの色は「黄」になった。しかし、他のデータシートの値を参照させたいと思い、セルA1に「=データシート!B1」と入力したら、セルの色は消えてしまった。 VBAでセルの色分けをしようとする時は、セルに関数を入力してはいけないのでしょうか?条件付書式の時は問題なさそうなのですが。 お分かりになる方がいらっしゃいましたらお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

提示の式では > If Target.Column <> 3 Then Exit Sub と、C列に入力されたら、としているわけですから、 >セルA1に数値「50」を入力したら、セルの色は「黄」になった。   このようになるわけはありえません。 勘違いしてませんか?   ま、これはタイプミスであろうと推測できますから、置いといて。   既出の回答にもあるように、 セルに入れた式の結果で、セルの値が変化したも Changeイベントは発生しません。 よって、このChangeイベントは、Sheet1ではなくて 参照されているセルのあるSheetのイベントでないといけません。   Sheet1のA列(例えば、A1~)に A1 =Sheet2!B1 A2 =Sheet2!B2 A3 =Sheet2!B3 以下適当な行まで 上記の式が入っているとした場合 Sheet2のB列に入力があったら(Sheet2のChangeイベント) Sheet1のA列を塗りつぶす、というコードになります。   よって以下をSheet2にコピペして実行 '-------Sheet2 のchangeイベント ---------------- Private Sub Worksheet_Change(ByVal target As Range)  Dim myColor As Integer  If target.Count > 1 Then Exit Sub  If target.Column <> 2 Then Exit Sub  '●B列  Select Case target.Value    Case 0 To 19      myColor = 3 '赤色    Case 20 To 39      myColor = 45 'オレンジ色    Case 40 To 59      myColor = 6 '黄色    Case 60 To 79      myColor = 4 '緑色    Case 80 To 100      myColor = 5 '青色    Case Else      myColor = xlNone  End Select Sheets("Sheet1").Cells(Target.Row, "A").Interior.ColorIndex = myColor End Sub '----------------------------------------------- 以上ここまで。

aimo0314
質問者

お礼

ありがとうございました。 解決致しました。 的確なご回答に感謝致します。

その他の回答 (3)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

>セルA1に「=データシート!B1」と入力したら、セルの色は消えてしまった。 色が消えたのでは無く、参照先の値が色の設定範囲を超えたので無色に設定されただけでしょう。 100より大きいかマイナス値。 また、Worksheet_Changeイベントでは該当セルが書き換えられた時に動作するイベントです。 式の参照先の値が書き換わった場合は検知出来ないので、このマクロは動作しません。

aimo0314
質問者

お礼

回答頂きましてありがとうございました。

noname#110201
noname#110201
回答No.2

そうですねぇ、No1の方が書かれているように、これでは全然要領を得ません。 ただ、一度黄色になったセルの色が消えるのですから、そのコードはきちんと走っているのだと思います。 セルの色がなくなるか白になる場合があるのではないですか?

aimo0314
質問者

補足

すみませんでした。 コードは下記の通りとなります。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim myColor As Integer If Target.Count > 1 Then Exit Sub If Target.Column <> 3 Then Exit Sub Select Case Target.Value Case 0 To 19 myColor = 3 '赤色 Case 20 To 39 myColor = 45 'オレンジ色 Case 40 To 59 myColor = 6 '黄色 Case 60 To 79 myColor = 4 '緑色 Case 80 To 100 myColor = 5 '青色 Case Else myColor = xlNone End Select Target.Interior.ColorIndex = myColor End Sub よろしくお願いいたします。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

コードくらいは提示しましょう。

関連するQ&A

  • 【VBA】条件を満たしたセルを塗り潰し

    VBAで下記のようにしたいのですが、どのようにすれば良いでしょうか?      A 1    100 2    110 3    120 4    130 5    140 6    150 7    160 8    170 9    180 【条件】この場合、A1:A9の範囲内でB1の値を超える値が入力されているセルを黄色で塗りつぶす ※前提として、B1に150と入力されているとします 上記のようなVBAを作成したいと思っています。 この場合、塗りつぶしの対象となるセルはA7,A8,A9となります。 条件付き書式で対応できるのですが、Excel2007で作成したファイルをExcel2003で開くと条件付き書式が反映しませんでしたので、VBAで対応しようと思いました。 宜しくお願いします。

  • Excel条件付書式/他のセルの条件での色分け

    こんにちは。よろしくお願いします。 条件付書式の設定で困っています。 Excel2010です。 A1セルに「△」を入力すると、 △が入った1行がすべてグレーになるように設定したしたく、 1行目のセルに 「セルの値」が「次の値に等しい」「=A1="△"」 として、あとは書式の色をグレーに設定してみたのですが、 A1に△を入れてみても一向に色が変わりません。 どのように設定すれば、他のセルで入力された条件に対して 色分けすることができるでしょうか? ちなみにA1セル自体に設定して、△を入力すると A1だけはグレーに変わりました。 初歩的な質問ですみません。ご指導ください!

  • EXCEL2003 条件付書式が狂ってくる

    条件付書式は、見ためにどのセルに入っているのかわからないというのと、複数の条件付書式が入ると、なぜかその前に決めていた条件付書式が消えてしまっているということがあって、なかなか不便に思っています。(やりかたが悪いのかもと思うのですが) それで、VBAの entireculumn というのを見つけたのですが、 これで対応できるでしょうか? やりたい事は、 1 2*--------------------------- 3*--------------------------- 4 5 6*--------------------------- 7*--------------------------- 上記のように、「*」をつけた行にだけ、行全体に色をつけておく、 というのを条件付書式で、 「数式が」「=$A1="*"」 としたもので、その設定をしているシートに、横にずっと、いろんな関数を入れていってます。 ですが、関数を入れたり、そのプロセスで列挿入などすると、 色がずれてしまうのです。 その回避策として、VBAで最初に色の設定をしておけないでしょうか? 「*がある行だけに色をつける。」 よろしくお願いします。

  • excel 参照しているセルに色がついていたら、返すセルにも色もつける

    excelの詳しい方、ぜひ教えてください! Sheet1にあるデータを、計算式によってSheet2に参照させていますが、Sheet1のセルの色までは参照する事ができません。 計算式はいたって簡単で、例えばSheet1のA1を参照している時は、Sheet2のセルに =Sheet1!$A$1 と計算式を入力しています。 条件付き書式や関数も考えたのですが、 ”もし、参照しているセルに色がついていたら、返すセルにも色もつける” をどうすれば出来るのかわかりません。 どうか、わかる方ぜひ教えてください。お願いします!!

  • Excel VBA 条件付書式の条件満たすセル取得

    Excel2010のVBAで条件付書式の条件を満たすセルの番地を取得したい 具体的には、 Excel2010のあるシートのあるセル範囲(例えばA1~XFD1048576)に 条件付き書式が付けてあって、 (例えば、数式の条件が満たされたら背景色を赤色にするなど) この条件を満たすセルに指定した書式が付けられて表示されています。 この状態で、VBAで、この条件を満たしたセルの番地を、 順番に取得したいのですが、どのように記述すればよいでしょうか。 【追記】 数式をすべてのセルに入れて検出する方法や セルをひとつずつ数式に当てはめてみていく方法は、 セルが膨大なため容量的・時間的にNGです。 このため、条件付き書式で回避しています。 条件付き書式の判定結果である書式(この場合でしたら背景色が赤色) で判断する必要があります。(書式は背景色が赤色でなくてもいいです) よく分かりませんが、検索の中の書式で指定しても、 この条件付き書式の判定結果の書式はヒットしませんでした。

  • VBAでセルを条件数う塗りつぶしたい

    特定のセル文字(記号)を入力すると、その横のセルに条件分の数セルを塗りつぶしたいです。 条件付き書式ではなんとかできたのですが、できればVBAでできればと思っています。 たとえば、◎なら右に3つ黄色に △なら右に2つ青 ○なら右に1ピンク ☆なら、表の端まで赤に。 すべて、表が終われば、塗りつぶしはなしにしたいです。 どうか、よろしくお願いします。

  • Excelの条件付き書式について

    Excelの条件付書式について教えてください。 次のようなことをしたいです。 (1)10個のセルに次のような条件付書式を設定します。  ・条件1:セルの値が5以上だったらセルの塗りつぶし(パターン)を青色にする。  ・条件2:セルの値が5未満だったらセルの塗りつぶし(パターン)を赤色にする。 (2)別の1つのセルで上の10個のセルを監視して  すべてのセルが青色だったら"PASS"と表示する。  ひとつでも赤色のセルがあったら"FAIL"と表示する。 VBAを使用して、条件付書式が設定されたセルを参照し、 どちらの条件付書式が適用されているのか調べられるのなら、 それでもかまいません。 条件付書式でセルの色(パターン)を設定した場合、 セルの.Interior.ColorIndex 及び PatternColorを参照しても、 塗りつぶしはされてないという扱いになっているようです。 なにか方法があるでしょうか?

  • エクセルVBA 条件にあうときセルを塗りつぶすには?

    エクセルVBA 条件にあうときセルを塗りつぶすには? エクセルVBAについて教えてください。 _________A 列 _________B 列_________C列_________D列 -------------------------------------------- 1行| 基準値_________ 5_____________1____________8 2行| りんご____________1_____________9____________0 3行| みかん___________12___________5____________3 4行| ぶどう____________15___________7____________8 5行| バナナ____________3_____________1____________4 上図のようにデータがあります。 (実物は列行共に膨大です。また条件を4つ以上つける予定なので条件付書式は使えません) 各列の基準値に対して、セルの増減が、0以下のときに黄色に、5から8のとき大きくなるときに赤、9以上のときに青にセルの色を塗りつぶしたいです。 どのようにすればよいでしょうか? B列の場合、基準値が5です。 B2のセルの場合、基準値5と1(B2セル)の増減は-4です。 増減が0以下のときは黄色に、増減が5から8のときは赤に、増減が9以上のときに青にするので、このときは黄色に塗りつぶします。 B3のセルの場合、基準値5と12(B3セル)の増減は7です。 増減が5から8のとき赤に塗りつぶすので、このセルは赤に塗りつぶします。 B4のセルの場合、基準値5と15(B4セル)の増減は10です。 増減が9以上のとき青色に塗りつぶすので、このセルは青色に塗りつぶします。 C2のセルの場合は、C列の基準値は1(C1セル)です。 基準値1と9(C2のセル)の増減は8です。 増減が5から8のとき赤に塗りつぶすので、このセルは赤に塗りつぶします。 よろしくお願いいたします。

  • Excelで隣のセルを参照して色分け

    こんにちは。 Excelの表で、例えば会社名がA列のセルにあって、 B列に営業担当が入力されているとします。 A列    B列 ◎会社  山田 △会社  鈴木 A列の会社名のセルををB列の担当を参照して、山田なら黄色、鈴木なら青 の様に書式設定をしたいのですが、どの様に設定したら良いでしょうか? 条件付書式だとそのセルのみを参照ですので、隣のセルを参照してと いう設定は出来ますか? よろしくお願いします。

  • エクセルのセルを条件により色分けしたい

    B列の値(条件)によりA列のセルの色を5色に色分けしたい。 "A1"~"A100" "B1=1" "B2=2" "B3=5"~"B100=4" B列の値によりA列のセルの色を塗りわけしたい。 3色までなら条件書式で塗りわけできるのですが。 よろしくお願いします。

専門家に質問してみよう