• ベストアンサー

条件付書式のVBA

条件付書式のVBAについて質問させてください。 A1:A100に「晴れ」「曇り」「雨」「台風」「不明」と入力するとします、するとその行のいくつかセルに色をつけたいです。 たとえば、A1に「晴れ」と入力されたらB1、C1、(D1とばして)E1、F1・・・に色がつく。 できればVBAの式を教えていただけると大変助かります。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.8

ANo.7です。 >入力列がA列ではなくてL列になってしまったのですが、、、(泣) >If .Column <> 1 Then Exit Subを >If .Column <> 12 Then Exit Subにしてみたりしたのですが。。。(違ってますね。。。) 方法はあってますよ。 ただし、L列に対して元々の【B1、C1、(D1とばして)E1、F1】が変更ないのであれば、 With .Range("B1:C1,E1:F1") 'E列以降はどこまで? だとL列を基準に右列を塗りつぶしますので、 With Range("B1:C1,E1:F1").Offset(.Row - 1) 'E列以降はどこまで? に変更して下さい。

miamia81
質問者

お礼

出来ました!!本当に本当にお手を煩わせてしまって申し訳ございませんでした。 本当に助かりました。 少しでも自分でも勉強して行こうと思いますがまた何かありましたらよろしくお願いします!

その他の回答 (7)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.7

ANo.6です。 >やはり何度設定しても、A列に「晴れ」と記入しても色は変わらず、 >マクロをあえて手で実行しないと指定のセルに色がつかないようです。。。 標準モジュールですから上記動作が正しいです。 もしかしたら、シートモジュールのイベントのことを言われているのでしょうか? データを入力したいシートタブ(左下のシート名)を右クリック。 コードの表示をクリック。 表示されたシートモジュールに以下を貼り付ける。 Private Sub Worksheet_Change(ByVal Target As Range)  With Target       If .Column <> 1 Then Exit Sub       If .Cells.Count > 1 Then Exit Sub       With .Range("B1:C1,E1:F1") 'E列以降はどこまで?            Select Case Target.Value                   Case "晴れ"                        .Interior.ColorIndex = 5 '仮に青                   Case "曇り"                        .Interior.ColorIndex = 8 '仮に水色                   Case "雨"                   Case "台風"                   Case "不明"                   Case Else                        .Interior.ColorIndex = 0 '上記以外は色なし           End Select       End With  End With End Sub ではどうでしょうか。

miamia81
質問者

補足

ありがとうございます!!入力するたびに変わりました!! やっぱり私の説明不足でしたね。。。大変お手数をおかけいたしまして申し訳ございません! ただ!! 迷惑をかけついでにもうひとつだけお願いします、、、 入力列がA列ではなくてL列になってしまったのですが、、、(泣) If .Column <> 1 Then Exit Subを If .Column <> 12 Then Exit Subにしてみたりしたのですが。。。(違ってますね。。。) ご教授いただけますか。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.6

ANo.5です。 >確認させてください。 >コードを張るのは、Module1でいいのですよね? はい。標準モジュールに貼って下さい。 動かないと言う点では、あとはアクティブなシートが 本来データのあるシートでない場合にも起こりえます。

miamia81
質問者

補足

やはり何度設定しても、A列に「晴れ」と記入しても色は変わらず、マクロをあえて手で実行しないと指定のセルに色がつかないようです。。。 何度もお手数をおかけして申し訳ございませんでした。。。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

ANo.3です。 >新規のbookに試すと動くのですが、実際動かしたいbookでは動作しないのですが、何か注意点はありますか? 特にないはずです。 セルに入力されている「晴れ」「曇り」「雨」「台風」「不明」に、 無駄な空白等があれば可能性はあります。 その場合、 >Select Case r.Value を Select Case Trim(r.Value) としてみて下さい。

miamia81
質問者

補足

たびたび本当に申し訳ございません!! VB画面の再生ボタン「Sub/ユーザーフォームの実行」を押すと動作するようです。 私の知識不足で動かないだけだとは思うのですが、、、 確認させてください。 コードを張るのは、Module1でいいのですよね? 何度も大変お手数をおかけしますがお願いします。。。

  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.4

No.2です。 補足確認しました。 それならばNo.1さんの解答で解決できるかと思います。 (非常にスマートなコードで私も勉強になりました。)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

