同一内容が入力された複数行の合計を出す方法を教えてください。
エクセルの表でA列に商品名、B列に色の種類、C列~E列にサイズごとの個数がある、まったく同じ商品が、複数行にランダムに掲載されています。
A列、B列で同一の情報を持つ商品について、C列~E列のサイズごとの合計を出したいのです。
例)商品名、色、サイズ個数(C列:Sサイズ、D列:Mサイズ、E列:Lサイズの順です。)
A1:Tシャツ B1:ホワイト C1:5 D1:4 E1:3
A2:Tシャツ B2:ブラック C2:3 D2:5 E2:5
A3: Tシャツ B2:ホワイト C3:3 D3:3 E3:2
A4: Tシャツ B2:ブラック C4:3 D4:2 E4:3
各商品が300行程あり、オートサムではやりきれません。
すべての各商品(A列、B列が一致するもの)を1行ごとにまとめたシートを作成するにはどうしたら良いでしょうか?
No.7
- 回答日時:
見当違いの返答でしたらごめんなさい。
たぶん 並べ替え→集計(excel2007だと小計) で
ご希望に添えませんか?
並べ替えちゃいけなかったかな?
参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/syuke …
ありがとうございます。
集計をやってみたのですが、条件指定で躓きました。
今後この機能についても勉強させていただきます。
とても参考になりました。ありがとうございました。
No.6ベストアンサー
- 回答日時:
merlionXXです。
お書きになった質問の通り、関数で回答すれば、「質問の例が簡単すぎたようです」と言われ、再度VBAで回答すれば、「例は大変簡略化しておりまして、実際には~」とおっしゃる。
どうしてそんなに情報を小出しにするのかなあ?
しかも新たに出された条件で「商品情報がA~Dまでが商品情報」??
A~Dまでが商品情報だからなんなんですか?
A~Dまでがすべて一致することが必要なんですか?それとも別に何か違う条件があるのですか?
一応、A~Dまでが一致するもので集計するというコードです。
データがあるシート名はSheet1
サイズ別に個数をだすシート名はSheet2とします。
今後は、もう少し回答者のことも考えて、必要な情報は正しく、洩れなく、わかりやすく質問なさるようにお願いしますね。
Sub test02()
Dim myDic As Object, ms As Object, ns As Object
Dim c As Range, i As Integer, dta As String
Set myDic = CreateObject("Scripting.Dictionary")
Set ms = Sheets("Sheet1")
Set ns = Sheets("Sheet2")
For i = 4 To 8
For Each c In ms.Range(ms.Cells(1, "A"), ms.Cells(Rows.Count, "A").End(xlUp))
dta = c.Value & ":" & c.Offset(0, 1).Value & ":" & c.Offset(0, 2).Value & ":" & c.Offset(0, 3).Value
If Not myDic.exists(dta) Then
myDic.Add dta, c.Offset(0, i).Value
Else
myDic(dta) = myDic(dta) + c.Offset(0, i).Value
End If
Next c
ns.Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys)
ns.Cells(1, i + 1).Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Items)
myDic.RemoveAll
Next i
ns.Columns("A:A").TextToColumns DataType:=xlDelimited, Destination:=Range("A1"), Other:=True, OtherChar:=":"
Set myDic = Nothing
Set ms = Nothing
Set ns = Nothing
End Sub
どうもありがとうございました。
こちらで解決できました。これから大変役に立ちそうです。
大変感謝しております。
また何度も大変申し訳ございませんでした。
オートサムくらいしか使えないのにも関わらず
データを見れば自分で仕組みが分かるだろうなどと
思っていたものですから大変失礼いたしました。
No.5
- 回答日時:
No4で貼ったコードにコピーミスがあったので貼りなおします。
Sub test01()
Dim myDic As Object, ms As Object, ns As Object
Dim c As Range, i As Integer, dta As String
Set myDic = CreateObject("Scripting.Dictionary")
Set ms = Sheets("Sheet1")
Set ns = Sheets("Sheet3")
For i = 2 To 4
For Each c In ms.Range(ms.Cells(1, "A"), ms.Cells(Rows.Count, "A").End(xlUp))
dta = c.Value & ":" & c.Offset(0, 1).Value
If Not myDic.exists(dta) Then
myDic.Add dta, c.Offset(0, i).Value
Else
myDic(dta) = myDic(dta) + c.Offset(0, i).Value
End If
Next c
ns.Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys)
ns.Cells(1, i).Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Items)
myDic.RemoveAll
Next i
ns.Columns("B:B").Insert Shift:=xlToRight
ns.Columns("A:A").TextToColumns DataType:=xlDelimited, Destination:=Range("A1"), Other:=True, OtherChar:=":"
Set myDic = Nothing
Set ms = Nothing
Set ns = Nothing
End Sub
この回答への補足
どうもありがとうございます。
私があげた例では、これで完璧でした。
しかし、例は大変簡略化しておりまして、実際には列が I 列(9列)まであります。
そのうち、A~Dまでが商品情報、E~Iまでがサイズ別個数となります。
サイズはS~XLまであります。(例ではS~Lでした。)
返答を見ればアレンジできるだろうと思っていたのですが
私には高度すぎて、どこを直したらよいのかさっぱりわかりませんでした。
恐縮ですが、このような状況ですとどこを修正すれば良いでしょうか。
よろしくお願いいたします。
No.4
- 回答日時:
No1で回答したmerlionXXです。
> A列とB列の組み合わせを拾い出すこと自体が大変困難で
では、VBAでの方法です。
存在するすべての組み合わせおよび組み合わせごとのサイズ別の合計を求めます。
以下の手順でやってみてください。
データがあるシート名はSheet1
サイズ別に個数をだすシート名はSheet2とします。
ちがっている場合は下記コードで
Set ms = Sheets("Sheet1")
Set ns = Sheets("Sheet2")
のところの ”” 内の名前を変更するか、エクセルの実際のシート名を変えるかどちらかをしてください。
1.AltキーとF11キーをいっしょに押して Visual Basic Editor を呼び出します。
2.Visual Basic Editor のメニューから挿入、標準モジュールで、出てきたコードウィンド(右側の白い広い部分)に下記のコード(SubからEnd Subまで)をコピーして貼り付けします。
3.また、Alt+F11キーでワークシートへもどります.
4.エクセルのメニューから、「ツール」、「マクロ」、「マクロ」で出てきたマクロ名(test01)を選択して実行します。
Sub test01()
Dim myDic As Object, ms As Object, ns As Object
Dim c As Range, i As Integer, dta As String
Set myDic = CreateObject("Scripting.Dictionary")
Set ms = Sheets("Sheet1")
Set ns = Sheets("Sheet2")
For i = 2 To 4
For Each c In ms.Range(ms.Cells(1, "A"), ms.Cells(Rows.Count, "A").End(xlUp))
dta = c.Value & ":" & c.Offset(0, 1).Value
If Not myDic.exists(dta) Then
myDic.Add dta, c.Offset(0, i).Value
Else
myDic(dta) = myDic(dta) + c.Offset(0, i).Value
End If
Next c
ns.Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys)
ns.Cells(1, i).Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Items)
myDic.RemoveAll
Next i
ns.Columns("B:B").Insert Shift:=xlToRight
ns.Columns("A:A").TextToColumns Destination:=Range("A1"), OtherChar:=":"
Set myDic = Nothing
Set ms = Nothing
Set ns = Nothing
End Sub
No.3
- 回答日時:
作業セルを使ってオートフィルタとSUBTOTAL関数で
C列を挿入し、C2に =A3&"/"&B3 下方にオートフィル
オートフィルタを設定し、C列で抽出
抽出したデータの合計を出す最下行に
=SUBTOTAL(9,D2:D5)
で可視セルの合計が計算される。
ただし、「組み合わせが100通り」だと抽出は大変ですが!
お試しを
オートフィルタ(データ抽出)
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filte …
データベースやリストの集計はお任せ関数「SUBTOTAL」
これだけで11種類の集計が出来ちゃうよ^^
http://akubizzz.hp.infoseek.co.jp/sub91.html
どうもありがとうございました。解決いたしました。
今回は組み合わせが単純ではなかったため最終的に
商品情報が4列で124の組み合わせがありましたので
この方法は最終的に使いませんでしたが今後の参考とさせていただきました。ありがとうございました。
No.2
- 回答日時:
こんばんは!
一例ですが・・・
A列の商品数とB列の色の数によって組み合わせの数がかなりの量になると考えられます。
しかしとりあえずオートフィルタなどで別Sheetにその組み合わせの数だけの表を作るしかないのではないでしょうか?
Sheet1に元データがあり、オートフィルタで商品と色の組み合わせを表示させ
一つ一つSheet2にコピーします。
その後、↓の画像でいえば、Sheet2のC2セルに
=SUMPRODUCT((Sheet1!$A$2:$A$10=Sheet2!$A2)*(Sheet1!$B$2:$B$10=Sheet2!$B2)*(Sheet1!C$2:C$10))
としてオートフィルでコピーしてみてください。
(※データは300行あるみたいなので数式の「10」のところをアレンジしてください。)
何とか数の合計は出来ると思います。
このSheet2の表を作るための質問のような感じもしますが・・・
この程度の回答しか出来ませんが、
的外れの回答なら読み流してください。m(__)m
どうもありがとうございました。解決いたしました。
今回は組み合わせが単純ではなかったため最終的に
商品情報が4列で124の組み合わせがありましたので
この方法は最終的に使いませんでしたが今後の参考とさせていただきました。ありがとうございました。
No.1
- 回答日時:
300行までなら
C列の合計は
=SUMPRODUCT((A1:A300="Tシャツ")*(B1:B300="ホワイト")*C1:C300)
D列の合計は
=SUMPRODUCT((A1:A300="Tシャツ")*(B1:B300="ホワイト")*D1:D300)
ででますよ。
ブラックはどこをなおせばいいかわかりますよね。
この回答への補足
ありがとうございます。
質問の例が簡単すぎたようです。
質問の補足になりますが、A列とB列に入っている項目が
たくさんあり、自分でもA列の内容とB列の組み合わせが
何通りあるのかよくわからないくらいなのです。
300行に組み合わせが100通りあれば、
この式を100通り入力しなければならないので、これでは大変です。
また、こんなにきれいに並んでなく、色も聞き慣れない英語の名前が大変多く
商品名に対して色がそれぞれにあまりに違うため
拾い出すのも単純ではありません。
A列とB列の組み合わせを拾い出すこと自体が大変困難で
この方法ですと見落としが生じかねません。
A列のTシャツというものを拾い出しなさいというようなものではなく
A列とB列が同じ情報ならば、合計計算をしなさいと言ったようなものがあるとよいと思うのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Visual Basic(VBA) 【VBA】複数行あるカンマ区切りのデータを全て縦に一列に並べたい 5 2022/04/13 17:03
- Visual Basic(VBA) チームごとにどの商品を何個希望しているか数量を算出したいです。 A列(A2~A265)に各チーム名が 3 2023/07/18 18:46
- Excel(エクセル) Excel での関数についての質問です。 例えばA列に商品名を、B列に個数をそれぞれ入力しています。 7 2023/05/13 10:51
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) エクセルデーターの並び替え 5 2022/08/06 09:59
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel2017 フィルタ昇順並びがA...
-
エクセルで行の高さ及び列幅の...
-
オートフィルタ後のデータから...
-
矩形範囲の複数列を縦1列に並...
-
Excelで並び替え後にア行...
-
急ぎ!色のついたセルを非表示...
-
平均変化率の信頼区間
-
【Excel VBA】指定した行の最大...
-
エクセル VBA 行間隔を飛ばした...
-
検索条件に合うセルの個数を数...
-
Excelで複数列のデータを1列に...
-
EXCELで日付を比べ3か月以内の...
-
エクセルのマクロで別のシート...
-
エクセル 複数行ある同一商品...
-
基準日以前のデータを範囲を指...
-
エクセル データの入力規制「リ...
-
エクセル関数について
-
エクセルの集計方法を教えて下さい
-
エクセル関数について
-
エクセルマクロでのコピー貼り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel2017 フィルタ昇順並びがA...
-
Excelで並び替え後にア行...
-
エクセルで行の高さ及び列幅の...
-
平均変化率の信頼区間
-
急ぎ!色のついたセルを非表示...
-
オートフィルタ後のデータから...
-
【Excel VBA】指定した行の最大...
-
エクセルの時刻のカウントが出...
-
基準日以前のデータを範囲を指...
-
EXCELで日付を比べ3か月以内の...
-
マクロで行の高さを設定したい
-
エクセル関数について
-
文字列を比較し、相違するフォ...
-
エクセル関数について
-
excel / ピポッド 日数を出したい
-
エクセル VBA 行間隔を飛ばした...
-
時間の重複チェック
-
プルダウンに【なし、平均、デ...
-
EXCEL 最終行のデータを他のセ...
-
列と行の名前(重複あり)が交...
おすすめ情報