• ベストアンサー

【エクセルVBA】空欄を無視して乗算したいです

エクセルVBA初心者です。 test1 = .Range("H28") * .Range("H31") * .Range("H32") * .Range("H33") * .Range("H34") * .Range("H35") * .Range("H35") と置いているのですが 例えば、H31が空欄の場合もあります。 そうしますと、乗算の結果が0になってしまうので、空欄を無視して答えを出したいです。 エクセルではPRODUCT関数を使っていたのですが VBAですと、どのように記述してよいのか分かりませんでした。 アドバイスをいただけると幸いです。

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

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

 WorksheetFunction プロパティを利用して、VBA上でPRODUCT関数を動作させると良いと思います。 test1 = WorksheetFunction.Product(.Range("H28"), .Range("H31:H35"), .Range("H35")) 【参考URL】  よねさんのWordとExcelの小部屋 > Excel VBA入門 > 17.ワークシート関数を利用する > ワークシート関数を利用する(WorksheetFunction)   http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_ws_kansu.html#WorksheetFunction

otsukare3desu
質問者

お礼

うまくできました! ありがとうございます。 参考URLが、VBA初心者の私には他にも役立つ内容が 色々とありましたので ベストアンサーとさせていただきました。 これからも少しずつ勉強していきたいと思います。

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

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 質問のセル範囲の最後部分 >* .Range("H35") * .Range("H35") は >* .Range("H35") * .Range("H36") だとして・・・ 色々やり方はあると思いますが、VBAでもそのままPRODUCT関数が使用できますので、 Sub Sample1() Dim myRange As Range Set myRange = Union(Range("H28"), Range("H31:H36")) MsgBox WorksheetFunction.Product(myRange) End Sub ※ メッセージボックスに表示させているだけです。 みたいな感じではどうでしょうか?m(_ _)m

otsukare3desu
質問者

お礼

早々のご回答ありがとうございます! ご指摘の通り* .Range("H35") * .Range("H36")が正解です。お恥ずかしい記述ミスをしてしまいました(苦笑) うまくできました。ありがとうございます。

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