ANo.1です。 >対象セルをあとでA1でなくなってしまった場合は有効でなくなってしまいませんでしょうか? >出来ればシート全体で、その言葉が入力されたときにその行の指定の縦列が塗りつぶせると助かります。 シート全体とは、判断対象がA列以外と言う事でしょうか? そうではなくA列に判断すべき項目があれば、問題ないですけど。 (試してません?) > r.Range("B1:C1,E1:F1") rはA1からA列の最終行までを順次取得します。 r.Range("B1:C1,E1:F1")はrをセルA1と見立て、 その時のB1・C1・E1・F1を対象としています。 すなわち、rがA10であればB10・C10・E10・F10が 塗りつぶしの対象となります。

miamia81
質問者

補足

たびたび申し訳ございません。。 新規のbookに試すと動くのですが、実際動かしたいbookでは動作しないのですが、何か注意点はありますか?

  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.2

ちょっと確認です。 希望の処理は、 1. A行の値によって、パターンに従って同列のB行以降のセルを塗りつぶす。 2. パターンはA行の値によって5種類ある。 3. どの値でも塗りつぶす色は同じ?? ということで、 例えば  A1=晴れ B1 C1 D1 F1 のセルを塗りつぶす A2=雨  C2 E2 G2 H2 のセルを塗りつぶす A3=晴れ B3 C3 D3 F3 のセルを塗りつぶす というような処理だと解釈していいのでしょうか?

miamia81
質問者

補足

説明不足で申し訳ございません。 塗りつぶしの行BCEF等は、固定のつもりです。 A1="晴れ"ならば、B2、C2、E2、F2・・・を青色、 A2="曇り"ならば、B2、C2、E2、F2・・・を赤色、 A3="雨"ならば、B2、C2、E2、F2・・・を黄色、 A4="晴れ"ならば、B2、C2、E2、F2・・・を青色。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

例えばこんな感じ。 Sub test() Dim r As Range For Each r In Range("A1", Range("A" & Rows.Count).End(xlUp)) With r.Range("B1:C1,E1:F1") 'E列以降はどこまで? Select Case r.Value Case "晴れ" .Interior.ColorIndex = 5 '仮に青 Case "曇り" .Interior.ColorIndex = 8 '仮に水色 Case "雨" Case "台風" Case "不明" End Select End With Next End Sub 「雨」「台風」「不明」については同様に .Interior.ColorIndex = 色番号 色番号については http://www.relief.jp/itnote/archives/000482.php ご参考に。

miamia81
質問者

補足

対象セルをあとでA1でなくなってしまった場合は有効でなくなってしまいませんでしょうか? 出来ればシート全体で、その言葉が入力されたときにその行の指定の縦列が塗りつぶせると助かります。 申し訳ございませんがよろしくお願いします。

