Excel2003での検討結果です。
ワークシート関数のみを使用する方法でやってみました。
各店舗のデータのあるシートはシート名"各店舗"としました。
売上商品の明細の表のシートの名前は特に指定はありません。
各店舗の表も売上商品の明細の表もセルA3から右下方向にあるものとしました。
つまり、各店舗のデータはA6以下、売上商品の明細のデータはA4以下となります。
売上商品の明細の表はA~Eの5列ですが、他に3列の作業領域が必要なので、F~Hを割り当てることにします。
また、得意先コード検索用に2行5列(店舗数が4の場合)の作業領域が必要なので、売上商品の明細のシートのJ3:N4を使用することにします。
まず、得意先コード検索用の作業領域のJ3:N4です。
J3 0
K3 =COUNTIF(各店舗!$D6:D9999,">0")
L3~N3 K3をオートフィル
J4~N4 0~4の連番
次に、売上商品の明細の表の数式です。
A4~H4の数式を示しますので、必要なだけ行方向にオートフィル(コピー)してください。
また、H4の数式は配列数式にしなければならないので、確定の際にはCtrl+Shift+Enterを使うようご注意ください。(数式が{}で囲われて表示されます)
F4の式の中の$N$4のNは、上記の作業
(A4~G4の数式は通常通りEnterやTabでよい)
A4 =OFFSET(各店舗!$D$3,,F4)
B4 =OFFSET(各店舗!$A$6,$H4-1,)
C4 =OFFSET(各店舗!$B$6,$H4-1,)
D4 =OFFSET(各店舗!$D$6,$H4-1,$F4)
E4 =OFFSET(各店舗!$C$6,$H4-1,)
F4 =HLOOKUP(ROWS(F$4:F4)-1,$J$3:$N$4,2,TRUE)
G4 =IF(COUNTIF(F$4:F4,F4)-1>0,H3,0)
H4 =MATCH(1,SIGN(OFFSET(各店舗!$D$6,G4,F4,ROWS(各店舗!$D$6:$D$10000)-G4,1)),0)+G4
繰り返しになりますがH4は配列数式にする必要がありますのでご注意下さい。
数式の上では商品データは一応9999行まで入力できることになっていますが、そこまで商品が増える前に処理速度が遅くなって使い物にならなくなると思います。
その場合は、上記の数式はやめて売上商品の明細の表を作るマクロを作成して利用すればよいでしょう。
お礼
お礼が大変遅くなり誠に申し訳ありません。 最初に回答を見させていただいた瞬間、私のレベルでは難し過ぎたため色々関数など調べつつしている間に時間が取れなくなってしまいました。 まだ、理解が出来ていない状況ではありますがベストアンサーとさせていただきます。 本当に遅くなり申し訳ありませんでした。 そして、ご説明も大変だったと思います。ありがとうございました。
補足
ご返答ありがとうございます。 おっしゃる通り、画像が小さ過ぎますよね。 私も投稿した後に気づいたのですが修正や削除ができないようなので。 取りあえず説明を書かせていただきますが、イメージが掴みづらいと思いますので 改めて投稿しようと思います。 まず、左側の一覧表のイメージとしましては <得意先コード> 901 902 903 904 <得意先名> [a店] [b店] [c店] [d店] <商品名><JANコード> <商品単価> 商品A 4900000000001 100 0 1 0 0 商品B 4900000000002 200 1 0 0 0 商品C 4900000000003 300 0 0 1 1 商品D 4900000000004 400 0 1 0 1 ・ ・ ・ ・ ・ ・ ・ ・ ・ 上記の一覧表を変換したい右側の一覧表のイメージとしましては <得意先コード><商品名><JANコード><数量><商品単価> 901 商品B 4900000000002 1 200 902 商品A 4900000000001 1 100 902 商品D 4900000000004 1 400 903 商品C 4900000000003 1 300 904 商品C 4900000000003 1 300 904 商品D 4900000000004 1 400 ・ ・ ・ 以上です。 これでご理解いただけましたでしょうか。。。