• ベストアンサー

マクロでセルに関数を入れようしてもエラーになる

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

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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)ではだめなのですか?

aitaine
質問者

お礼

まったく愚かな質問に詳細に答えていただき感謝します。+を取っただけで思うように作動しました。Not IsNumeric( Range("F17").Value)を使わせていただきます。ありがとうございました。

その他の回答 (3)

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.3

コード修正はNO1の方の回答の通りだと思います。 F17に数式が入力されていない判断は下記でも可能です、ご参考まで。 falseをtrueにすれば数式が入力されているかになります。 If Range("f17").HasFormula = False Then

aitaine
質問者

お礼

なるほど、これもいいですね。ありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 質問者様の関数では、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))" とされると良いと思います。

aitaine
質問者

お礼

まったく、仰せのとおりでした。本当に申し訳ありませんでした。

  • f272
  • ベストアンサー率46% (8467/18127)
回答No.1

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