例えば生徒のデータがシート1にあるとしてA列には通番がB列には氏名が、それぞれ2行目から下方に入力されているとします。右横の列のC列には学校のコード番号が、D列には学校名が、E列には学校のコード番号が、F列には学校名がのように、2列を使って学校のコード番号と学校名は表示されるようになっているとします。
そこでコード番号を入力すれば学校名が表示されるようにするためには次のようにします。
その前にシート2では学校のコード番号と学校名が次のように入力されているとします。
A1セルにはコード番号、A2セルには学校名、A3セルには受験者数の文字をそれぞれ入力し、コード番号や学校名はB列から横に入力するとします。なお、学校のコード番号は数値ではなく文字列の形で入力します。例えば公立の学校では1A、2Aなどと、私立では1B,2Bなどと入力します。
そこでシート1で学校のコード番号をC列やE列に入力したときにD列やF列に学校名を表示されるためにはD2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(C2="","",HLOOKUP(C2,Sheet2!$1:$1000,2,FALSE))
F2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(E2="","",HLOOKUP(E2,Sheet2!$1:$1000,2,FALSE))
他の学校を表示させる列についても同様にします。
これでシート1では学校のコード番号を入力することで学校名を表示させることができます。ところでこれらの入力したデータを受けてシート2に生徒の通番を表示させるためには、シート1に作業列を設けて対応することにします。実際には学校のコード番号や学校名を表示させるための列は多くなることでしょうが、ここではJ列までが使われるとしてK列から右横の列を作業列とします。
K1セルから右の列にはシート2で使用されている学校のコード番号を入力します。
そのうえでK2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。
=IF(OR($A2="",K$1=""),"",IF(COUNTIF($C2:$J2,K$1)=0,"",MAX(K$1:K1)+1))
シート2ではB3セルには次の式を入力して右横方向にオートフィルドラッグします。
=IF(B$1="","",COUNTIF(Sheet1!$C:$J,B$1))
次に4行目から下方にはそれぞれの学校への受験者の通番を表示させるのですが、そのためにはB4セルに次の式を入力し右横方向にオートフィルドラッグコピーしたのちに下方向にもオートフィルドラッグします。
=IF(OR(B$1="",ROW(A1)>COUNTA(Sheet1!$B:$B)-2),"",IF(COUNTIF(INDEX(Sheet1!$A:$O,1,MATCH(B$1,Sheet1!$A$1:$O$1,0)):INDEX(Sheet1!$A:$O,1000,MATCH(B$1,Sheet1!$A$1:$O$1,0)),ROW(A1))=0,"",INDEX(Sheet1!$A:$A,MATCH(ROW(A1),INDEX(Sheet1!$A:$O,1,MATCH(B$1,Sheet1!$A$1:$O$1,0)):INDEX(Sheet1!$A:$O,1000,MATCH(B$1,Sheet1!$A$1:$O$1,0)),0))))
式はシート1での作業列がO列までになっているのでそのようにしていますが、OをたとえばXXに変えても何ら問題はありません。一度ここに述べたようにシートを作って試験してみてください。
お礼
回答ありがとうございました。 私のつたない説明から よくぞ読み取っていただき 感謝いたします。 (1)Sheet1 受験生徒シート(仮称) 1行は1生徒で、 受験生徒番号 入力 受験生徒氏名 入力 受験学校コード 入力 受験学校情報 VLOOKUPでSheet2から項目データを索引 (2)Sheet2 受験学校シート(仮称) 学校番号 学校名 諸情報 (1)(2)はほとんど合っています。問題は↓ (3)Sheet3、Sheet4、・・・ 受験+合否集積シート(仮称) なのですが、現在の形は私立・公立や専願か否かなどの諸条件によって シートが分かれています。 imogasiさんのおっしゃる通り、私はVBAはできませんし、ご指摘のように <受験校が増えると、関数式を増やすと言う作業なども発生して大変> なので、今回はお手上げとしました。 質問の表現がわかりにくく、本当に申し訳ありませんでした。 もっとエクセルの勉強をして頑張りたいと思います。 また機会があればよろしくお願いいたします。