前提・実現したいこと
ExcelVBAで、1回のマクロ実行で、元データから、集計表シートに伝票番号毎に転記・集計を行いたいです。
発生している問題・エラーメッセージ
1回のマクロで処理が完結出来ません。
転記先の集計表シートの情報が空の状態で、
1回マクロの実行をすると、明細の転記が行われません。
続けて、もう1度実行すると、明細の転記が行われます。
該当のソースコード
Option Explicit Sub 支払明細() Dim A As New Collection Dim i As Long, n As Long, sLastRow As Long, dLastRow As Long, r As Long Dim sourceData As Worksheet, resultData As Worksheet Dim Kotae As Range, sArea1 As Range, sArea2 As Range, sKey2 As Range Set sourceData = Sheets("元データ") Set resultData = Sheets("集計表") Set Kotae = sourceData.Range("O:O") '仕入額 Set sArea1 = sourceData.Range("B:B") '伝票番号 Set sArea2 = sourceData.Range("W:W") '勘定 Set sKey2 = resultData.Range("D12") '手数料 sLastRow = sourceData.Cells(Rows.Count, 2).End(xlUp).Row '元データの最終行取得 dLastRow = resultData.Cells(Rows.Count, 2).End(xlUp).Row '集計表の最終行取得 sourceData.Cells.Replace what:=" ", Replacement:="", matchbyte:=False '半角スペースを削除 sourceData.Range("A1").CurrentRegion.Columns.AutoFit '列幅を自動調整 resultData.Range("A12").CurrentRegion.Offset(1, 0).ClearContents '前回集計結果をクリア '伝票番号を重複しないで転記 With sourceData On Error Resume Next For i = 2 To sLastRow .Cells(i, 2) = "'" & .Cells(i, 2) A.Add .Cells(i, 2), .Cells(i, 2) Next i On Error GoTo 0 For i = 1 To A.Count resultData.Cells(i + 12, 2) = A(i) Next i End With With resultData '-----------明細を転記-------------- For n = 13 To dLastRow .Cells(n, 1) = .Cells(n, 1).Row - 12 '行番号付与 .Cells(n, 3) = WorksheetFunction.SumIfs(Kotae, sArea1, .Cells(n, 2)) '納品番号毎の支払総額集計 .Cells(n, 4) = WorksheetFunction.SumIfs(Kotae, sArea1, .Cells(n, 2), sArea2, sKey2) '納品番号毎の手数料集計 .Cells(n, 5) = .Cells(n, 3) - .Cells(n, 4) '手数料を除いた支払額を計算 For i = 2 To sLastRow If .Cells(n, 4) = 0 Then .Cells(n, 9) = 1 '手数料が0ならば、振込払欄に1 If .Cells(n, 2) = sourceData.Cells(i, 2) Then If sourceData.Cells(i, 3) = 1 Then .Cells(n, 6) = sourceData.Cells(i, 7) '処理年月日 .Cells(n, 7) = sourceData.Cells(i, 5) '商品区分 .Cells(n, 8) = sourceData.Cells(i, 18) '商品名 End If End If Next i Next n '------------並び替え-------------- .Range("A12").CurrentRegion.Offset(0, 1).Sort _ key1:=.Range("F12"), order1:=xlAscending, _ key2:=.Range("B12"), order2:=xlAscending, _ Header:=xlYes '-----------合計を集計------------- r = resultData.Cells(Rows.Count, 2).Row .Range("C3") = WorksheetFunction.SumIf(.Range(.Cells(13, 9), .Cells(r, 9)), "1", .Range(.Cells(13, 3), .Cells(r, 3))) '振込払の合計集計 .Range("C4") = WorksheetFunction.Sum(.Range(.Cells(13, 3), .Cells(r, 3))) '支払合計集計 .Range("C6") = WorksheetFunction.Sum(.Range(.Cells(13, 4), .Cells(r, 4))) '手数料合計集計 End With End Sub
試したこと
ステップインをしていくと、
1回目は、伝票番号を重複しないで転記の後、明細を転記を飛ばして、並び替えに進んでしまっています。
集計表シートには、伝票番号のみが転記された状態です。
その状態で、2回目の実行をすると、明細を転記の処理が反映されました。
補足情報(FW/ツールのバージョンなど)
Excel2019
見様見真似で作ってみましたが、お見苦しい点ばかりだと思います。
わかりやすいコードの書き方ありましたら、合わせてお教えいただきたいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/14 06:08