• ベストアンサー

【エクセル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