[[20181002104740]] 『12ヵ月分のシートを集約し、客先と種類別で12ヵ』(ののは) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『12ヵ月分のシートを集約し、客先と種類別で12ヵ月分の数量を月別の列を作り1行で表示したい。』(ののは)

12ヵ月分の売上データを月別にシートで分けております。
売上データは、1行に得意先、商品、荷姿、数量です。
1シートのデータは250行程あります。

各シートの数量を月別に横へ集約する方法を教えてください。
よろしくお願い致します。


[4月シート]

あ社 ポッキー   12本入り     2個
あ社 ポッキー   12本入り×12箱  1ケース
い社 コアラマーチ 30個       3ケース

[5月シート]

あ社 ポッキー   12本入り     0個
あ社 ポッキー   12本入り×12箱  3ケース
い社 コアラマーチ 30個       1ケース

[集約シート]
                   4月     5月
あ社 ポッキー   12本入り     2個    0個
あ社 ポッキー   12本入り×12箱  1ケース  3ケース
い社 コアラマーチ 30個       3ケース  1ケース

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 各シートの得意先、商品、荷姿の並びは全シート共通なのだろうか?
 例えば「あ社 ポッキー 12本入り」は必ず2行目で「あ社 ポッキー 12本入り×12箱」は3行目とか。
(ねむねむ) 2018/10/02(火) 11:29

各シートは、売上があったデータしかありません。

各月毎にデータの行は変わってきます。

よろしくお願い致します。m(_ _)m
(ののは) 2018/10/02(火) 11:38


 シート名が「4月」「5月」…で集計表の見出しもそれに合わせておく。
 で、集計シートのD2セルに
 =IF($A2="","",IFERROR(INDEX(INDIRECT(D$1&"!D1:D1000"),MATCH(1,INDEX((INDIRECT(D$1&"!A1:A1000")=$A2)*(INDIRECT(D$1&"!B1:B1000")=$B2)*(INDIRECT(D$1&"!C1:C1000")=$C2),0),0)),""))
 と入力して右及び下へフィルコピーではどうか?

(ねむねむ) 2018/10/02(火) 13:09


 なお、月別シートのデータは最大1000行まで対応している。
 もっとある場合は式中の「1000」をすべて同じ値で大きくしてくれ。
 (小さくするのも可)
(ねむねむ) 2018/10/02(火) 13:10

Sub main()
'シート名構成 = *月 及び 集約 のみから構成(*=1〜12)
    Dim sht As Worksheet, flg As Boolean, retu As Long, i As Long, j As Long, newrw As Long
    Sheets("集約").Cells.ClearContents
    For Each sht In ThisWorkbook.Sheets
        If sht.Name Like "*月" And Val(sht.Name) > 0 Then
            retu = WorksheetFunction.Max(4, Sheets("集約").Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Column)
            Sheets("集約").Cells(1, retu).Value = sht.Name
            i = 1
            Do While sht.Range("A" & i).Value <> ""
                flg = False
                For j = 1 To Sheets("集約").Range("A" & Rows.Count).End(xlUp).Row
                    If sht.Range("A" & i).Value = Sheets("集約").Range("A" & j).Value And sht.Range("B" & i).Value = Sheets("集約").Range("B" & j).Value And sht.Range("C" & i).Value = Sheets("集約").Range("C" & j).Value Then
                    flg = True
                    Sheets("集約").Rows(1).Find(sht.Name, , , xlWhole).Offset(j - 1).Value = sht.Range("D" & i).Value
                    End If
                Next j
                If flg = False Then
                    newrw = Sheets("集約").Range("A" & Rows.Count).End(xlUp).Offset(1).Row
                    Sheets("集約").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 3).Value = sht.Range("A" & i).Resize(, 3).Value
                    Sheets("集約").Rows(1).Find(sht.Name, , , xlWhole).Offset(newrw - 1).Value = sht.Range("D" & i).Value
                End If
                i = i + 1
            Loop
        End If
    Next sht
End Sub
(mm) 2018/10/04(木) 13:43

ねむねむ様

返事が遅くなり大変申し訳ございませんでした。
なかなか試す時間がなく、先程、式入力しましたら、きれいにデータが出てきました!!(^−^)
ありがとうございました。
(ののは) 2018/10/10(水) 17:29


コメント返信:

[ 一覧(最新更新順) ]


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