業者名は金銀銀といった限られたものではなくもっとたくさんあるのではと思いますね。
次のようにすればよいでしょう。
お示しのデータがA列からE列までにあるとして1行目は項目名で2行目から下方にデータが入力されているとします。
結構内容が複雑ですので作業列を作って対応します。
FからI列までを作業列としてお求めの表はJ列からO列に表示させるとします。
そこで仕入日の範囲ですがK1セルに仕入日範囲と文字を入力し、L1セルには開始の日で4/21と入力し、終わりの日はM1セルに例えば5/20と入力します。
その上で作業列に式を入力していきます。
F2セルには次の式を入力して下方にドラッグコピーします。
=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(F$1:F1)+1,""))
これで業者の数だけ数値が表示されます。
G2セルには次の式を入力して下方にドラッグコピーします。
=IF(C2="","",IF(AND(C2>=L$1,C2<=M$1),INDEX(F:F,MATCH(A2,A:A,0)),""))
これで指定の仕入日の範囲にある行に番号が付きます。
H2セルには次の式を入力して下方にドラッグコピーします。A列で表示されている行よりもさらに下方までドラッグコピーします。
=IF(A2<>"",IF(G2="","",G2*1000+COUNTIF(G$2:G2,G2)),IF(ROW(A1)<=COUNT(C:C)+MAX(F:F),(ROW(A1)-COUNT(C:C))*1000+999,""))
以上で作業列の操作は終わって次にお求めの表ですがK2セルからO2セルまでにはA1セルからE1セルまでの項目名を並べます。
K3セルには次の式を入力してO3セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。
=IF(ROW(A1)>COUNT($H:$H),"",IF(INDEX($A:$E,MATCH(SMALL($H:$H,ROW(A1)),$H:$H,0),COLUMN(A1))="","",INDEX($A:$E,MATCH(SMALL($H:$H,ROW(A1)),$H:$H,0),COLUMN(A1))))
J3セルには次の式を入力して下方にドラッグコピーします。
=IF(OR(AND(K2="業者",K3<>""),AND(K2="",K3<>"")),K3,"")
最後にM列はシリアル値が表示されていますのでM列を選択して右クリックし、「セルの書式設定」の「表示形式」で「日付」からお望みの表示にします。
データが新たに追加されれば瞬時に表が変わります。また、仕入日の範囲を変えることでお求めの表が瞬時に変わります。
なお、作業列が目障りでしたらそれらの列を選択してから右クリックして「非表示」を選択すればよいでしょう。
お礼
出来ました!!! O3までドラッグコピーをしておりませんでした! こちらで実際の表示も試してみます! ご回答頂きありがとうございます。 勉強になりました