[[20060911154605]] 『抽出について』(まさっち) ページの最後に飛ぶ

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

 

『抽出について』(まさっち)

アルバイトの人達から来週以降の勤務予定日を提出してもらっています。

各アルバイトの人の出勤を入力するとそれをまとめた表を出したいのですが・・・

例をあげると 下記

  21日 22月 23火 24水 25木 26金 27土

A君 ●   ●       ●       ●      

B君     ●   ●       ●       ●  

C君 ●       ●           ●      

D君     ●       ●           ●

               ↓

  21日 22月 23火 24水 25木 26金 27土

  A君  A君  B君  A君  B君  A君  B君 

  C君  B君  C君  D君      C君  D君 

      D君

こんな具合になればと・・・ 
  


 	[A]	[B]	[C]	[D]	[E]	[F]	[G]	[H]
[1]		21日	22月	23火	24水	25木	26金	27土
[2]	A君	●	●		●		●	
[3]	B君		●	●		●		●
[4]	C君	●		●			●	
[5]	D君	●			●			●
[6]								
[7]		21日	22月	23火	24水	25木	26金	27土
[8]		A君	A君	B君	A君	B君	A君	B君
[9]		C君	B君	C君	D君		C君	D君
[10]		D君						
B8=IF(COUNTIF(B$2:B$5,"●")<ROW($A1),"",INDEX($A$2:$A$5,
    SMALL(IF(B$2:B$5="●",ROW($A$1:$A$4),""),ROW($A1)),))
と入力して、Ctrl+Shift+Enterで数式を確定。
H列までフィルドラッグし、必要分下にフィルドラッグでどうでしょうか?
 (ROUGE)

 編集→置換→検索する文字「●」、置換後の文字列「=INDIRECT("A"&ROW())」
としてみては?
(Ohagi)

(ROUGE)様

さっそくのお返事ありがとうございます。

数式を入れたらエラーになるんですが・・・


 Ctrl+Shift+Enterで数式を確定していますか?
 数式が{  }でくくられていたら入力成功です。
 (ROUGE)


ありがとうございます

うまくいきました

ちなみにバイトの(A君〜D君)人数が変われば

何処の数値(関数の)が変動するんですか?


 =OFFSET()を利用して書いてみましたが、大変、処理が重いです。

 B11に=INDEX($A$2:$A$7,MATCH("●",OFFSET(B$7,,,-ROWS(B2:B7),),))。

 B12に
 =IF(COUNT(MATCH("●",OFFSET(B$7,,,MATCH(B11,$A$2:$A$7,)-ROWS(B$2:B$7),),)),
 INDEX(OFFSET($A$7,,,MATCH(B11,$A$2:$A$7,)-ROWS(B$2:B$7),),
 MATCH("●",OFFSET(B$7,,,MATCH(B11,$A$2:$A$7,)-ROWS(B$2:B$7),),)),"")
 として、これをB15までフィルドラッグ。
 B11:B16を右にフィルドラッグ。 
 というものです。                           (LOOKUP)

 	A	B	C	D	E	G	G	H
 1		21日	22月	23火	24水	25木	26金	27土
 2	A君	●	●	●			●	
 3	B君		●		●	●		●
 4	C君	●	●		●		●	
 5	D君	●	●	●				●
 6	E君		●			●		
 7	F君		●				●	
 8								
 9								
10		21日	22月	23火	24水	25木	26金	27土
11		A君	A君	A君	B君	B君	A君	B君
12		C君	B君	D君	C君	E君	C君	D君
13		D君	C君				F君	
14			D君					
15			E君	

 > ちなみにバイトの(A君〜D君)人数が変われば何処の数値(関数の)が変動するんですか?
 =IF(COUNTIF(B$2:B$5,"●")<ROW($A1),"",INDEX($A$2:$A$5,SMALL(IF(B$2:B$5="●",ROW($A$1:$A$4),""),ROW($A1)),))
                   ~                                 ~                ~                  ~
下線部の数値をそれぞれ増やしてあげればできますよ^^
(ROUGE)

ありがとうございます。

完璧ですね・・・

余談ですがCtrl+Shift+Enterで数式を確定するのと

ただのEnterを押すのでは、何が異なるのでしょうか?{}の意味があまりよくわかりません・・・


 この数式は配列数式と呼ばれています(詳細はHELPで確認して下さい)。
 今回の数式のメイン部分に着目して・・・

 =INDEX($A$2:$A$5,
  SMALL(
  IF(B$2:B$5="●",ROW($A$1:$A$4),"")
  ,ROW($A1)),)

 まず、以下の数式に注目。
 =IF(B$2:B$5="●",ROW($A$1:$A$4),"")
 これを配列数式として確定しますと、B2、B4、B5に●が入っているので、それぞれに対応するROW()関数の戻り値または""が返ります。
 ={1,"",3,4}

 したがって
 =SMALL({1,"",3,4},ROW($A1))=SMALL({1,"",3,4},1)=1
 となります。

 =INDEX($A$2:$A$5,1,)=$A$2="A君"
 となるわけです。

 この数式を下にフィルドラッグすると、SMALL関数の第2引数であるROW関数がROW($A2)に変わりますので、
 =SMALL({1,"",3,4},ROW($A2))=SMALL({1,"",3,4},2)=3
 となって、C君になります。

 こんなんで分かりますか?
 (ROUGE)

コメント返信:

[ 一覧(最新更新順) ]


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