ここから本文です

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

mo2********さん

2019/6/2223:23:35

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

エクセル上で、以下のようなリスト【サマリー前】について、数量が一致する行をサマリーして【サマリー後】のような形で

集計したいのですが、いい手法が思い浮かばずに困っています。

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

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


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



■サマリー後
品名 業者 住所 数量
アイス 業者1 東京都渋谷区 3個
チョコ 業者2 千葉県市川市 5個
アイス 業者2 千葉県市川市 5個集計したいのですが、いい手法が思い浮かばずに困っています。

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

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


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



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

閲覧数:
35
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hot********さん

2019/6/2307:34:31

数量の列が数値の場合です。
つまり、3個はセルの値が3で書式などで「個」を付けている場合です。

Sub sample()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lastRow As Long
Dim r As Long
Set ws1 = Sheets("Sheet1") '元シート
Set ws2 = Sheets("Sheet2") '結果シート
ws2.Cells.Clear '結果クリア
lastRow = ws1.Range("A" & Rows.Count).End(xlUp).Row '元シートのA列最終行
ws1.Range("E2:E" & lastRow).Formula = "=A2&B2&C2" '元シートのE列を作業列にして"A&B&C"の値にする
ws1.Range("A1:E" & lastRow).Copy Sheets("Sheet2").Range("A1") '元シートのA:E列を結果シートのA1からにコピー
ws2.Range("D2:D" & Rows.Count).ClearContents '結果シートのD2から下を削除(結果の数量クリア)
ws2.Range("A1:C" & lastRow).RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes '結果シートのA:C列の重複削除
lastRow = ws2.Range("A" & Rows.Count).End(xlUp).Row '結果シートのA列最終行
ws2.Range("D2:D" & lastRow).Formula = "=SUMIF(" & ws1.Name & "!E:E," & ws2.Name & "!E2,Sheet1!D:D)" '両シートのE列(作業列)の値で元シートのD列の値の合計を求める式
ws2.Range("D2:D" & lastRow).Value = ws2.Range("D2:D" & lastRow).Value '結果シートのD列の式を価に変換
ws1.Range("E:E").ClearContents '元シートのE列(作業列)削除
ws2.Range("E:E").ClearContents '結果シートのE列(作業列)削除
End Sub

  • hot********さん

    2019/6/2307:53:37

    D列の数量が「2個」などの全角文字列の場合です。
    前の回答もですが、元データが"Sheet1"の場合で、"Sheet2"に結果を表示します。

    Sub sample()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lastRow As Long
    Dim r As Long
    Set ws1 = Sheets("Sheet1") '元シート
    Set ws2 = Sheets("Sheet2") '結果シート
    ws2.Cells.Clear '結果クリア
    lastRow = ws1.Range("A" & Rows.Count).End(xlUp).Row '元シートのA列最終行
    ws1.Range("E2:E" & lastRow).Formula = "=A2&B2&C2" '元シートのE列を作業列にして"A&B&C"の値にする
    ws1.Range("F2:F" & lastRow).Formula = "=SUBSTITUTE(D2,""個"","""")+0" '元シートのF列を作業列にしてD列の値から"個"を削除する(値にする)

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/6/24 13:07:21

ありがとうございました!

ベストアンサー以外の回答

1〜1件/1件中

しんせいさん

2019/6/2301:04:33

まず要素(品名/業者/住所)でソート
マクロで一行づつ参照して、前行と比較(要素が一致してたらトータルの変数に加算、そうでなければリセットして要素+トータルを書き出す)
って感じですかね。。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる