前提条件として、該当コード欄に入力されているコードが全て数値データであり、例えば「A102」等の様な文字列データのコードは存在していない、と考えても良いのでしたら、以下の様な方法は如何でしょうか?
尚、下記の方法では、許可の欄に入力されているデータの中に、「○」以外のデータが存在していても構いません。
又、元データの表中における、該当者の行の中に、該当するコードが存在していても、その右隣の許可欄が空欄となっている場合には、許可がされていないと判断して、改編後の表の中の該当する箇所には「×」が表示されます。
今仮に、システムから出力された表の中で「氏名」という項目名が入力されているセルが、Sheet1のA1セルであり、改編後の表をSheet2に表示させるものとします。
まず、Sheet2のA1セルに次の関数を入力して下さい。
=Sheet1!$A$1
次にSheet2のA2セルに次の関数を入力して下さい。
=IF(OFFSET(Sheet1!$A$1,ROWS($2:2),)="","",OFFSET(Sheet1!$A$1,ROWS($2:2),))
次にSheet2のB1セルに次の関数を入力して下さい。
=IF(OR(A1="",COUNT(Sheet1!$B:$B)=0),"",IF(COUNTIF(INDEX(Sheet1!$B:$B,MATCH(9E+307,Sheet1!$B:$B)):INDEX(Sheet1!$1:$1,MATCH(CHAR(1),Sheet1!$1:$1,-1)),">"&IF(COLUMNS($B:B)=1,-9E+307,A1)),LARGE(INDEX(Sheet1!$B:$B,MATCH(9E+307,Sheet1!$B:$B)):INDEX(Sheet1!$1:$1,MATCH(CHAR(1),Sheet1!$1:$1,-1)),COUNTIF(INDEX(Sheet1!$B:$B,MATCH(9E+307,Sheet1!$B:$B)):INDEX(Sheet1!$1:$1,MATCH(CHAR(1),Sheet1!$1:$1,-1)),">"&IF(COLUMNS($B:B)=1,-9E+307,A1))),""))
次にSheet2のB2セルに次の関数を入力して下さい。
=IF(OR($A2="",B$1=""),"",IF(ISERROR(1/(OFFSET(Sheet1!$A$1,MATCH($A2,Sheet1!$A:$A,0)-ROW(Sheet1!$A$1),MATCH(B$1,OFFSET(Sheet1!$1:$1,MATCH($A2,Sheet1!$A:$A,0)-ROW(Sheet1!$A$1),),0)-COLUMN(Sheet1!$A$1)+1)<>"")),"×",OFFSET(Sheet1!$A$1,MATCH($A2,Sheet1!$A:$A,0)-ROW(Sheet1!$A$1),MATCH(B$1,OFFSET(Sheet1!$1:$1,MATCH($A2,Sheet1!$A:$A,0)-ROW(Sheet1!$A$1),),0)-COLUMN(Sheet1!$A$1)+1)))
次にSheet2のB1~B2の範囲をコピーして、表中において同じ行範囲のB列よりも右側にある全ての列上のセルに貼り付けて下さい。
次に、Sheet2の2行目全体をコピーして、Sheet2の3行目以下に貼り付けて下さい。
以上です。
お礼
できました!ありがとうございます! あとは表に色付け等していけばこのまま使えそうです。 これで大分作業効率が上がると思います。 元表がややこしいので無理かな?と諦めかけていたのですが、良かったです。 ありがとうございました!