グループごとの集計、全体の集計について
いつもお世話になっております。
VBAでの課題で行き詰ってしまったので、どなたかお力をお貸しいただけないでしょうか?
コードの効率のよい書き方が分からないため
非常に長くなってしまいますが、すべて書かせていただきます。
課題は
A グループ1 商品1 300000
A グループ1 商品2 460000
A グループ2 商品1 120000
A グループ2 商品2 80000
A グループ3 商品3 71000
B グループ1 商品1 200000
B グループ1 商品2 208000
B グループ2 商品1 2300
となっている表を
A グループ1 商品1 300000
A グループ1 商品2 460000
グループ1 760000
A グループ2 商品1 120000
A グループ2 商品2 80000
グループ2 200000
A グループ3 商品3 71000
グループ3 71000
支店A 1031000
B グループ1 商品1 200000
B グループ1 商品2 208000
グループ1 408000
B グループ2 商品1 2300
グループ2 2300
支店B 410300
合計(A+B) 1441300
このように、グループが変わるとグループ合計を出し、
支店名が変わると支店合計を出し、
最終的にすべての合計を出力するコーディングをしています。
今回は配列変数を使わないということなのですが
以下のような流れで考えました
'変数の宣言
Dim X As String
Dim Y As String
Dim siten_A As String '支店名
Dim siten_B As String
Dim kubun_A As String '区分
Dim kubun_B As String
Dim syohin_A As String '商品名
Dim syohin_B As String
Dim kingaku_A As Long '金額
Dim kingaku_B As Long
Dim k_goukei As Long '区分合計
Dim s_goukei As Long '支店合計
Dim goukei As Long '合計
'ファイルを開く
Open "C:\My Documents\INFILE.txt" For Input As #1
Open "C:\My Documents\OUTFILE.txt" For Output As #2
'1行目を読み込み、変数に格納
Line Input #1, X
siten_A = Left(X, 10)
kubun_A = Mid(X, 11, 10)
kingaku_A = Right(X, 8)
syohin_A = Mid(X, 21, 15)
Do Until EOF(1)
'2行目以降を読み込み変数に格納
Line Input #1, Y
siten_B = Left(Y, 10)
kubun_B = Mid(Y, 11, 10)
kingaku_B = Right(Y, 8)
syohin_B = Mid(Y, 21, 15)
If siten_A = siten_B And kubun_A = kubun_B Then
Print #2, siten_A & kubun_A & syohin_A & kingaku_A
k_goukei = kingaku_A + kingaku_B
kingaku_A = kingaku_B
siten_A = siten_B
kubun_A = kubun_B
syohin_A = syohin_B
ElseIf siten_A = siten_B And kubun_A <> kubun_B Then
Print #2, siten_A & kubun_A & syohin_A & kingaku_A
s_goukei = s_goukei + k_goukei
k_goukei = k_goukei
Print #2, k_goukei
siten_A = siten_B
kubun_A = kubun_B
syohin_A = syohin_B
kingaku_A = kingaku_B
Else
Print #2, siten_A & kubun_A & syohin_A & kingaku_A
Print #2, k_goukei
s_goukei = s_goukei + k_goukei
Print #2, s_goukei
siten_A = siten_B
kubun_A = kubun_B
syohin_A = syohin_B
kingaku_A = kingaku_B
End If
Loop
Print #2, siten_A & kubun_A & syohin_A & kingaku_A
k_goukei = k_goukei + kingaku_A
Print #2, k_goukei
s_goukei = s_goukei + k_goukei
Print #2, s_goukei
goukei = goukei + s_goukei
Print #2, goukei
Close #1
Close #2
End Sub
となっています。
これを実行すると、各レコードを出力した後に
合計を出したいのですが
各レコードの金額が、一つ前の金額に足されたものになっており
期待通りの出力ができません。
前半で間違っているため、後半の支店合計や全体の合計も
変わってきてしまい、どこをなおせばよいかわからない状態です。
VBは初心者なので、長くなってもかまわないので
教えていただければと思います。
長くなりましたが、よろしくお願いします。
お礼
ありがとうございます。 うまく出来ました。