>エクセルの関数で =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)))
といった数式を記入する操作を新しいマクロの記録でマクロに録って,どんなマクロの書きぶりをしたら正しく動作するのか,確認しながら作成してみてください。
お礼
回答ありがとうございます。お礼が遅くなってすみません。 回答までの導き方まで、ご丁寧に教えていただきありがとうございました。 マクロを使うといった発想が全くなかったので、考え方の幅が広がりました。 keithin様のレベルには程遠いですが、少しでも精進させていただきます。 ありがとうございました。