今日も見に来てくださって、ありがとうございます。石川さんです。
Excelの実行時エラー、1年ほど前に書いた記事のアクセスが一番多いので、みなさんのお役に立っているようです。と、いうことで先日職場にて発生した実行時エラー、今度は「5」です。こちらが発生しました。今回は全くつまづくこともなく、すぐに解決できたのですが、ひとによっては悩みに悩んで解決できない、ということもあるかも知れないと思って記事にすることにしました。(Excelはニーズが多いですからね。アクセスが増えるかもしれない、と調子に乗っております。)
急いでいる方に結論だけ、お知らせします。こちらは以下のスクリプトで再現できます。
Sub test() 'B1セルの内容がA1セルより小さいとき、B1セルの背景をグレーにしてフォントを太字にする条件付き書式を設定します With Range("B1").FormatConditions.Add(Type:=xlExpression, Formula1:="=AND($B1<$A$1)") .Font.Bold = True .Interior.Color = RGB(166, 166, 166) End With End Sub
ちなみにこちらのスクリプト、以前は問題なく実行できていたのですけど、ある日突然「実行時エラー’5’」が発生するようになりました、というお問い合わせでした。ただ、こちらのスクリプト、メールで受信して、ダウンロードして実行しても、ぼくの環境ではエラーにならなかったのです。不思議でしょ。なので、上記のスクリプトを記述してもエラーにならない方もいるかも知れません。その場合は、違う原因かも知れません。
それで、エラーの出ている人のエクセルとぼくのエクセルをよくよくを見てみますと、セルの列の表記が違うのですよね。
そう、列が「1、2、3、4、5、、、」となっているか「A、B、C、D、E、、、」となっているかの違いです。こちらは「ファイル(F)」の「オプション」を選択することで表示される「Excel のオプション」画面から「数式」を選択することで表示される「数式の処理」の「R1C1 参照形式を使用する(R)」をチェックすることで切り替えられます。チェック時は「1、2、3、4、5、、、」で、チェックオフ時は「 A、B、C、D、E、、、」と表示されるようになります。
今回はこの設定が悪さをしていました。スクリプト作成時はR1C1参照形式を使わない設定になっていたのに、途中で切り替えて保存した、ということのようです。こちらの「R1C1 参照形式を使用する(R)」の設定は、Excel全体の設定ではなくて、ファイルごとに設定を保持するようです。ちょっと動作確認してみたところ、新規作成時は前回エクセル終了時の設定を利用して、既存ファイルを開いたときはそのファイルの設定を利用するようです。
まとめ
マクロ実行時に今まで動作していたのにこのエラーが出るようになったら、「R1C1 参照形式を使用する(R)」の設定を疑ってみるといいかも知れませんね。マクロで条件付き書式の設定をするときには、参照形式をこの設定にそろえておかないといけない、ということですね。