こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Excel上、データを行毎にサマリーしたい

無知ですみません、どなたかエクセル関数、マクロを駆使した効率のいいやり方をご教授下さい。

エクセル上で、以下のようなリスト【サマリー前】について、数量が一致する行をサマリーして【サマリー後】のような形で集計したいのですが、いい手法が思い浮かばずに困っています。

数量の集計だけならピポットテーブルでも事足りると思うのですが、どうしてもは以下のようなリスト形式にまとめたいのです。
地道に1行1行手で集計しようとすると数万行あるため、ミスが怖くてできません。

何卒、よろしくお願い致します。


■サマリー前
品名   業者   住所      数量
アイス  業者1  東京都渋谷区  1個
アイス  業者1  東京都渋谷区  2個
チョコ  業者2  千葉県市川市  3個
チョコ  業者2  千葉県市川市  2個
アイス  業者2  千葉県市川市  4個
アイス  業者2  千葉県市川市  1個



■サマリー後
品名   業者   住所      数量
アイス  業者1  東京都渋谷区  3個
チョコ  業者2  千葉県市川市  5個
アイス  業者2  千葉県市川市  5個

投稿日時 - 2019-06-22 23:19:58

QNo.9628267

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

>エクセル関数、マクロを駆使した効率のいいやり方

添付画像を例にVBAのコード(マクロ)をポストします。
よかったら挑戦してみてください。
なお、業者が同じで住所が異なる場合は
別行に集計されます。


Option Explicit

Sub Sample()
 
 Dim cn As Object
 Dim rs As Object
 Dim SQL As String
 Dim shF As String
 Dim shT As Worksheet
 
 '入出力シートを定義
 shF = "FROM [Sheet1$A1:Z65000]"
 Set shT = ThisWorkbook.Sheets("Sheet2") '集計先シート
 
 'DBを定義、設定
 Set cn = CreateObject("ADODB.Connection")
 Set rs = CreateObject("ADODB.Recordset")
 cn.Provider = "Microsoft.ACE.OLEDB.12.0"
 cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1"
 cn.Open ThisWorkbook.FullName

 'SQL文を組立、実行
 SQL = "Select [商品],[業者],[住所],Sum([数量]) as 数量" & vbCrLf
 SQL = SQL & shF & vbCrLf
 SQL = SQL & "GROUP BY [商品],[業者],[住所]" & vbCrLf
 rs.Open SQL, cn

 '出力先をクリアーして結果セットを格納
 shT.Cells.ClearContents
 shT.Cells(1, 1).Value = "商品"
 shT.Cells(1, 2).Value = "業者"
 shT.Cells(1, 3).Value = "住所"
 shT.Cells(1, 4).Value = "数量"
 shT.Cells(2, 1).CopyFromRecordset rs

  '後処理
 rs.Close
 Set rs = Nothing
 cn.Close
 Set cn = Nothing

End Sub

投稿日時 - 2019-06-23 09:07:04

ANo.4

添付図参照
Sheet1 の範囲 A1:D1000 を選択 ⇒ Alt+MC ⇒ “上端行”以外のチェック外し ⇒
[OK] ⇒ 列範囲 A:C を選択 ⇒ Ctrl+C ⇒ Sheet2 のセル A1 を選択 ⇒ Ctrl+V ⇒
Sheet2 の列範囲 A:C が選択状態のままで、Alt+AM ⇒ [OK] ⇒ [OK] ⇒
Sheet1 のセル D1 を選択 ⇒ Ctrl+C ⇒ Sheet2 のセル D1 を選択 ⇒ Ctrl+V ⇒
次式を入力した Sheet2 のセル D2 のフィルハンドルを「エイヤッ!」とダブル
クリック
=SUMPRODUCT((品名=A2)*(業者=B2)*(住所=C2)*数量)

投稿日時 - 2019-06-23 01:15:26

ANo.3

数量の右側セルをEカラムと仮定して、
=A2&"-"&B2&"-"&C2
という式を入力して、オートフィルで最終行まで適用してください。
あとはeセルを対象に集計機能を使えば目的が達成できます。
https://forest.watch.impress.co.jp/docs/serial/exceltips/1078038.html

投稿日時 - 2019-06-23 00:49:19

ANo.2

エクセルではVBAを使わないと無理な気がします。
お手軽な方法は、Accessにそのテーブルをインポートしてしまえば、Accessのグループ化で簡単にできますよ。

投稿日時 - 2019-06-23 00:03:37

ANo.1

》 サマリーしたい
サマリーするとは日本語でどういう意味ですか?

投稿日時 - 2019-06-22 23:29:35

あなたにオススメの質問