重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

【やりたい事】
D1-D3、H1-H3の空白にも、赤色の塗りつぶしがされなようにしたいです
以下コードを実行すると、空白セルにも赤色になってしまいます

Exactの結果の、FALSEだけを赤色にしたいです
ご存じの方、コードやアドバイスのご教授お願いします

【条件】
Exact関数は、C1-C3、G1-G3、K1-K3に既に設定済み
FALSE【間違っている】という文字列に対して赤色に塗りつぶしされる、コードを記述



【コード】
Sub sample()

Dim lastrow As Long
lastrow = Cells(Rows.Count, "a").End(xlUp).Row

Dim fc As Object

'既存の条件付き書式があれば削除
Range("C1:k" & lastrow).FormatConditions.Delete

'条件を設定して、オブジェクトに格納

Set fc = Range("C1:k" & lastrow).FormatConditions.Add(Type:=xlExpression, Formula1:="=c1=FALSE")

'条件成立で、背景色を「赤色」
fc.Interior.Color = vbRed

End Sub

「【マクロ 画像あり】Exact関数の結果」の質問画像

A 回答 (3件)

以下のURLをご覧ください。


https://www.javadrive.jp/excelvba/basic/index17. …
tatsumaru77さんの回答で解決ですが、上記で解説されているとおり、ワークシート上ではTRUEは1、FALSEは0と判断されます。

ご質問者が設定した条件付き書式の数式条件「=c1=FALSE」はc1が絶対参照ではないので、「条件付き書式」の適用範囲とした「C1セル~K列最終行のセル」全てにおいて、「セルの値=FALSE」がチェックされます。
この結果、条件成立セルは「背景色が赤」となる訳ですが、上記URLのとおり、ワークシート上の適用範囲に0があると、0はFALSEと判断されてしまうので、条件が成立してしまいます。

【適用範囲の「C1セル~K列最終行のセル」には0がないので大丈夫】と思ってしまいがちですが、落とし穴があります。それは「未入力による空白」です。

「数式による空白」は長さ0の文字列なので問題ないのですが、「未入力による空白」は注意が必要です。「未入力による空白」は数式の中では「0」と見なされるからです。
このため「セルの値=未入力による空白」は「セルの値=0」となり、結局「セルの値=FALSE」が成立してしまうということになります。

これを避けるには、tatsumaru77さんの回答のように、数式条件を「=EXACT(C1,""FALSE"")」のような厳密な数式にする方法があります。

さらに言えば、上記URLでの解説を踏まえると「=c1=FALSE」の部分を
=C1&""""=""FALSE""・・・①
とする方法でもよいということになります。

①の数式の場合、
ア.セルの値が未入力の空白のときは「&""」によって「""」になるので、「=""="FALSE"」となり不成立
イ.セルの値が0ときは「&""」によって「"0"」になるので、「="0"="FALSE"」となり不成立
ウ.セルの値がFALSEときは「&""」によって「"FALSE"」になるので、「="FALSE"="FALSE"」となり成立

つまり、ウのときのみ「背景色が赤」になるという訳です。
    • good
    • 0

No1です。


Formula1の設定内容ですが、
=c1=FALSE
はC1セルがFALSEの場合、判定結果は真となり赤くなります。

ここでC1セルは、条件付き書式のセル範囲の最初のセルを記入します。
従って、D1セルにもこの内容が適用されます。
D1セルの場合は
=d1=FALSE
で適用されます。
ここで=演算子を使うと、D1セルの内容が空白の場合も、FALSEであると解釈してしまうようです。
従って、判定結果が真となり、赤くなります。

これではまずいので、
セルの内容が文字列として"FALSE"となっていた場合にのみ、赤くなるようにします。

=EXACT(C1,""FALSE"")とかくと、
C1の内容が文字列としてFALSEなら、判定結果は真となり、赤くなります。
C1の内容が文字列としてFALSEでないなら、赤くなりません。
    • good
    • 0
この回答へのお礼

丁寧な解説ありがとうございます

お礼日時:2025/03/18 01:13

Set fc = Range("C1:k" & lastrow).FormatConditions.Add(Type:=xlExpression, Formula1:="=c1=FALSE")





Set fc = Range("C1:k" & lastrow).FormatConditions.Add(Type:=xlExpression, Formula1:="=EXACT(C1,""FALSE"")")

に変えてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。治りました。
ただ、赤く塗りつぶすセルを満たす数式は
以下となるのが、なかなか理解できません

C1とFALSEを比較する??みたいな意味に取れてしまいます
ヒント等教えて頂けると幸いです

"=EXACT(C1,""FALSE"")"

お礼日時:2025/03/16 01:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A