『Formula1の書き方について』(栗栄太)
H列に
("","1","2") 以外が入力されている場合に
セルの色を変更したいのですが
「プロシージャの呼び出し、または引数が不正です。」と
エラーが表示されます。
どのように記述すればよいのでしょうか?
set col = Range("H:H").FormatConditions.Add(Type:=xlExpression, Formula1:="=R[0]C[0]<>"""" and R[0]C[0]<>""1"" and R[0]C[0]<>""2""")
col.Interior.COLOR = &HFF8080
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
手作業をマクロ記録したほうが手っ取り早いと思います。 (xyz) 2025/11/14(金) 10:38:33
>手作業をマクロ記録したほうが手っ取り早いと思います。 365で条件付き書式の設定を記録したところ
Sub Macro1() ' ' Macro1 Macro '
'
Columns("H:H").Select
End Sub
しか記録されなかった。
で、条件付き書式の条件部分はセルに記述する関数のルールになるので "=AND(R[0]C[0]<>"""" , R[0]C[0]<>""1"" , R[0]C[0]<>""2"")" になるかと。 (ねむねむ) 2025/11/14(金) 10:51:22
マクロ記録されませんでしたか? 手元の365では、こんなのが記録されました。 Sub Macro1() ' ' Macro1 Macro '
'
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=AND(H1<>"""",H1<>""1"",H1<>""2"")"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub
色はテキトーに赤にしてますが。
(xyz) 2025/11/14(金) 11:03:24
あれ? と思ってもう一度試したところ、今度は記録された。
で前回と今回の違いがなにか、いろいろ試したところ、前回は栗栄太さんの挙げたマクロを 標準モジュールに張り付けた状態で(SubとEndを前後につけて)マクロの記録を実行して今回は新規のブックで行っていた。
試しにもう一度新規ブックの標準モジュールに栗栄太さんのマクロを貼り付けて記録をしたところ セル選択しか記録されなかった。
なんなんだろう? (ねむねむ) 2025/11/14(金) 11:27:41
ねむねむさん コメントありがとうございました。 私のところではその後何回か同様のことをためしてみましたが、おっしゃる事象は再現しませんでした。 こちらでは気づけない環境的な要素があるのでしょう。 余り時間も割けないのでここまでとさせていただきます。 そうした事象がありうることをtake note しておきます。
(xyz) 2025/11/14(金) 11:46:06
R[0]C[0]もいいけどRCでいいでしょう。 シート上の式に使うと循環参照になるけど この場合は有効です。 問題点の指摘は既にねむねむさんからありました。 # 反応ないのは何故なんですか? (xyz) 2025/11/24(月) 15:53:22
Formula1:="=AND(RC<>"""",RC<>""1"",RC<>""2"")"
Formula1:="=AND(H1<>"""",H1<>""1"",H1<>""2"")"
AND を使用していますが3つの条件がそろって TRUE になります。
現時点では FALSE になります。
OR を使用してください。
=NOT(OR(H1="",H1="1",H1="2"))
H1<>"" にすると空ではないと判断するので全て TRUE になってしまいます。
("","1","2")の最初の「""」は空白と言う意味ですよね。
Sub FormatCon()
Set col = Range("H:H").FormatConditions.Add(Type:=xlExpression, Formula1:="=NOT(OR(H1="""",H1=1,H1=2))")
col.Interior.Color = &HFF8080
End Sub
※"1"、"2"は数値にしてある。
(さんつ) 2025/11/24(月) 22:11:36
間違いではありません。その式はふたつとも同等です。 (ド・モルガンの法則などといいますね。調べてみてください)
なお、 [[20251121184513]]のあなたの回答、エラーになりますよ。調べて見て下さい。 (xyz) 2025/11/24(月) 22:45:27
>間違いではありません。
でも質問者さんはエラーが出て私が回答したものはエラーは出ない。
何故でしょうか。
>「プロシージャの呼び出し、または引数が不正です。」
お二方、この件についての回答を期待します。
(さんつ) 2025/11/25(火) 09:43:35
シート上の関数の文法にあっていない VBAの文法に従ったものを指定したことが原因であることは 真っ先にねむねむさんが指摘されています。そのことはOKですか? 補足すれば、FormatConditions.Addメソッドの名前付き引数であるFormula1の内容が不正なのです。
> AND を使用していますが3つの条件がそろって TRUE になります。 > 現時点では FALSE になります。 > OR を使用してください。 あなたがAND関数ではなくOR関数を使わないとダメだと書かれているので、 その点を含めて「間違っている」と指摘されたと解釈しました。 どちらで書いても二つは同等の式ですよ、と指摘したのです。そこはOKですか? ご返事をいただきたいですね。
なお、質問者さんのコードが関数の文法に合っていないものを使用していることが原因であることは 既にねむねむさんから指摘されているので、改めてそこに戻って議論する必要はないと思いますけれども。
(xyz) 2025/11/25(火) 12:12:38
colという変数名が気に入らなかったので
Sub test()
Dim 数式 As String
数式 = "=AND(RC<>"""" , RC<>1 , RC<>2)"
With Range("H:H").FormatConditions
.Delete
With .Add(Type:=xlExpression, Formula1:=数式)
.Interior.Color = &HFF8080
End With
End With
End Sub
この数式で、少なくともラーはでません。 (マナ) 2025/11/25(火) 12:59:50
>「間違っている」と指摘されたと解釈しました。
そのように指摘はされていないので返事はしません。
(さんつ) 2025/11/25(火) 16:11:29
どう見てもANDを使うのは間違いと言っています。論理が間違っています。 もう一度復習されることを推奨します。 せめて「ORを使っても書けます」というレベルの話です。それでは。 (xyz) 2025/11/25(火) 16:21:27
and, or の使い方を
間違っていただけのようでした。
〇 and 〇 ではなく、正しく AND(〇,〇) にすることで動作するようになりました。 申し訳ありませんでした。
(栗栄太) 2025/11/26(水) 09:27:21
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.