プロが教えるわが家の防犯対策術!

VBAで関数を最終行までコピーするコードですが
数式が =C2 の場合
Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "=C2"
で動作します。
しかし数式が
=TEXT(D2,"yyyy/m") や
=IF(O2<=0,"0",P2/O2) の場合は、
コンパイルエラー 修正候補 ステートメントの最後
とエラーが出ます。
どうすれば動作するのでしょうか?

A 回答 (3件)

Formula = "xxxxx"が構文。

xxxxに具体的なものが入る。

普通のエクセルでも同じで、"で囲む構文の"xxxx"のxxxx内に"が有ると、構文の終わりと認識されてしまう。
なので、エスケープするんです。

例えばA1セルに、文字列abc"defを入れる場合は"を2個連続させる。
="abc""def"

文字列として"を1個だけ入れるなら、=""""
文字列として"を2個だけ入れるなら、=""""""

=TEXT(D2,"yyyy/m")→=TEXT(D2,""yyyy/m"")

=IF(O2<=0,"0",P2/O2)→=IF(O2<=0,""0"",P2/O2)
    • good
    • 1

=TEXT(D2,""yyyy/m"")


=IF(O2<=0,""0"",P2/O2)
にしてください。

ダブルクオート内にダブルクオートを記述する場合は、ダブルクオートを2つ書きます。
蛇足ですが、下の式は
=IF(O2<=0,0,P2/O2)
で良いような気もします。(好みの問題かもしれませんが・・・)
    • good
    • 0

こんにちは



設定する数式に「"」が含まれているので、文字列にする際にエスケープする必要があります。

例えば
>=TEXT(D2,"yyyy/m")
の式を設定したいのならば、VBAの記述は
 ~~.Formula = "=TEXT(D2,""yyyy/m"")"
といった要領になります。
    • good
    • 1
この回答へのお礼

ありがとうございます!!

お礼日時:2022/09/04 18:35

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