次のようにすることで関数で対応できます。
例えばシート1のA2セルから下方に機種名、B2セルから下方に台数、C2セルから下方にクラス名が入力されているとしたら作業列を3列用意します。
D2セルには次の式を入力します。
=C2&A2
E2セルには次の式を入力します。
=IF(C2="","",IF(COUNTIF(C$1:C2,C2)=1,MAX(E$1:E1)+10000,ROUNDDOWN(INDEX(E$1:E1,MATCH(C2,C$1:C2,0)),-4))+IF(COUNTIF(D$1:D2,D2)=1,COUNTIF(C$1:C2,C2),INDEX(E$1:E1,MATCH(D2,D$1:D2,0))-ROUNDDOWN(INDEX(E$1:E1,MATCH(C2,C$1:C2,0)),-4)))
F2セルには次の式を入力します。
=IF(E2="","",IF(COUNTIF(E$1:E1,E2)>0,"",RANK(E2,E:E,1)))
D2セルからF2セルを選択して、右クリックで「コピー」し、名前ボックスのD2:F2と表示されているところをD2:F40000のように変更します。それらのセルが選択されますので右クリックして「貼り付け」を行います。
お望みの表をシート2に表示させるとしてA1セルにはクラス、B1セルには機種名、C1セルには台数と項目名をそれぞれ入力したのちにA2セルには次の式を入力したのちにC2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。
=IF(ROW(A1)>COUNT(Sheet1!$F:$F),"",IF(COLUMN(A1)=1,INDEX(Sheet1!$C:$C,MATCH(SMALL(Sheet1!$F:$F,ROW(A1)),Sheet1!$F:$F,0)),IF(COLUMN(A1)=2,INDEX(Sheet1!$A:$A,MATCH(SMALL(Sheet1!$F:$F,ROW(A1)),Sheet1!$F:$F,0)),IF(COLUMN(A1)=3,SUMIF(Sheet1!$E:$E,INDEX(Sheet1!$E:$E,MATCH(SMALL(Sheet1!$F:$F,ROW(A1)),Sheet1!$F:$F,0)),Sheet1!$B:$B),""))))
これでシート1の内容が変更されても新たなデータが追加されても即座に対応してシート2の表が完成します。なお、シート1の作業列が目障りでしたら列を選択して右クリックし、「非表示」を選択すればよいでしょう。
お礼
とある業務で必要だったので、この質問を立てたのですが その業務が無くなってしまい、質問を締め切るのを失念しておりました… 親身に教えて頂いたのに、お礼が遅れ申し訳ありません… >SUMIFS >SUMPRODUCT >とかが使えるのではないかと。 そうですね!こういう関数がありました! 一番の回答ありがとうございます。 甲乙つけ難かったので、一番乗りの回答者様を BAとしたいと思います。