いつもお世話になっております。
最近 Excel VBA の勉強をし始めました。
現在、チェック表のようなものを作成しております。
A列にチェックする項目、B列にチェック欄があり、『チェック欄に"OK"を入力した場合、該当行全体がグレイに塗りつぶされる』というようなものを作成しました。【チェック欄は初期値として何も入力されていないものとします】
これから追加しようと試みているのが、『"OK"が入っているセルを"OK"以外の値に戻した場合、書式をクリアする(*1)』という処理です。
(*1)の処理そのものの実装は問題ないのですが、以下のパターンの実装方法で行き詰ってしまいました。
【1】チェック結果が"OK"ではなかったので、チェック欄にチェック完了予定日付を入力し、目印としてその行をピンク色に塗りつぶしたとします。
【2】チェック完了予定日付が変更になったために、新しい日付を入力したとします。このとき、現在の条件判定を『チェック欄に"OK"以外が入力された場合、ClearFormatsで書式をクリアする』としているために、目印として塗りつぶしていたピンク色がクリアされてしまうのですが、これを保持したいのです。
【質問1】
『変更される前の値が"OK"の場合』というような条件判定は実装可能でしょうか。
【質問2】
可能な場合、実装方法をご教授頂けますでしょうか。
【質問3】
そもそもロジックの考え方がおかしい、等のご指摘、アドバイスがございましたらご教授頂けますでしょうか。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
質問1→基本的にはできません。
ただし前の値が「OK」ならセルの背景色が灰色でしょうから、カラーインデックスを取得して判断する方法は考えられます質問2→ ColorIndex が「灰色」の値で、Valueが「OK」ではないという判定をすればよいでしょう
質問3→このような処理は条件付き書式を用いる方が自然だし、簡単だと思います。
zap35さん、早速のご回答ありがとうございます。
折角VBAを勉強し始めましたので、簡単なところからコツコツやっていこう…と思っていたのですが、なんでもかんでもマクロでやれば良い、というわけではないのですね。
参考になりました。ありがとうございました。
No.2
- 回答日時:
【質問3】に対しての回答です。
ロジックが間違っている、というよりもVBAを使用しなくてもExcelの“条件付き書式”を使用した方が適切です。
--------------------------
グレーにしたい範囲(例:行全体、A2~E2、等)を選択
↓
書式>条件付き書式
↓
条件を「数式が」「=$B2="OK"」
(2行目で設定すると仮定しました)
↓
「書式」ボタンをクリックして、パターンをグレーに設定
↓
OK
これで、B列に「OK」が入れば対象範囲がグレーになり、
「OK」以外に変更すれば元のセル色に戻ります。
この設定は「書式のコピー/貼り付け」で他の行にコピーすることもできます。
--------------------------
VBAはさまざまな処理をおこなうことができますが、すべてをマクロに組み込むのではなく、Excel本来の機能を利用した方が処理も速く、マクロのソースを簡潔にすることができますので、このような回答をさせて頂きました。
ご質問の趣旨に反しているかもしれませんが…。
ご参考になれば幸いです。
haruko2005さん、早速のご回答ありがとうございます。
折角VBAを勉強し始めましたので、簡単なところからコツコツやっていこう…と思っていたのですが、なんでもかんでもマクロでやれば良い、というわけではないのですね。
これからは、「これはマクロでないと駄目」「これはマクロじゃなくても出来る」という観点も踏まえて勉強を進めて参ります。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) (至急)Googleのスプレッドシートの条件付き書式について 2 2022/09/11 08:50
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Excel(エクセル) エクセルの複数条件作成方法について 2 2023/01/23 21:38
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) 見えているセルの数字だけの合計を計算させたい 4 2022/09/11 17:23
- Excel(エクセル) Excelで、いくつか項目のあるリストで、一つの行のある欄に値を入力すると、その行全体に色がつき、か 2 2022/11/18 20:43
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Excel(エクセル) エクセルでシート保護のかかり方の違いとセルの非保護の設定 3 2022/08/09 10:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
Excelのプルダウンで2列分の情...
-
i=cells(Rows.Count, 1)とi=cel...
-
TODAY()で設定したセルの日付...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
VBAでセルをクリックする回...
-
Excel VBA、 別ブックの最終行...
-
Excel2003 複数セル1列の入力済...
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
VBAマクロで結合セルを含む列に...
-
特定の文字を条件に行挿入とそ...
-
【VBA】指定したセルと同じ値で...
-
EXCELのVBA-フィルタ抽出後の...
-
EXCELで変数をペーストしたい
-
VBAを使用した時間管理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報