関連するQ&A

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

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

  • VBA 条件付書式の条件にあっているか

    答えてねっとがなくなってしまったのですね、でこちらにたどり着きました。 ユーザー入力したアンケート(業者が作成)から集計表を作成しています。 A1 男性     B1 年齢 A2 ///////// A3 A4 /////// A1の性別B1の年齢から判断して条件付書式によりA3のみに答えを入力するよう白抜きになりA2/A4はもともとのフォーマットが網掛けになっています。 ただその際にA2/A4は網掛けになっているのですが場合によって回答が残っていることがあるので、集計表が正しくなくなってしまいます。 集計表に情報を取ってくる際に、条件付書式がTrueの場合、または書式 が白抜きになっている場合で条件分岐したいのですが、方法ご存知だったら教えてください。 方法としては下記のようになるかと考えています。 ・セルに条件付書式がひとつ以上設定されている。(今回は条件は一つです) ・その条件が、値か式か。(今回は式です) ・式であったら、その式をVBA上で実行してTrueかFalseか判断する  (または書式のタイプを取得する) ですが、書ける知識が乏しくて・・・ VBA本にもFormatConditionsは書いてなかったです。 よろしくお願いします。

  • VBA 条件付書式の条件にあっているか

    条件付書式の数式に該当したセルの内容のみ拾ってくるVBAの作成を 試みています。 アンケート用紙は以下のようになっています。 A1 男性     B1 年齢 A2 ///////// A3 A4 /////// A1の性別B1の年齢から判断して条件付書式下記のよう式が入っています。  (A2  =COUNTIF($A$1,"女*")>=1   A3  =COUNTIF($A$1,"男*")>=1   A4  =COUNTIF($A$1,"*男*")>+COUNTIF($B$1,"2*")>=1  ) ただその際にA2/A4は網掛けになっているのですが場合によって前回の 回答を消去せずにアンケート表が作成されていることがあり、網掛け部分の 数値も拾ってきてしまい集計表が正しくなくなってしまいます。 集計表に情報を取ってくる際に、条件付書式がTrueの場合、または書式 が白抜きになっている場合で条件分岐したいので教えてください。 方法としては下記のようになるかと考えています。 ・セルに条件付書式がひとつ以上設定されている。(今回は条件は一つです) ・その条件が、値か式か。(今回は式です) ・式であったら、その式をVBA上で実行してTrueかFalseか判断する  (または書式のタイプを取得する) ですが、書ける知識が乏しくて・・・ よろしくお願いします。

  • Excel条件付書式

    Excelで表を作成しています。 A列~F列まで文字や数値が入っており、F列に順位を入れています。 F列の順位が上位10位までの行(たとえばA10~F10まで)のセルに色をつけたいのですが、条件付書式を使って、どのように設定すればよろしいでしょうか?

  • エクセル 条件付書式について

    エクセルの条件付書式について、お尋ねします。 A1のセルには、背景と同じ色で文字が入力されていて、そこに文字を上書きすると、A1のセルの文字の色が黒に変更されるようにしました。 その後B1のセルに文字を入力すると、A1からE1までのセルの背景がグレーになるようにしたかったのですが、A1のセルだけが、塗りつぶされませんでした。 説明が十分かどうかわからないのですが、質問としては、このようなことが、条件付書式で可能かどうか、可能ならば、その方法を教えていただけますでしょうか。 どうぞよろしくお願いいたします。

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

    B1のセルが赤く塗りつぶされ時点で、A1のセルも自動的に赤く 塗りつぶしたい場合はどのような式を作ったら良いでしょうか? 何故式を使うかというと、A1のセルには既に条件付書式が入っ ているせいか一緒に塗りつぶそうとしても色が変化しないんです。 そもそも「セルが赤くなったら」という式はどの様にしたら良い でしょうか?非常に困っています。

  • Excelの条件付書式を他の行にコピーしたい

    セルA1がYesだったら、1行灰色にするという条件付書式を設定したのですが、この条件付書式を全ての行にコピーしたいのですが、うまく出来ません。 いろいろ調べてコピーしてみたはいいのですが、2行目はセルA2がYesであれば、その行が灰色になるはずなのですが、セルA1がYesだとすべて灰色になってしまうようになってしまいました。 どうやったら条件付書式のみコピー出来るのでしょうか? どなたかご教授ください。 よろしくお願いします。

  • 条件付書式と相対参照

    条件付書式についての質問です。 たとえば、A1:D5の範囲を選択し、書式→条件付書式→数式 A1=1 と入力します。 つまりA1に1と入力されたら、選択した範囲のセルに色がつくようにという指示です。 ところが、このA1を絶対参照にすると確かに選択範囲に色はつくのですが、これを相対参照にするとA1のセルしか色がつきません。 また $A1 と、A$1 にしても、色のつく範囲が微妙に変わります。 これはいったいなぜなんでしょう? A1 に入力したら、選択範囲のセルの色が変わるようにすればどうすればいいのでしょう? この A1 は、ほかのセルにコピーしていくので相対参照にしたいです。

  • エクセルで条件付書式設定を解除して書式設定を残す方

    説明がしづらく、うまく伝えられればいいのですが。 条件付書式でセルに色を付けたりしています。  例) A行のセルに     100より小さい数字が入力されていたら、B行は赤で塗りつぶす。     100より大きい数字が入力されていたら、B行は青で塗りつぶす。     B行には文字や数字が入力されています。 例)のような場合で、B1に赤、B2が青で塗られている場合 条件付書式を介さずに、B1やB2に色の塗りつぶしを残す方法がありますでしょうか? 条件付書式の解除(削除?)しても、A行に数字がなくても、B行に色が付いていて欲しいのです。 シートやファイルやセルは、別の場所を使用しても問題ありません。 考えている事は、 計算式で答えを表示してあるセルを、値のみコピーする。のような方法の、書式のみペーストといった形です。 他に希望通りの表示ができれば特に細かな点は気にしません。 いろいろなセルから条件をつけてリンクされたり計算結果を表示させたりした、プレビュー用といいますか、見た目の完成された表を、別担当に渡すことになりました。 式でできたシートではなく、テキストや数字の入力されたシートに変換して渡す場合、条件付書式が効いているとその後の作業に見た目の不具合が生じてしまうことを避けたいのです。 何かいい方法があれば教えてください。 説明不足がああれば、補足します。

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

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

専門家に質問してみよう