• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:『続き』 質問番号:701776EXCEL_VBA)

エクセルVBAで実行時エラー1004を修正したい

このQ&Aのポイント
  • エクセルの関数でエラー値を非表示にする方法を教えてください。VBAで同様の処理を行おうとするとエラーが発生してしまいます。
  • 実験データが記録されたエクセルファイルを開いて、日付とデータを条件にしてデータを取得し、別のシートに表示するマクロを作成しています。しかし、マクロを実行すると実行時エラー1004が発生してしまいます。
  • マクロのコードを確認しましたが、特に問題は見つかりませんでした。マクロを実行するために必要な設定や修正があれば教えてください。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

>エクセルの関数で =IF(ISERROR(A1/B1),"",A1/B1) といった関数を作成すると、 >エラー値は非表示で、エラーでない場合のみ、計算します =A1/B1という数式がエラーになるのは, 1)エラーの具体的な内容が#DIV/0だった場合:  それはB1がゼロであるのがエラーの直接の原因なので,数式は  =IF(B1=0,"",A1/B1) とすれば良いことが判ります。 2)エラーの具体的な内容が#VALUE!だった場合:  それはA1かB1に「文字列」が記入されているのがエラーの直接の原因なので,数式は  =IF(COUNT(A1:B1)=2,A1/B1,"") などのようにすればよいことが判ります。 3)エラーの具体的な原因を追及するのがメンドクサイ場合:  その場合は,まぁどんなエラーでも対応できる  =IF(ISERROR(A1/B1),"",A1/B1) としても勿論構いません。 でも数式がシンプルにA1/B1程度ならまだしも,もっともっと長くなってきた場合でも,「長い(重い)数式」をイチイチ計算してエラーにならないかまず確認してから,改めて本番の計算を同じだけやり直すのを「不細工だ」と思わなければ,です。 >VBAで同様の式を利用しようとすると、エラーとなって実行できません。 新しいマクロの記録を開始します 所定のセルに =IF(B1=0,"",A1/B1) と数式を記入しEnterして実際に一度式を記入させてみます マクロの記録を終了し,採取できたマクロを参考にして,「この式を記入させる」には一体どんなマクロにすれば良かったのか確認します。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2011/9/20 ユーザー名 : keithin ' '  ActiveCell.FormulaR1C1 = "=IF(RC[-1]=0,"""",RC[-2]/RC[-1])"  Range("C2").Select End Sub むむー。。R1C1形式のマクロが録れてしまいましたが,まぁ肝心の「""」の部分が「""""」と書けばよい事が判ったことで良しとしましょう。 実際のC5セルに(若しくはC5:I35セルに) =IF(ISERROR(VLOOKUP($E$1-DAY($E$1)+$B5,[実験データ.xls]data!$B:$K,MATCH(C$4,[実験データ.xls]data!$B$1:$K$1,0))),"",VLOOKUP($E$1-DAY($E$1)+$B5,[実験データ.xls]data!$B:$K,MATCH(C$4,[実験データ.xls]data!$B$1:$K$1,0))) あるいは =IF(MEDIAN(MIN([実験データ.xls]data!$B:$B),$E$1,MAX([実験データ.xls]data!$B:$B))=$E$1,"",VLOOKUP($E$1-DAY($E$1)+$B5,[実験データ.xls]data!$B:$K,MATCH(C$4,[実験データ.xls]data!$B$1:$K$1,0))) といった数式を記入する操作を新しいマクロの記録でマクロに録って,どんなマクロの書きぶりをしたら正しく動作するのか,確認しながら作成してみてください。

puyopa
質問者

お礼

回答ありがとうございます。お礼が遅くなってすみません。 回答までの導き方まで、ご丁寧に教えていただきありがとうございました。 マクロを使うといった発想が全くなかったので、考え方の幅が広がりました。 keithin様のレベルには程遠いですが、少しでも精進させていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

Sub test01() Range("C1").Formula = "=IF(iserror(A1/B1),"""",A1/B1)" End Sub を実行してみて。エクセル関数の埋め込みという点では、まく行くのでは。 VBAでエクセルの式の埋め込みはやらないほうが良いと思うが個人的な趣味だが。 ””のVBAにおける表現の経験が質問者には無かったからだけのような感じがする。 ーー また 依頼内容の上記の実例と、コードを貼り付けている実例(VLOOKUP等)と、違うじゃない。こういう質問の仕方はやると読者が迷惑する。 コード実例の Formula = "=IF(ISERROR(VLOOKUP($E$1-DAY($E$1)+$B5,[実験データ.xls]data・・が疑問点ならそれに絞ること。 ーー それまでのコード(日付をいじくっている部分?)も論点がぼやけるので、省いたほうが良いと思う。 読者・回答者が速く判りやすい質問の仕方を考えてください。それが質問者の思考の訓練に役立つ。

puyopa
質問者

お礼

全体のコードが見えたほうが良いと思って、そのまま全て載せてしまいました。 VBAの理解力をあげて、適切な質問ができるように精進いたします。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A