• ベストアンサー

集計方法。

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台

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

シート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)) で下にフィル。

zrt11ys
質問者

お礼

助かりました。 ありがとうございました。

その他の回答 (4)

noname#204879
noname#204879
回答No.5

[ピボットテーブル](ピボテ)の機能を利用すれば、関数無知の人でも簡単に(同シートでも、別シートでも)集計できますよ。ただし、「ABCD列に入力された際」に[ピボットテーブル ツールバー]の[データの更新]ボタンをクリックする必要があります。 ピボテの結果だけを示しておきます。 合計/数量 商品名   型式  配送数 合計 テレビ   21型  x1     8           x2     5       28型  x1     3 洗濯機   (空白) x1     1

zrt11ys
質問者

お礼

これも便利な方法ですね。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

例データ 商品名 型式 配送数 数量台 テレビ 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

zrt11ys
質問者

お礼

このような方法もあるのですか。 ありがとうございました。

  • dokinhime
  • ベストアンサー率30% (4/13)
回答No.3

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

zrt11ys
質問者

お礼

VBAは全くの無知なのですが、参考にさせて頂きます。 ありがとうございました。

回答No.1

SUMIFで出来ますよ。

zrt11ys
質問者

お礼

ありがとうございます。

関連するQ&A