関連するQ&A

  • Excel VBA について

    ExcelのVBAのコードでB列の1カ所の「zz2300」を取得したいのですが、 どういう記述をすればよろしいのでしょうか。 ※その列には同じ文字は存在しません。 test=Range("b65535").End(xlUp).Rowの定義があるのですが使えますか?

  • エクセル VBAで

    はじめまして。 VBA初心者です。 エクセルVBAで以下のことをしようとしていますが、 「型が一致しません」とエラーが出ます。 何がおかしいのでしょうか。 やろうとしていることは、以下のようなことです。 G2に入っている値を参照し>0なら、H2に”上昇”と表示。 <0なら、”下降”、=0なら”トンボ”と表示させ、G3以降も G列にデータが入っている限りそのように表示したいと思っております。 よろしくお願いいたします。 Sub 陰陽() If Range("G2:G10000").Value > 0 Then Range("H2:H10000").Value = "上昇" ElseIf Range("G2:G10000").Value < 0 Then Range("H2:H10000").Value = "下降" ElseIf Range("G2:G10000").Value = 0 Then Range("H2:H10000").Value = "トンボ" End If End Sub

  • エクセルVBAではRounddown関数はつかえないのでしょうか?

    Excel2003SP2でVBAを使っています。 AAA = RoundDown(Range("A1"), 0) と入力してコンパイルすると 「コンパイルエラー SubまたはFunctionが定義されていません」 と表示されます。 エクセルVBAではRounddown関数は使用できないのでしょうか? それとも私の記述が何か間違っているのでしょうか

  • エクセルVBAの掛け算

    お世話になります。 VBA初心者です。 セルA1にはB1×C1の答え Range("A1").Value = Range("B1") * Range("C1") これを、B1が空白ならA1も空白に、そうでないならA1にB1×C1の答えを入れたいのですが 分かりません。 Range("A1").Value = "IF(B1="""","""",B1 * C1)"これだと A1に『 =IF(****** 』と関数が入ってしまいます。 どなたか 分かる方教えて下さい。 宜しくお願いします。

  • 16進数どうしの乗算

    Excel2003で、16進どうしの乗算をしたいです。もちろん関数は知っています(Sheet,VBA共に)。 しかしデータが掛ける数掛けられる数どちらも64bitあるので計算が出来ません。 そこでVBAを使ってコードを書いて計算しました。 でも私はその結果を64bitにしたいので、私の書いたコードでは10進数になってしまい、うまく行きません。 64bitにするというのは、Windowsについている電卓のように切り捨て処理をしたいからです。 頭を使って考えましたが、どうしても結局は10進数になってしまいます。Excelだからでしょうか。 ちなみに、64bitの数のうち、1つは固定された数です。 文章が汚くて解りづらいかも知れませんが、どうかお願いします。 *16進数の乗算をして2進数または16進数で結果を出す方法か、10進数でxxbitに揃える方法でお願いします。(それ以外でもやりたいことが出来れば気にしません。)

  • Excel VBAで、空欄セルの場合に「なし」と自動的に入力するには?

    ExcelのVBAで、ある列(例えばC列)のセルでEnterキーを押したとき、 空欄の場合のみ、自動的に「無し」と入力するにはどうしたら良いでしょうか? VBA初心者です。よろしくお願いします。

  • エクセルVBAでの「値貼り付け、乗算」について

    あるセル範囲に一度に一定の数を乗ずるには、その一定の数が入力されたセルをコピーしてから、形式を選択して貼り付けで、値貼り付け、そして「乗算」を指定するのがもっとも効率的かと思います。 これをVBAで行う場合、以下のようなコードになるかと思います。 Sub test05() Dim z As Range Set z = ActiveCell.SpecialCells(xlLastCell).Offset(1) z.Value = 2 z.Copy On Error GoTo line Range("A1:H3000").SpecialCells(xlCellTypeConstants, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply On Error GoTo 0 Application.CutCopyMode = False z.Clear Set z = Nothing Exit Sub line: MsgBox "対象内に数値がありません。" End Sub 上記コードは正しく作動します。 質問は、「その一定の数が入力されたセルをコピーしてから」の部分を、他の方法で代用できないかということです。上記コードでは最終セルのひとつ下、SpecialCells(xlLastCell).Offset(1)を使用していますが、SpecialCells(xlLastCell).Offset(1)が存在しない場合も理論上はありえます。 わざわざセルに転記し、それをコピーする代わりに、コード内で乗じる数を指定できないのでしょうか?

  • Excel VBA ""を含む関数を使うには

    Excel VBA ""を含む関数を使うには お世話になっております。 Excel VBAでMatch関数を使って下記のようにしたいのですが、 受け付けてもらえません。  n = Application.WorksheetFunction.MATCH("小計",range("B3:B10"),0) "小計"を""小計""と二重でくくれば良いような気がしたのですが、だめです。 どうすればよいでしょうか?

  • Excelで計算結果「0」を空欄にしたい

    Excelで作成した表に全て関数を埋め込んだとき、計算結果が「0」の場合は空欄になるようにするにはどうすればよいですか?

  • エクセルVBA(マクロ)の書き方で・・・

    VBA初心者です。よろしくお願いします。 エクセルマクロで、次のような関数を入力して、 =IF(月!$D4=稼動シート!$B$2,月!B4,"◆") 自動記録をさせると コードは、次のような「絶対参照セル」(←表現あっていますか?)の表示になります。 『Range("C4").Select ActiveCell.FormulaR1C1 = "=IF(月!RC4=稼動シート!R2C2,月!RC[-1],""◆"")"』 わたしのスキルでは、この記述コードを参考に別のコードを書こうにも理解と応用が効きません。 そこで、VBAコードにも 『Range("C4").Select  =IF(月!$D4=稼動シート!$B$2,月!B4,"◆")』 と単純に書いてはいけないのでしょうか?また、どうすれば実際のシートで入力した関数と同じような表現でVBAにもかけるのでしょうか? ご指導お願いいたします。

このQ&Aのポイント
  • モノクロ印刷を170枚したところで、新品同梱のブラックトナーが交換になりました。初期不良でしょうか?どこに相談すればいいでしょうか?
  • お使いの環境はiOSで、接続はUSBケーブルです。Wi-Fiルーターは不使用で、関連するソフト・アプリも特にありません。電話回線の種類も不明です。
  • ブラザー製品に関する質問です。
回答を見る