• ベストアンサー

【VBA】SUMPRODUCTの使い方

1H程色々なサイトを探しましたが、参考例が見つからず、 下記(1)、(2)のコードをご教示下さい。 宜しくお願いします。 A列に品番が多数、B列に数量、C列に単価内訳1、D列に単価内訳2が有ります。 (1)C列の最終行は、B列*C列のSUMPURODUCTで集計(「最終行」はB列に数量が入っている最後の行で、変動します) (2)D列の最終行は、B列*D列のSUMPURODUCTで集計(同上)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

> VBAの実行結果が「値」ではなく、SUMPRODUCTの数式で残す事は可能でしょうか。 以下のような感じでいけると思います。 Sub Test2() Dim LastRow As Long LastRow = Cells(Rows.Count, "B").End(xlUp).Row Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Formula = "=SUMPRODUCT(B2:B" & LastRow & ",C2:C" & LastRow & ")" Cells(Rows.Count, "D").End(xlUp).Offset(1, 0).Formula = "=SUMPRODUCT(B2:B" & LastRow & ",D2:D" & LastRow & ")" End Sub

0611birth
質問者

お礼

kkkkkm様 目的を達成する事が出来ました。 教えて頂いたコードを読み解き、今後活用出来る様に勉強します。 有難う御座いました。

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

SUMPURODUCTの引数が長くなりそうなので先にそれぞれの列分Rangeオブジェクトに入れました。2行目からデータがあると考えています。 Sub Test() Dim BRange As Range, CRange As Range, DRange As Range Dim LastRow As Long LastRow = Cells(Rows.Count, "B").End(xlUp).Row Set BRange = Range(Cells(2, "B"), Cells(LastRow, "B")) Set CRange = Range(Cells(2, "C"), Cells(LastRow, "C")) Set DRange = Range(Cells(2, "D"), Cells(LastRow, "D")) Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Value = WorksheetFunction.SumProduct(BRange, CRange) Cells(Rows.Count, "D").End(xlUp).Offset(1, 0).Value = WorksheetFunction.SumProduct(BRange, DRange) Set BRange = Nothing Set CRange = Nothing Set DRange = Nothing End Sub

0611birth
質問者

お礼

kkkkkm 様 早速のご回答有難うございます。 もし宜しければもう一点だけお教え下さい。 VBAの実行結果が「値」ではなく、SUMPRODUCTの数式で残す事は可能でしょうか。

関連するQ&A