- ベストアンサー
マクロでセルに関数を入れようしてもエラーになる
Excel2007 windows7 使っています。以下のマクロを実行すると、アプリケーション定義やオブジエクト定義エラーになってしまします。どうしてでしょうか。ご教示お願いします。 sub test() If Not IsNumeric(Range("F17").Formula) Then Range("f17").Formula = "=IF(OR(R2=""新規用"",R2=""継続用""),"""",IF(COUNTIF(+D10,""*改定*""),78,39))" End If end sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問のコードの中の式は正しいのですか?。 その一部の Sub test2() Range("f17").Formula = "=IF(OR(R2=""新規用"",R2=""継続用""),"""",IF(COUNTIF(D10,""*改定*""),78,39))" End Sub は実行してそれらしく動きました。 ただ(+D10の部分はセル範囲を記述する引数部分ですが、+D10のような高等?な技があるか 私にはわかりません。D10の1セルでもD1:D10のように書いてもエラーにはならないことは確認しました。1セルを対象の場合に、COUNTIFを使うの?と思いましたが、高等な技ですか? ーー もう一つ If Not IsNumeric(Range("F17").Formula) Then はなぜ必要なのか、どういう場合のために必要なのか、小生には判りません。 FormulaがNot IsNumericとは??。 Not IsNumeric( Range("F17").Value)ではだめなのですか?
その他の回答 (3)
- dogs_cats
- ベストアンサー率38% (278/717)
コード修正はNO1の方の回答の通りだと思います。 F17に数式が入力されていない判断は下記でも可能です、ご参考まで。 falseをtrueにすれば数式が入力されているかになります。 If Range("f17").HasFormula = False Then
お礼
なるほど、これもいいですね。ありがとうございました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
質問者様の関数では、COUNTIF関数の検索範囲であるD10セルの前の所に「+」を付けて「+D10」としているため、ワークシート関数の記述の仕方としては誤ったやり方となってしまっている事が原因です。 ですから Range("f17").Formula = "=IF(OR(R2=""新規用"",R2=""継続用""),"""",IF(COUNTIF(+D10,""*改定*""),78,39))" の中の「+D10」の前の「+」を外して、 Range("F17").Formula = "=IF(OR(R2=""新規用"",R2=""継続用""),"""",IF(COUNTIF(D10,""*改定*""),78,39))" とされるか、或いは Range("F17").FormulaR1C1 = "=IF(OR(R[-15]C[12]=""新規用"",R[-15]C[12]=""継続用""),"""",IF(COUNTIF(R[-7]C[-2],""*改定*""),78,39))" とされると良いと思います。
お礼
まったく、仰せのとおりでした。本当に申し訳ありませんでした。
- f272
- ベストアンサー率46% (8467/18127)
sub test() If Not IsNumeric(Range("F17").Formula) Then Range("f17").Formula = "=IF(OR(R2=""新規用"",R2=""継続用""),"""",IF(COUNTIF(D10,""*改定*""),78,39))" End If end sub
お礼
まったく愚かな質問に詳細に答えていただき感謝します。+を取っただけで思うように作動しました。Not IsNumeric( Range("F17").Value)を使わせていただきます。ありがとうございました。