前提・実現したいこと
完全なVBA初心者です。
自分で調べてできる範囲でチャレンジしてみましたが行き詰まり、ここで質問させていただきます。
Sheet1内のデータを、タイトル毎の集計だけではなく
購入国をJPかそれ以外かで分け、更に購入額+消費税額で集計したものと、購入額のみで集計したものを分けて算出したいです。
変数シートに記載したものをVBAで参照してその通りに足し合わせようとしましたがうまくいかず、
コードもめちゃくちゃなことになってしまいました。
どのようにすれば意図したデータの抽出ができるか教えていただきたいです。
データサンプル
【Sheet1】
コード
Option Explicit Public Sub 集計() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Dim dictTransaction As Object '取引区分 Dim dictTitle As Object 'タイトル Dim dictAmount As Object '金額 Dim s1 As String 'JP変数 Dim s2 As String 'JP以外変数 Dim s3 As String '入金額変数 Dim s4 As String '売上金額変数 Dim key As Variant Dim maxrow1 As Long Dim row1 As Long Dim row2 As Long Dim keys As Variant Dim colTest As New Collection Set dictAmount = CreateObject("Scripting.Dictionary") ' 連想配列の定義 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") Set sh3 = Worksheets("変数") maxrow1 = sh1.Cells(Rows.Count, "A").End(xlUp).Row '元データ 最終行を求める s1 = sh3.Range("D2").Address s2 = sh3.Cells("D3").Select s3 = sh3.Range("A2:A5").Address s4 = sh3.Range("B2:B3").Address For row1 = 2 To maxrow1 'タイトル+取引区分+購入国をキーとする key = sh1.Cells(row1, "G").Value & "|" & s3 & "|" & s1 '最初のキーの場合、値を0で初期化する If dictAmount.Exists(key) = False Then dictAmount(key) = 0 'dictBara(key) = 0 End If dictAmount(key) = dictAmount(key) + sh1.Cells(row1, "D").Value '金額を加算 Next '集計結果へ出力する '2行目以降をクリアする sh2.Rows("2:" & Rows.Count).ClearContents 'Sheet2の2行目以降をクリア row2 = 2 For Each key In dictAmount keys = Split(key, "|") 'キーを日付と商品コードにばらす sh2.Cells(row2, "A").Value = keys(0) 'タイトル sh2.Cells(row2, "B").Value = keys(1) '取引区別 sh2.Cells(row2, "C").Value = dictAmount(key) '金額 sh2.Cells(row2, "D").Value = keys(2) '購入国 row2 = row2 + 1 Next MsgBox ("完了") End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。