• ベストアンサー

【Excel VBA】 セルに入力された値によって書式を制御する

いつもお世話になっております。 最近 Excel VBA の勉強をし始めました。 現在、チェック表のようなものを作成しております。 A列にチェックする項目、B列にチェック欄があり、『チェック欄に"OK"を入力した場合、該当行全体がグレイに塗りつぶされる』というようなものを作成しました。【チェック欄は初期値として何も入力されていないものとします】 これから追加しようと試みているのが、『"OK"が入っているセルを"OK"以外の値に戻した場合、書式をクリアする(*1)』という処理です。 (*1)の処理そのものの実装は問題ないのですが、以下のパターンの実装方法で行き詰ってしまいました。 【1】チェック結果が"OK"ではなかったので、チェック欄にチェック完了予定日付を入力し、目印としてその行をピンク色に塗りつぶしたとします。 【2】チェック完了予定日付が変更になったために、新しい日付を入力したとします。このとき、現在の条件判定を『チェック欄に"OK"以外が入力された場合、ClearFormatsで書式をクリアする』としているために、目印として塗りつぶしていたピンク色がクリアされてしまうのですが、これを保持したいのです。 【質問1】 『変更される前の値が"OK"の場合』というような条件判定は実装可能でしょうか。 【質問2】 可能な場合、実装方法をご教授頂けますでしょうか。 【質問3】 そもそもロジックの考え方がおかしい、等のご指摘、アドバイスがございましたらご教授頂けますでしょうか。 よろしくお願い致します。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

質問1→基本的にはできません。ただし前の値が「OK」ならセルの背景色が灰色でしょうから、カラーインデックスを取得して判断する方法は考えられます 質問2→ ColorIndex が「灰色」の値で、Valueが「OK」ではないという判定をすればよいでしょう 質問3→このような処理は条件付き書式を用いる方が自然だし、簡単だと思います。

daisy_k
質問者

お礼

zap35さん、早速のご回答ありがとうございます。 折角VBAを勉強し始めましたので、簡単なところからコツコツやっていこう…と思っていたのですが、なんでもかんでもマクロでやれば良い、というわけではないのですね。 参考になりました。ありがとうございました。

その他の回答 (1)

回答No.2

【質問3】に対しての回答です。 ロジックが間違っている、というよりもVBAを使用しなくてもExcelの“条件付き書式”を使用した方が適切です。 -------------------------- グレーにしたい範囲(例:行全体、A2~E2、等)を選択 ↓ 書式>条件付き書式 ↓ 条件を「数式が」「=$B2="OK"」 (2行目で設定すると仮定しました) ↓ 「書式」ボタンをクリックして、パターンをグレーに設定 ↓ OK これで、B列に「OK」が入れば対象範囲がグレーになり、 「OK」以外に変更すれば元のセル色に戻ります。 この設定は「書式のコピー/貼り付け」で他の行にコピーすることもできます。 -------------------------- VBAはさまざまな処理をおこなうことができますが、すべてをマクロに組み込むのではなく、Excel本来の機能を利用した方が処理も速く、マクロのソースを簡潔にすることができますので、このような回答をさせて頂きました。 ご質問の趣旨に反しているかもしれませんが…。 ご参考になれば幸いです。

daisy_k
質問者

お礼

haruko2005さん、早速のご回答ありがとうございます。 折角VBAを勉強し始めましたので、簡単なところからコツコツやっていこう…と思っていたのですが、なんでもかんでもマクロでやれば良い、というわけではないのですね。 これからは、「これはマクロでないと駄目」「これはマクロじゃなくても出来る」という観点も踏まえて勉強を進めて参ります。 ありがとうございました。

関連するQ&A