年や月が変わっても対応できる方法です。お示しの元のデータはシート1のA1セルに日付、B1セルに症外の種類とそれぞれ文字列が有り下方にデータが入力されているとします。なお、A列でのデータは昇順で並べられているとします。古い日付のデータはより上の行にあるとします。
そこでシート1では作業列を用意します。
C2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(A2="","",DATE(YEAR(A2),MONTH(A2),1)&B2)
D1セルには次の式を入力します。
=LEFT(C2,5)*1000
D2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(COUNTIF(C$2:C2,C2)=1,LEFT(C2,5)*1000+COUNTIF(C:C,C2)-ROW()/10000,"")
E2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(D2="","",LEFT(D2,5)*1000+RANK(D2,INDEX(D:D,MATCH(LEFT(D2,5)*1000,D:D,1)):INDEX(D:D,MATCH((LEFT(D2,5)+1)*1000,D:D,1))))
シート2にはお求めの表を例えばシート2のA1セルに西暦年を入力することでその年の1月から12月のそれぞれの月における障害ランキングを1位から9位まで表示させることができるようにします。勿論、同じ件数の障害が有れば同じ順位が表示されるようにします。
シート2ではつぎのようにします。
A1セルには2011や2010のように西暦年を入力します。
B1セルには 年ランキング表 とでも入力します。
A2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(ROW(A1)>120,"",IF(MOD(ROW(A1),10)=1,INT((ROW(A1)-1)/10)+1,IF(AND(MOD(ROW(A1)-1,10)<10,MOD(ROW(A1)-1,10)>0,C2<>""),RANK(C2,INDEX(C:C,(INT((ROW(A1)-1)/10)+1)*10-8):INDEX(C:C,(INT((ROW(A1)-1)/10)+1)*10+1))&"位","")))
B2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(AND(ROW(A1)<120,MOD(ROW(A1),10)=1),"月",IF(AND(MOD(ROW(A1)-1,10)<10,MOD(ROW(A1)-1,10)>0),IFERROR(INDEX(Sheet1!$B:$B,MATCH(DATE($A$1,INT((ROW(A1)-1)/10)+1,1)*1000+MOD(ROW(A1)-1,10),Sheet1!$E:$E,0)),""),""))
C2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(OR(MOD(ROW(A1),10)=1,MOD(ROW(A1),10)=0),"",IFERROR(MOD(INT(INDEX(Sheet1!$D:$D,MATCH(DATE($A$1,INT((ROW(A1)-1)/10)+1,1)*1000+MOD(ROW(A1)-1,10),Sheet1!$E:$E,0))),1000)+1,""))
IFERROR関数はエクセル2010などでは有効ですが古いバージョンでは使うことができません。
B2セルには次の式を入力します。
=IF(AND(ROW(A1)<120,MOD(ROW(A1),10)=1),"月",IF(AND(MOD(ROW(A1)-1,10)<10,MOD(ROW(A1)-1,10)>0),IF(ISERROR(INDEX(Sheet1!$B:$B,MATCH(DATE($A$1,INT((ROW(A1)-1)/10)+1,1)*1000+MOD(ROW(A1)-1,10),Sheet1!$E:$E,0))),"",INDEX(Sheet1!$B:$B,MATCH(DATE($A$1,INT((ROW(A1)-1)/10)+1,1)*1000+MOD(ROW(A1)-1,10),Sheet1!$E:$E,0)))))
C2セルには次の式を入力します。
=IF(OR(MOD(ROW(A1),10)=1,MOD(ROW(A1),10)=0),"",IF(ISERROR(MOD(INT(INDEX(Sheet1!$D:$D,MATCH(DATE($A$1,INT((ROW(A1)-1)/10)+1,1)*1000+MOD(ROW(A1)-1,10),Sheet1!$E:$E,0))),1000)+1),"",MOD(INT(INDEX(Sheet1!$D:$D,MATCH(DATE($A$1,INT((ROW(A1)-1)/10)+1,1)*1000+MOD(ROW(A1)-1,10),Sheet1!$E:$E,0))),1000)+1))
お礼
ありがとうございます。 ピボットテーブルですか。結構、使えそうですね。