エクセルで、「A行」なんて紛らわしい表現をしているところを見ると、エクセルの初心者で、この問題を、データ入力段階から、適切に設計できるかどうか疑わしい。商品の単位についての説明はあいまいにしたままなのも、それをうかがわせる。
また関数しかできない状況でもあるだろうが、関数でも、回答丸写ししかできず、難しいと思う。
エクセルのシートの表の組み換えは、関数ではむつかしいのだ。
それもあって、下記はVBAでやってみた。
ーー
本件についての、
私の考えを、下記に参考に述べる。考える気があれば読んでください。
商品を、個で売るもの、重量計り売り,ケース売りなど、単位の違うものは、商品を別に分けないと、扱いがむつかしいと思う。
システムに詳しいひとが、周りにいれば聞いてみたら。
こういうことこそ、正解が1つではない惧れもあり、本当の難しさで、関数の組み合わせ技巧ではない。
後から加工の段階で、関数がむつかしくなって、質問するよりも、シート項目の設計や入力の前によく考えることだ。どうすれば簡単になるかは、経験を積むしかない。
分類は下記のように考えた。
山田シートで
商品 個数(A列とB列データ)数字が個数
のり弁 6
シャケ弁個売 8
シャケ弁ケース売り 11
やきそば個数売り500g 2
やきそば個数売り800g 4
ーー
佐藤シートで
商品 個数(A列とB列データ)数字が個数
商品 個数
のり弁 1
シャケ弁個売 2
シャケ弁ケース売り 3
やきそば個数売り500g 1
やきそば個数売り800g 2
鈴木シート
商品 個数
のり弁 1
シャケ弁個売 1
シャケ弁ケース売り 2
やきそば個数売り500g
やきそば個数売り800g 1
という設計にする。
ーー
そしてVBAだが、標準モジュールに
Sub test02()
Set sh2 = Worksheets("集計")
sh2.Range("A2:H10000").Clear
k = 2
For Each sh In Worksheets
If sh.Name <> "集計" Then '集計の名のシートは対象外
MsgBox sh.Name
lr = sh.Range("A10000").End(xlUp).Row
For i = 2 To lr
x = sh.Cells(i, "A") 'shシートのA列商品名
Set fc = sh2.Range("A2:A10000").Find(x) '集計シートA列でxの存在行を見つける
If fc Is Nothing Then
'新規
sh2.Cells(k, "A") = x '商品名
'c = sh2.Cells(k, 10000).End(xlToLeft).Column
sh2.Cells(k, "B") = sh.Cells(i, "B") '個数
k = k + 1
Else
'既存で見つかった
c = sh2.Cells(fc.Row, 10000).End(xlToLeft).Column
sh2.Cells(fc.Row, "B") = sh2.Cells(fc.Row, "B") + sh.Cells(i, "B") '件数足しこみ
End If
Next i
End If
Next
End Sub
ーー
結果
集計シートは
商品 個数
のり弁 6
シャケ弁個売 8
シャケ弁ケース売り 11
やきそば個数売り500g 2
やきそば個数売り800g 4
上記プログラムを変えれば、商品ごとで1行、販売先ごとの多列表にも、簡単に変えられる。