[[20050715111237]] 『一つの表から別の表を自動的に作成したい』(ジャイ子@初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『一つの表から別の表を自動的に作成したい』(ジャイ子@初心者)

表1から、関数を使って表2を自動作成したいと思っています。

 =表1=

 タイトル 氏名 123456
 A  
      山田 ●●●     
       △△   ●  
 B          
        田中   ●●
 C    
      小林    ●●●
      ☆☆     ●●
 D    
      田中 ●●
 E    
      田中    ●●
 F
      山田  ●●●
 G
      小林 ●

 =表2=
 氏名 タイトル 123456
 山田 A    ●●●
    F     ●●●
 田中 B      ●●
    D    ●●
    E       ●●
 小林 C       ●●●
    G    ● 

このとき、別の行にあるタイトルを表示させ、かつ一部不要な氏名もあるとき、どのようにして表を作成したらいいのか途方にくれています。

よい方法がありましたら、教えてください。
よろしくお願い致します。


 レス付かないので、一応関数で考えました。(マクロでって言われたらパスですが...)
よい方法か否かは、ご判断下さい。
表1がSheet1のA1:H17にあり、表2がSheet2のA1:H8に該当するとします。
尚、多少の追加を考え、計算式のSheet1のデータ範囲は、A1:H20の範囲として作っています。
まず、Sheet1に作業列を下記の様に設けます。
      I     J	  K	  L	  M	  N	  O
  1  氏名 チェック 指定氏名  該当件数  タイトル  検索値     1
  2				  A		
  3  山田   1	 山田	  2	  A	 山田A      2
  4  △△				  A		
  5				  B		
  6  田中   1	 田中	  3	  B	 田中B	  3
  7				  C		
  8  小林   1	 小林	  2	  C	 小林C	  4
  9  ☆☆				  C		
 10				  D		
 11				  D       田中D	
 12				  E		
 13				  E	 田中E	
 14				  F		
 15				  F	 山田F	
 16				  G		
 17				  G	 小林G	
 18							
 19							
 20							
  I1:O1は、全て手入力します。
 I列で重複しない氏名を表示します。必要な氏名にチェックを入れやすくするためです。I2セルに
=IF(COUNTIF($B$2:B2,B2)=1,B2,"")  として、I20までコピー。
 J列には、I列に表示されている氏名の中から必要なものに【1】を手入力します。
 K列で、Sheet2に表示する(必要な)氏名をまとめ直します。K2セルに
=IF(COUNTA(I2:J2)=2,I2,"")     として、K20までコピー。
 L列では、必要な各氏名のA列での件数を出します。Sheet2での氏名表示位置を決める為に使用。L2セルに
=IF(K2<>"",COUNTIF($B$2:$B$20,K2),"")   として、L20までコピー。
 M列で、A列のタイトルの空白部分を補った一覧を作り直します。私ならば最初からA列の表示をこの様にしておきます。M2セルに
=IF(COUNTA(A2:H2),IF(A2<>"",A2,M1),"")   として、M20までコピー。
 N列は、Sheet2の各氏名の2番目以降のタイトルを表示させる為の検索範囲用です。N2セルに
=IF(SUMPRODUCT(($I$2:$I$20<>"")*($I$2:$I$20=B2),$J$2:$J$20),B2&M2,"")  として、N20までコピー。
 O列は、Sheet2における氏名表示を変える為のものです。(O1セルは、【1】と手入力) O2セルに
=IF(L2<>"",COUNT($L$2:L2)+1,"")   として、O20までコピー。
ここまでが、Sheet1(表1)上で準備しておく作業列です。

 Sheet2のA1:H1は、手入力しているものとします。
A2セルに
=IF(ROW()-1>SUM(Sheet1!$L$2:$L$20),"",IF(COUNTIF(Sheet1!$B$1:$B$20,A1)<=COUNTIF($A$1:A1,A1),INDEX(Sheet1!$K$1:$K$20,SMALL(IF(Sheet1!$K$2:$K$20<>"",ROW(Sheet1!$K$2:$K$20)),VLOOKUP(A1,Sheet1!$I$1:$O$20,7,FALSE))),A1))
として、【Ctrl】と【Shift】と【Enter】キーを一緒に押して配列数式として確定します。
B2セルに
=IF(A2="","",INDEX(Sheet1!$M$1:$M$20,SMALL(IF(A2=Sheet1!$B$1:$B$20,ROW(Sheet1!$B$1:$B$20)),COUNTIF($A$1:A1,A2)+1)))
として、上記同様に配列数式として確定します。
C2セルは
=IF($A2="","",SUBSTITUTE(INDEX(Sheet1!$C$2:$H$20,MATCH($A2&$B2,Sheet1!$N$2:$N$20,FALSE),MATCH(C$1,Sheet1!$C$1:$H$1,FALSE)),0,""))
として通常に確定し、これをH2までコピーします。
A2:H2セルを選択・コピーし、適当な範囲まで下方コピー。
A列には、重複する氏名も表示します。気に入らなければ、条件付き書式で文字色を白にして下さい。
関数で考えるとしたら、多分頭がボンバーです。
 最終的に、どれぐらいのデータ量で実施されるか分りませんが、重たくなるかも???
また、表1の作り方次第では、ピボットテーブルも使えそうな気がしますが、考える気力なし。。。
(sin)


sin様、レスありがとうございました。
無事表を作成することが出来ました。
もうダメかも・・・とあきらめていたので、感激です!!!!
本当にありがとうございました。
(ジャイ子)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.