• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルvbaで、同じ番号の請求書の金額をまとめる方法を教えてください)

エクセルVBAで同じ番号の請求書の金額をまとめる方法

このQ&Aのポイント
  • エクセルVBAを使用して、同じ番号の請求書の金額をまとめる方法を教えてください。
  • データは日付、請求書番号、請求金額の列で構成されており、同じ請求書番号の合計金額をセルに表示したいです。
  • ランダムではなく、最大で5つ程度の同じ請求書番号が連続して入力されています。データの無い行で停止します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>行は最大でも100行程度ですが、データの無いところで止まって終了とします。 途中でデータがないところがあるという意味ではないと思いますが、データの最後のところまで調べます。 '標準モジュール推奨 Sub MacroTest1() Dim i As Long, j As Long Dim buf As Variant, ret As Double For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row  buf = Cells(i, 3).Value  If Cells(i, 2).Value <> Cells(i + 1, 2).Value Then    If j = 0 Then j = i    With Range(Cells(j, 4), Cells(i, 4))     .MergeCells = True     .HorizontalAlignment = xlCenter     .VerticalAlignment = xlCenter    End With    If buf + ret > 0 Then    Cells(j, 4).Value = buf + ret    End If    Cells(j, 4).NumberFormat = "#,##0"    ret = 0: j = 0  Else    If j = 0 Then j = i    ret = buf + ret  End If Next ''合計欄 'With Cells(i, 4) ' .NumberFormat = "#,##0" ' .HorizontalAlignment = xlCenter ' .Formula = "= SUM(R1C:R[-1]C)" 'End With End Sub

ssssh
質問者

お礼

ありがとうございました。 迅速なご回答に感謝します。 さっそく、試してみることにします。

ssssh
質問者

補足

試してみました。 質問のサンプルでは無事に起動しました。 ありがとうございました。 実際は、C列はI列に、D列はK列になるので列の数字を修正(3=>9 4=>11) したものを走らせたのですが、 これですと、 実行時エラー 13   型が一致しません という表示が出てしまいます。 デバックを見ると If buf + ret > 0 Then のところで止まっています。 解決策はご存知でしょうか。 また、ファイルにはオートフィルターがかけてあります。 これが影響してしまうのでしょうか。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

>C列はI列に、D列はK列になるので列の数字を修正(3=>9 4=>11) これはこれで良いと思います。 >実行時エラー 13   型が一致しません こちらで試してみましたが、エラーが出ませんので、たぶん、I列に数値データが入っていないからだと思います。以下のように直してみてください。 #3のコードの6行目付近の buf = Cells(i, 3).Value    ↓ buf = Val(Cells(i, 9).Value) '修正

ssssh
質問者

お礼

ご指摘通り修正したら動きました。 ご多忙の中、ありがとうございました。 本当に助かります。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

NO1,2です。 対象のシートタブ上で右クリック→コードの表示→以下のコード貼り付けてお試しください。 Sub sample01() Columns("D").Clear For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, "A") = "" Then Exit Sub amnt = amnt + Cells(i, "C") If Cells(i + 1, "B") = Cells(i, "B") Then cnt = cnt + 1 Else Range(Cells(i - cnt, "D"), Cells(i, "D")).Select With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .MergeCells = True End With Cells(i - cnt, "D") = amnt amnt = 0: cnt = 0 End If Next End Sub

ssssh
質問者

お礼

回答をありがとうございました。 先の方の方法でやってみましたので、貴方のは今後の参考にいたします。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

NO1です。 VBAでの回答希望を失念ておりました、参考程度に読み捨て下さい。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 (1)D1に=SUMIF(B:B,B1,C:C)として、フィルボタン(D1セルを選択すると右枠下の■表示される)をダブルクリック (2)D列の同じ請求書番号セルを結合し、中央表示に書式設定して下さい