[[20181011135531]] 『重複データ複数条件の集計』(seitomo) ページの最後に飛ぶ

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

 

『重複データ複数条件の集計』(seitomo)

Sh1のA列に受付区分 B列に商品名 D列に店舗名 F列に個数 
といった表があります。

全ての項目の内容は、取込みデータで 毎回違います

下記条件でSh2に集計結果をマクロを使って表示させたいです。 

条件1:Sh1のA列が「受注」もしくは「予約」
条件2:Sh1のB列&D列の組み合わのもののF列の個数を合計する

《Sh1》

    A    B  D   F
 1  受注  あ 新宿  5
 2 失注  あ 大阪  2
 3 受注  い 新宿  8
 4 予約  う 名古屋 2
 5 予約  あ 新宿  1
 6 失注  い 福岡  2
 7 受注  あ 大阪  5

  ↓↓このように表示したいです

《Sh2》

   A  B   C
 1 あ   新宿  6
 2 あ   大阪  5
 3 い   新宿  8
 4 う   名古屋 2

よろしくお願いいたします。

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


ピボットテーブルで出来そうな気がするが、マクロしか認められないのですか?
http://www.excel.studio-kazu.jp/lib/e7c/e7c.html

(名無し) 2018/10/11(木) 14:25


マクロにせずとも、Sh2のC列に数式を埋めれば計算できそうですよ?
 C1: =SUMIFS('Sh1'!D:D,'Sh1'!A:A,"<>失注",'Sh1'!B:B,A1,'Sh1'!C:C,B1)
(???) 2018/10/11(木) 14:29

名無し様 ???様
ご回答いただき誠にありがとうございます。
記載を忘れており大変申し訳ございません。

Sh1の1行目が空白で項目が入っておらずデータは2行目から入っております。
その為、ピボッドが使用できない状況です。

また、Sh2は取り込み毎にクリアされる為、関数の入力ができない状況です。

何とぞよろしくお願いいたします。

(seitomo) 2018/10/11(木) 14:46


Sub main()
    Dim c As Range
    With Sheets("Sheet2")
        .Cells.ClearContents
        For Each c In Sheets("Sheet1").Range("A:A").SpecialCells(2)
            If c.Value = "受注" Or c.Value = "予約" Then
                .Range("A" & i + 1).Resize(, 3).Value = Array(c.Offset(, 1).Value, c.Offset(, 3).Value, c.Offset(, 5).Value)
                i = i + 1
            End If
        Next c
        For Each c In .Range("A:A").SpecialCells(2)
            c.Offset(, 3).Value = WorksheetFunction.SumIfs(.Range("C:C"), .Range("A:A"), c.Value, .Range("B:B"), c.Offset(, 1).Value)
        Next c
        .Range("C:C").Delete
        .Range("A:C").RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlNo
        With .Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A:A"), SortOn:=xlSortOnValues, Order:=xlAscending
        .SetRange Range("A:C")
        .Apply
        End With
    End With
End Sub
(mm) 2018/10/11(木) 14:55

C列が空いていたのですね。 見落としました。
mmさんとは別案で、数式を手入力したくないなら、マクロで埋めてしまう案です。 まぁ、1行目は実は空欄、ということですし、最初から本当のレイアウトを書かなかった部分はご自分で直してくださいね。
 Sub test()
    Dim AR As Object
    Dim vw As Variant
    Dim cw As String
    Dim i As Long
    Dim iMax As Long

    Set AR = CreateObject("System.Collections.ArrayList")
    With Sheets("Sh1")
        iMax = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 1 To iMax
            If .Cells(i, "A").Text <> "失注" Then
                cw = .Cells(i, "B").Text & "|" & .Cells(i, "D").Text
                If Not AR.Contains(cw) Then
                    AR.Add cw
                End If
            End If
        Next i
    End With
    AR.Sort
    With Sheets("Sh2")
        .Cells.ClearContents
        For i = 0 To AR.Count - 1
            vw = Split(AR(i), "|")
            .Cells(i + 1, "A").Value = vw(0)
            .Cells(i + 1, "B").Value = vw(1)
        Next i
        .Range("C1:C" & AR.Count).Formula = "=SUMIFS('Sh1'!E1:E" & iMax & _
                                                   ",'Sh1'!A1:A" & iMax & ",""<>失注""," & _
                                                    "'Sh1'!B1:B" & iMax & ",A1," & _
                                                    "'Sh1'!D1:D" & iMax & ",B1)"
    End With
 End Sub
(???) 2018/10/11(木) 16:48

???様

ご教示いただき誠にありがとうございます。
希望どおりの設定ができました。

この度は、誠にありがとうございました。
(seitomo) 2018/10/11(木) 18:00


コメント返信:

[ 一覧(最新更新順) ]


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