[[20240726132125]] 『商品別を店舗別にしたい』(わしゃ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『商品別を店舗別にしたい』(わしゃ)

  A      B    C     D   E  F  G   H

1
2 店舗コード 商品A  ロケーション  容量 入数 ( JANコード )
3 商品コード 店舗A  出荷ケース 出荷バラ
4 ■ 商 品 計 ■ 合計ケース 合計バラ
5 店舗コード 商品B  ロケーション  容量 入数 ( JANコード )
6 商品コード 店舗B  出荷ケース 出荷バラ
7 ■ 商 品 計 ■ 合計ケース 合計
8 商品コード 商品C  ロケーション  容量 入数 ( JANコード )
9 店舗コード 店舗B  出荷ケース 出荷バラ
10 店舗コード 店舗C  出荷ケース 出荷バラ
11 ■ 商 品 計 ■ 合計ケース 合計バラ

商品別で店舗と出荷数量が乗っているのですが、これを店舗別で商品と数量を出したいです。

< 使用 Excel:Excel2019、使用 OS:Windows11 >


 店舗コードを列挙しておいて、数量はSUMIF関数で集計
(マナ) 2024/07/26(金) 15:19:45

 >店舗別で商品と数量を出したい

 誤解がありました。
 Power Quweyで整形して、ピボットテーブルで集計すかね。
 それかマクロになりますね。。
(マナ) 2024/07/26(金) 19:49:08

 マクロを書いてみました。
 集計作業はピボットを利用したほうが
 理解しやすいマクロになったかもしれません。

 もしマクロを自分で書いたことがないのであれば、
 Power Query & ピボットのほうが簡単でおすすめ。

 Sub test()
    Dim dic As Object, dicT As Object, aryl As Object
    Dim r As Range, a As Range
    Dim v, i As Long
    Dim sc As String, sn As String
    Dim pc As String, pn As String
    Dim n1 As Long, n2 As Long, n3 As Long, n4 As Long
    Dim k1, k2

    Set dic = CreateObject("scripting.dictionary")
    Set dicT = CreateObject("scripting.dictionary")
    Set r = Cells(1).CurrentRegion
    Set r = Intersect(r, r.Offset(1))
    For Each a In r.Columns(5).SpecialCells(xlCellTypeBlanks).Areas
        v = a.Offset(-1, -4).Resize(, 4).Value
        pc = v(1, 1)    '商品コード
        pn = v(1, 2)    '商品名
        For i = 2 To UBound(v)
            sc = v(i, 1)    '店舗コード
            sn = v(i, 2)    '店舗名
            If Not dic.exists(sc) Then
                Set dic(sc) = CreateObject("scripting.dictionary")
                dic(sc)("hd") = Array(sc, sn, Empty, Empty)
                dicT(sc) = Array(Empty, Empty, 0, 0)
            End If
            If Not dic(sc).exists(pc) Then
                Set dic(sc)(pc) = CreateObject("scripting.dictionary")
            End If
            n1 = dic(sc)(pc)(2) + v(i, 3)    '出荷ケース
            n2 = dic(sc)(pc)(3) + v(i, 4)    '出荷バラ
            dic(sc)(pc) = Array(pc, pn, n1, n2)
            n3 = dicT(sc)(2) + v(i, 3)       '合計ケース
            n4 = dicT(sc)(3) + v(i, 4)       '合計バラ
            dicT(sc) = Array("■ 店 舗 計 ■", Empty, n3, n4)
        Next
    Next

    Set aryl = CreateObject("system.collections.arraylist")
    For Each k1 In dic.keys
        For Each k2 In dic(k1).keys
            aryl.Add dic(k1)(k2)
        Next
        aryl.Add dicT(k1)
    Next

    Worksheets.Add.Cells(1).Resize(aryl.Count, 4).Value _
        = Application.Transpose(Application.Transpose(aryl.toarray))

 End Sub
(マナ) 2024/07/27(土) 13:28:30

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.