• ベストアンサー

VBAで文字と数値のセルを計算したい

EXCEL2000でVBA作成中です。  以下のコードで計算式を入れています。 セルの値が0のときは、セルの値を表示しないようにしています。 ところが印刷すると0が表示されてしまいます。 Range("F18").Formula = "=if(+G18>0,""朝"","""")" Range("h18").Formula = "=if(+I18>0,""昼"","""")" Range("J18").Formula = "=if(+K18>0,""夕"","""")" Range("G18").Formula = "=IF(COUNTIF(Q18:AB19, "" 朝"")=0,0,COUNTIF(Q18:AB19, ""朝""))" Range("I18").Formula = "=IF(COUNTIF(Q18:AB19, "" 昼"")=0,0,COUNTIF(Q18:AB19, ""昼""))" Range("K18").Formula = "=IF(COUNTIF(Q18:AB19, "" 夕"")=0,0,COUNTIF(Q18:AB19, ""夕""))" Range("L18").Formula = "=-(+G18*300+I18*350+K18* 400)" そこで Range("G18").Formula = "=IF(COUNTIF(Q18:AB19, "" 朝"")=0,"""",COUNTIF(Q18:AB19, ""朝""))" とすると、L18にエラーが出て計算してくれません。 ゼロを非表示にしてしかも計算させるようにするには どうしたらよろしいか。

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

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.5

またまたこんばんは。 >式=-(+G18*300+I18*350+K18*400) とします。 これは”式”を -(+G18*300+I18*350+K18*400) に置き換えて読んで下さいということです。 "=" は要りません。 >Range("L18").Formula = "=If(ISERROR(=-(+G18*300+I18*350+K18*400)),"""",=-(+G18*300+I18*350+K18*400))" この式の、=-(+G18*300+I18*350+K18*400)の前の"="は不要です。 Range("L18").Formula = "=If(ISERROR(-(+G18*300+I18*350+K18*400)),"""",-(+G18*300+I18*350+K18*400))" 以上です。

aitaine
質問者

お礼

今再度試したらできました。ありがとうございました。

aitaine
質問者

補足

今ためしたのですがセルに公式が入るだけで結果の値が表示されません。すいません。

その他の回答 (4)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。KenKen_SP です。 【方法1】「ゼロ値」の表示オブションを使う [ツール]-[オプション]-[表示]のウインドウオプションで[ゼロ値] のチェックをはずすと IF 関数などで制御しなくとも、表示も印刷 もされませんが、ダメですか? 【方法2】セルの表示形式を使う セル表示形式のユーザー定義は、以下のように「;」で区切って それぞれの書式を定義できます。   正の数の場合 ; 負の数の場合 ; 0 の場合 ; 文字列の場合 つまり、   #,##0;-#,##0;;@ みたいに、「0の場合」の書式に何も指定しないと先に述べた方法と 同様の結果が得られます。 予め、セルにこのような書式を設定しておけば良いのですが、これも マクロでやるなら、   With Range("L18")     .NumberFormatLocal = "#,##0;-#,##0;;@"     .Formula = "=-(+G18*300+I18*350+K18*400)"   End With こんな感じです。 これらの手法をうまく使うと計算式を簡素化できるメリットがあります。

aitaine
質問者

補足

今ためしたのですが#VALUE!がでてしまいます。すいません。かっこいいコードなので使いたいですが。

  • e10go
  • ベストアンサー率38% (47/122)
回答No.3

>セルL18には、かならず「0」が印刷されてしまいます。 >これを印刷しないようにするのは不可能でしょうか? マクロの、 Range("L18").Formula = "=-(IF(G18="""",0,G18)*300+IF(I18="""",0,I18)*350+IF(K18="""",0,K18)*400)" 上のコードを、 Range("L18").Formula = _ "=IF(AND(G18="""",I18="""",K18=""""),"""",-(IF(G18="""",0,G18)*300+IF(I18="""",0,I18)*350+IF(K18="""",0,K18)*400))" に変えてください。これで、セルL18の「0」表示も印刷もされないです。

aitaine
質問者

お礼

このコードをもっと研究します。ありがとうございました。

aitaine
質問者

補足

今ためしたところ、完璧にできました。

  • e10go
  • ベストアンサー率38% (47/122)
回答No.2

「0」と表示されて困るセルに、セルの書式設定で、ユーザ定義の「#」を設定すれば、値が「0」でも画面上・印刷上では「0」が出ません。 書式設定を標準のまま、セルG18・I18・K18の計算結果が""でエラーを出さないようにするには、マクロの一部を下のように直せば良いです。 Range("G18").Formula = "=IF(COUNTIF(Q18:AB19, ""朝"")=0,"""",COUNTIF(Q18:AB19, ""朝""))" Range("I18").Formula = "=IF(COUNTIF(Q18:AB19, ""昼"")=0,"""",COUNTIF(Q18:AB19, ""昼""))" Range("K18").Formula = "=IF(COUNTIF(Q18:AB19, ""夕"")=0,"""",COUNTIF(Q18:AB19, ""夕""))" Range("L18").Formula = "=-(IF(G18="""",0,G18)*300+IF(I18="""",0,I18)*350+IF(K18="""",0,K18)*400)" なお、計算結果によっては、セルL18には、「0」が表示されます。

aitaine
質問者

補足

今ためしたのですが セルL18には、かならず「0」が印刷されてしまいます。 これを印刷しないようにするのは不可能でしょうか?

  • taocat
  • ベストアンサー率61% (191/310)
回答No.1

こんにちは。 今回のように、G18に長さ0の文字列、"" が入っていると =G18*300 とかの計算は#VALUEエラーが出ますので ISERRORとか使いエラーをトラップしなければなりません。 で、次のように書くことができます。 また、コードが長くなりますので  式=-(+G18*300+I18*350+K18*400) とします。 Range("G18").Formula = "=If(ISERROR(式),"""",式)" 以上です。

aitaine
質問者

補足

今試してみたのですがアプリまたはオブジェクトエラーになってしまいました。なんででしょうか? Range("G18").Formula = "=IF(COUNTIF(Q18:AB19, ""朝"")=0,"""",COUNTIF(Q18:AB19, ""朝""))" Range("I18").Formula = "=IF(COUNTIF(Q18:AB19, ""昼"")=0,"""",COUNTIF(Q18:AB19, ""昼""))" Range("K18").Formula = "=IF(COUNTIF(Q18:AB19, ""夕"")=0,"""",COUNTIF(Q18:AB19, ""夕""))" Range("L18").Formula = "=If(ISERROR(=-(+G18*300+I18*350+K18*400)),"""",=-(+G18*300+I18*350+K18*400))"

関連するQ&A

専門家に質問してみよう