- ベストアンサー
集計方法。
4つの列を判定し集計する方法をご教授ください。 よろしくお願いします。 商品名 型式 配送数 数量 テレビ 21型 x1 5台 テレビ 28型 x1 3台 洗濯機 x1 1台 テレビ 21型 x2 5台 テレビ 21型 x1 3台 上記のように、ABCD列に入力された際、別シートにて集計をしたいと思います。 テレビ 21型 x1 8台 テレビ 21型 x2 5台 テレビ 28型 x1 3台 洗濯機 x1 1台
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
シート1 A B C D 1 商品名 型式 配送数 数量 2 テレビ 21型 x1 5台 3 テレビ 28型 x1 3台 4 洗濯機 x1 1台 5 テレビ 21型 x2 5台 6 テレビ 21型 x1 3台 シート2 A B C D 1 テレビ 21型 x1 2 テレビ 21型 x2 3 テレビ 28型 x1 4 洗濯機 x1 D2 =SUMPRODUCT((Sheet1!$A$2:$A$6=A1)*(Sheet1!$B$2:$B$6=B1)*(Sheet1!$C$2:$C$6=C1)*(Sheet1!$D$2:$D$6)) で下にフィル。
その他の回答 (4)
[ピボットテーブル](ピボテ)の機能を利用すれば、関数無知の人でも簡単に(同シートでも、別シートでも)集計できますよ。ただし、「ABCD列に入力された際」に[ピボットテーブル ツールバー]の[データの更新]ボタンをクリックする必要があります。 ピボテの結果だけを示しておきます。 合計/数量 商品名 型式 配送数 合計 テレビ 21型 x1 8 x2 5 28型 x1 3 洗濯機 (空白) x1 1
お礼
これも便利な方法ですね。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17070)
例データ 商品名 型式 配送数 数量台 テレビ 21型 x1 5 テレビ 28型 x1 2 洗濯機 x1 1 テレビ 21型 x2 5 テレビ 21型 x1 3 まず台数は台は表示形式で出し、値は数値にすること。上記は修正済み。 (1)まずA+B+C列でユニーク(重複しない)組み合わせを得る A1:C6を範囲指定(第1行目も含める) データーフィルターフィルタオプションの設定 指定した範囲 (設定済み) 抽出範囲 G1:I6 重複するレコードは無視する OK 結果G1:I5 商品名 型式 配送数 テレビ 21型 x1 テレビ 28型 x1 洗濯機 x1 テレビ 21型 x2 ーー J2に =SUM(IF((A2:A6=G2)*(B2:B6=H2)*(C2:C6=I2),D2:D6,0)) と入れてShift,CTRL,Enterのキーを同時押しする(配列数式) J2の式をj5まで複写する。 結果 商品名 型式 配送数 テレビ 21型 x1 8 テレビ 28型 x1 2 洗濯機 x1 1 テレビ 21型 x2 5 === 以上は同一シートに結果が出ているが、フィルタ結果は別シートに出せないと思うので、別シートにコピーする。 そして そしてSheet2のD2に =SUM(IF((Sheet1!A2:A6=Sheet1!A2)*(Sheet1!B2:B6=Sheet1!B2)*(Sheet1!C2:C6=Sheet1!C2),Sheet1!D2:D6,0)) と入れてShift,CTRL,Enterのキーを同時押しする(配列数式) D2の式をD5まで複写する。 結果はA1:D5に 商品名 型式 配送数 テレビ 21型 x1 8 テレビ 28型 x1 2 洗濯機 x1 1 テレビ 21型 x2 5
お礼
このような方法もあるのですか。 ありがとうございました。
- dokinhime
- ベストアンサー率30% (4/13)
VBA での方法です。 同じシートのG列E列に集計がでますので、 お好きなシートに移動させてください。 標準モジュールを挿入し、貼り付けて、データの入力されているシートを選択した状態でマクロから実行して下さい。 Sub 集計() Dim LastRow As Long Dim MyRow As Long Dim MyTitle As String Dim FirstRow As Long Dim SumRow As Long On Error GoTo ErrHdl Application.ScreenUpdating = False 'データ最終行取得 LastRow = Range("a1").End(xlDown).Row Range("E1") = "title" Range("E2") = "=trim(A2) & trim(B2) & trim(C2)" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E" & LastRow), Type:=xlFillDefault Range("F1") = "num" Range("F2") = "=value(LEFT(TRIM(D2),LEN(TRIM(D2))-1))" Range("F2").Select Selection.AutoFill Destination:=Range("F2:F" & LastRow), Type:=xlFillDefault '元の並び順 Range("g1") = "sort" Range("g2") = "1" Range("G2").Select Selection.AutoFill Destination:=Range("G2:G" & LastRow), Type:=xlFillSeries Range("E1").Select '並び替え Range("A1:g8").Sort Key1:=Range("E1"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal '集計 MyTitle = Cells(2, 5).Text MyRow = 2 SumRow = 2 FirstRow = 2 Do Until Cells(MyRow, 1) = "" Do Until Cells(MyRow, 5) <> MyTitle MyRow = MyRow + 1 Loop Cells(SumRow, 9) = MyTitle Cells(SumRow, 10) = "=SUM(f" & FirstRow & ":f" & MyRow - 1 & ")" MyTitle = Cells(MyRow, 5).Text FirstRow = MyRow SumRow = SumRow + 1 Loop Columns("I:J").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '不要データ削除 Columns("E:F").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("E1").Select Range("A1:E10").Sort Key1:=Range("E1"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Columns("E:E").ClearContents ErrHdl: Application.ScreenUpdating = True End Sub
お礼
VBAは全くの無知なのですが、参考にさせて頂きます。 ありがとうございました。
- legacy_bp5_20r
- ベストアンサー率23% (400/1688)
SUMIFで出来ますよ。
お礼
ありがとうございます。
お礼
助かりました。 ありがとうございました。