• ベストアンサー

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

  • VBAでセルに公式をいれたい!

    EXCEL2000を使っています。 以下のコードを書くと Range("G18").Formula = WorksheetFunction.CountIf(Range("Q18:AB19"), "出張") i = Range("G18").value 結果の個数が表示されてしまいます。 関数をセルに入れ、表示は個数にしていのですが どうしたらよろしいでしょうか

  • Excel 2003の計算式を教えてください。

    式の詳細です。 1)X5のセルが "*都" で A5とI5のセルが入力されていれば (G5+O5)*AB1、A5が入力されていてI5が空白の時は、G5*AB1、A5 が空白でI5が入力されていれば、O5*AB1 2)X5のセルが "*市" で A5とI5のセルが入力されていれば (G5+O5)*AB1、A5が入力されていてI5が空白の時は、G5*AB1、A5 が空白でI5が入力されていれば、O5*AB1 1)=IF(NOT(COUNTIF($X5,"*都")),"",IF(AND(NOT($A5=""),NOT ($I5="")),($G5+$O5)*$AB$1,IF(NOT($A5=""),$G5*$AB$1,IF(NOT ($I5=""),$O5*$AB$1)))) 2)=IF(NOT(COUNTIF($X5,"*市")),"",IF(AND(NOT($A5=""),NOT ($I5="")),($G5+$O5)*$AB$2,IF(NOT($A5=""),$G5*$AB$2,IF(NOT ($I5=""),$O5*$AB$2)))) 以上1)2)別々の式は問題なく計算できるのですが、二つの式 を一つにして 以下の式にしてS5のセルに入力したのですが、数 式が間違っていますと表示されます。 =IF(NOT(COUNTIF($X5,"*都")),"",IF(AND(NOT($A5=""),NOT ($I5="")),($G5+$O5)*$AB$1,IF(NOT($A5=""),$G5*$AB$1,IF(NOT ($I5=""),$O5*$AB$1,IF(NOT(COUNTIF($X5,"*市")),"",IF(AND (NOT($A5=""),NOT($I5="")),($G5+$O5)*$AB$2,IF(NOT ($A5=""),$H5*$AB$2,IF(NOT($I5=""),$P5*$AB$2,"")))))))) 正しい式を教えてください。 宜しくお願いいたします。

  • VBA 計算結果を数値ではなく、数式で表示したい。

    配合表から配合比率を計算するVBAを組みたいのですが、実際の数値ではなく計算式を表示したいです。 こちらが自分で記入したコードです。 Q列とAA列とAB列をかけて、100で2回割った結果をAC列に表示します。同じ行にすべての数値が記入されないので、AB列からそれぞれ必要な列の数値を取得しています。 Sub 配合比率仮() Dim i As Integer Dim AB Dim Q Dim AA Range("AB3").Select For i = 1 To 500 If ActiveCell.Value = "" Then     '空白の場合下のセルへ ActiveCell.Offset(1, 0).Select Else '配合割合の数値がある場合 AB = ActiveCell.Value         'アクティブセルの数値の取得 Q = ActiveCell.Offset(0, -11).End(xlUp).Value        '重量比率を取得 AA = ActiveCell.Offset(0, -1).End(xlUp).Value        '配合割合の左列を取得 ActiveCell.Offset(0, 1) = s * t / 100 * u / 100       '製品の配合比率を計算(ここを数式にしたいです) ActiveCell.Offset(1, 0).Select       '下のセルへ End If Next i End Sub 上記コードでは数値が表示されます。数式で結果を表示させる方法を教えてください。Formula/FormulaR1C1プロパティを使うと思ったのですが、うまく動くコードが書けませんでした。初心者に毛が生えたようなもので上記コードもなっていないものかとは思うのですが、どうぞお力を貸してください。

  • エクセル VBA 計算方法

    計算をエクセルのマクロで行いたいたくて計算式を作ったのですが 計算のG列の項目の中に「(5.2)万」のように( )のようにがついているものが 計算の項目のなかにあり、答えが-マイナスになってしまいます。 もし( )がついてたら( )のマイナスがプラスに変換できるように組込めないですか? ちなみに式はこちらです Dim nLast As Long nLast = WorksheetFunction.Max(2, Range("J" & Rows.Count).End(xlUp).Row) Range("K2").Formula = "=VALUE(SUBSTITUTE(G2,""万"",""""))*10000+VALUE(SUBSTITUTE(H2,""円"",""""))+IF(J2=""-"",0,VALUE(SUBSTITUTE(J2,""円"","""")))" If nLast > 2 Then Range("K2").AutoFill Destination:=Range("K2:K" & nLast) End If '式を入れたいだけならここまで。値だけにしたいなら以下も必要 Range("K2:K" & nLast) = Range("K2:K" & nLast).Value

  • EXCEL VBA Worksheet_Chang

    お世話になります。 EXCEL VBAで 以下の処理をしています。 C6の内容に応じて、セルに式を設定するだけなのですが このシートの全然関係ないセルで[Delete]キーを押下した際に 実行時エラー 13 型が一致しません というエラーが発生します。 どういう理由でエラーとなるのでしょうか? また、どのような対処をすればいいでしょうか? 以下、実際のコードです Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("C6") Then If Range("C6").Value = "する" Then Range("I11").Formula = "=C7" Range("I12").Formula = "=C7" Range("I13").Formula = "=C7" Range("I14").Formula = "=C7" Range("J11").Formula = "=C8" Range("J12").Formula = "=C8" Range("J13").Formula = "=C8" Range("J14").Formula = "=C8" Else Range("I11").Formula = "" Range("I12").Formula = "" Range("I13").Formula = "" Range("I14").Formula = "" Range("J11").Formula = "" Range("J12").Formula = "" Range("J13").Formula = "" Range("J14").Formula = "" End If Else End If End Sub

  • エクセル 関数 IF ORまたはVBA??

    以前質問した内容で教えてもらいました! セルのQ9に=IF(OR(U8="あ",U8="い",U8="う",U8="え",U8="お"),"","まで") 関数があり”あ””い””う””え””お”の時には空白で、それ以外は”まで”と表示させます! そこでこの関数にO9セルに”まで”と表示があった場合も Q9セルを空白表示させたいです! もしO9セルに”まで”以外が表示されたら Q9セルは”まで”のままで表示させたいです! 教えていただいたのが =IF(OR(U8={"あ","い","う","え","お"},O9="まで"),"","まで") です! 今回悩んでいるのは、上記のほかにO9の値が”朝”、”昼”、”夕”となった場合 Q9セルが”まで”と表示させたいです! (1)Q9=””にさせたいのはU8=(あ い う え お)とO9=(まで) (2)Q9=”まで”と表示させたいのはU8=(上記以外の文字が入った場合)      但しO9=(朝 昼 夕)の場合は”まで”と表示させたいです!  すいません!教えて下さい。 ちなみにこれらをVBAでするとどのようになるのでしょうか?

  • EXCEL VBAの シートへのデータの表示

    とても単純な条件式なのですが、 どうしても値が表示されるセルとされないセルがあります。 どうしたらよいのでしょうか? 下記のような指定をしています。    K3Sa2D、K3SaWDは変数で値は入っています。(デバッグモードで確認)    しかしQ68のセルは表示されるのに、L72には表示されません。    シートもSelectしています。 If K3Sa2D > 0 Then Range("Q68") = Range("Q68") + K3Sa2D ElseIf K3SaWD > 0 Then Range("L72") = Range("L72") + K3SaWD End If 単純なことかもしれませんが、宜しくお願いします。 どうか対応をおねがいします!

  • エクセルマクロでの計算について(2007)

    エクセルマクロ初心者です。 試行錯誤しながら作成しています。 セルB1には直接計算式を入れており(=(480+(A1)*10)/480*I1) その結果次第(70以下)でセルC1に計算結果(=(75-B1)*.48)をいれて 70より大きければセルC1に"-"を入れたいのですが上手く計算してくれません。 この処理を約65個のセルにしようと思っています。(セルの列はバラバラです) どうすればよいかご教示ください。 ちなみに現在作成している文は Private Sub 計算_Click() Worksheets("sheet2").Select If Range("B1").Value <= 70 Then Range("C1").Formula = "=(75 - (B1)) * 0.48" Else: Range("C1").Value = "-" End If End Sub よろしくお願いいたします。

  • 同一セルにIF文または任意の数値を入れたい

    同じシートで日割計算または月額計算をしたいです。 Range("G15").Formula = "=IF(V2=""日割計算"","""",Day(EOMONTH(P3,1)))" こうすると、日割計算のときは、G15は空欄になり、しないときは月の日数が自動入力されます。 そして日割計算するため、空欄のところに任意の日数たとえば、10を入れて保存します。 ところが当然のことながら再度シートを開くと、日数は空欄になってしまいます。 10を入れて保存しても、空欄にならないようにするには、どうしたらいいのでしょうか。

  • Excel2000で数式を配列にしてセルに放り込むと計算されない

    一定の法則で作成されて数式をセルに放り込む場合、 (1)のようにループさせると非常に時間がかかりま した。(実際の数式セルはもっとたくさんあります。) それで数式を一度、(2)のように配列に入れて放り 込んだところ約1/10の時間で処理はすみました。 ただ、放り込まれた数式が計算されずに式のまま表 示されてしまいます。 セルをダブルクリックして、その後、リターンを押すと計算され ます。 これを自動的に計算させることはできないのでしょうか? (1)    For i = 1 To 3      For j = 1 To 10        Cells(i, j).Formula = "数式"      Next j    Next i (2)    myFomula(3, 10) = "数式" '← この中に数式を入れる。    Range(Cells(1, 1), Cells(3, 10)).Formula = myFomula

専門家に質問してみよう