[[20251114102030]] 『Formula1の書き方について』(栗栄太) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『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:="=R[0]C[0]<>"""" and R[0]C[0]<>""1"" and R[0]C[0]<>""2""")
数式そのものが間違っています。
条件付き書式の式は Excel関数の形で書きます。

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

>ねむねむさんが指摘されています。そのことはOKですか?
最後の部分を見落としていました。

>「間違っている」と指摘されたと解釈しました。
そのように指摘はされていないので返事はしません。

(さんつ) 2025/11/25(火) 16:11:29


 どう見てもANDを使うのは間違いと言っています。論理が間違っています。
 もう一度復習されることを推奨します。
 せめて「ORを使っても書けます」というレベルの話です。それでは。
(xyz) 2025/11/25(火) 16:21:27

私の回答は却下します。
(さんつ) 2025/11/25(火) 20:15:59

取り下げます が正しいのでは? 却下とは権限を持つ側がする行為
(ご注意) 2025/11/25(火) 23:05:59

皆さん、ありがとうございます。
急遽病院にお世話になっていたので
返事が遅れました。

and, or の使い方を
間違っていただけのようでした。

 〇 and 〇
ではなく、正しく
AND(〇,〇)
にすることで動作するようになりました。
申し訳ありませんでした。

(栗栄太) 2025/11/26(水) 09:27:21


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.