[[20220111093520]] 『集計方法』(あい) ページの最後に飛ぶ

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

 

『集計方法』(あい)

表1

      A       B      C     ※A1:A3、A4:A5はセルで結合されています
1   北海道  りんご  100      Aの項目は変わりません
2           みかん   50      B,Cは固定ではありません
3           ぶどう  150 
4   青森    りんご  200
5           ぶどう  100 
6   岩手    りんご  200

表2

      A       B      C
1   りんご  北海道  100
2           青森    200
3           岩手    200 
4   みかん  北海道  100
5   ぶどう  北海道  150
6           青森    100

表2の情報を表1にまとめ直したいのですが、どういった方法で集計するのが良いでしょうか?宜しくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


北海道のミカンはなぜまとめたら50が100になるのでしょう?
(通りすがり) 2022/01/11(火) 10:31

まとめる前のデータには、同じ地域でおなじ果物のデータが
複数行ある可能性はありますか?
その場合は、まとめた後は複数行の数値を合計した数値
なりますか?
(通りすがり) 2022/01/11(火) 10:33

同じ果物が複数行になることはありません。
(あい) 2022/01/11(火) 10:40

すみません。

表2のみかんは50の間違いです。
(あい) 2022/01/11(火) 13:44


Sub main()
    'Sheet1からSheet2にまとめ
    Dim c As Range
    Sheets(2).Cells.Delete
    Sheets(1).Cells.Copy Sheets(2).Range("A1")
    Sheets(2).Cells.UnMerge
    For Each c In Sheets(2).Range("B:B").SpecialCells(2)
        If c.Offset(, -1).Value = "" Then c.Offset(, -1).Value = c.Offset(-1, -1).Value
    Next c
    With Sheets(2)
        .Columns(2).Cut
        .Columns(1).Insert Shift:=xlToRight
        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=.Range("A:A")
        .Sort.SetRange .Range("A:C")
        .Sort.Apply
        For Each c In .Range("A:A").SpecialCells(2)
            If WorksheetFunction.CountIf(.Range("A1:A" & c.Row), c.Value) <> 1 Then c.Value = ""
        Next c
    End With
End Sub
(mm) 2022/01/12(水) 10:14

 作業列使いまくりで関数でやってみた。
 表1がSheet1で表2がSheet2だとする。
 またSheet1のD,E,F列、Sheet2のD列を作業列とする。
 Sheet1
 D1セル:=A1
 D2セル:=IF(B2="","",IF(A2="",D1,A2))   
 D2セルを下へフィルコピー。
 E2セル:=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($1:$50)/(COUNTIF(INDIRECT("B1:B"&ROW($1:$50)),B$1:B$50)=1),ROW(A1))),"")
 E2セルを下へフィルコピー。
(ねむねむ) 2022/01/12(水) 10:58

 すまない。
 上記のE2セルはE1セルの間違い。

 Sheet1
 F1セル:1
 F2セル:=IF(E1="","",F1+COUNTIF(B:B,E1))
 F2セルを下へフィルコピー。
 Sheet2
 A1セル:=D1
 A2セル:=IF(D2=D1,"",D2)
 A2セルを下へフィルコピー
 B1セル:=IF(D1="","",INDEX(Sheet1!D:D,AGGREGATE(15,6,ROW($1:$50)/(Sheet1!B$1:B$50=D1),COUNTIF(D$1:D1,D1))))
 B1セルを下へフィルコピー。
(ねむねむ) 2022/01/12(水) 11:02

 Sheet2
 C1セル:=IF(D1="","",SUMIFS(Sheet1!C:C,Sheet1!B:B,D1,Sheet1!D:D,B1))
 C1セルを下へフィルコピー。
 D1セル:=INDEX(Sheet1!E:E,MATCH(ROW(A1),Sheet1!F:F,1))
 D1セルを下へフィルコピー。
 これで完了。
 なお上記では元データが最大50行までに対応している。
 もっとある場合は式中の$50をおおきくしてくれ。
(ねむねむ) 2022/01/12(水) 11:05

コメント返信:

[ 一覧(最新更新順) ]


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