[[20040714145539]] 『IF関数でできるでしょうか?』(美神) ページの最後に飛ぶ

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

 

『IF関数でできるでしょうか?』(美神)

いつもお世話になっています。わかりにくいかもしれませんが、よろしくお願いします。

 sheet1「20日〆」 
 sheet2「25日〆」 
 sheet3「末日〆」 
 sheet4「DATE」 

 ●「DATE」シートの内容
    A    B       C         D
 1  〆日  得意先コード  得意先名      支払条件
 2  20   1111      (株)エクセル   1
 3  25   1112      (有)ノガッコウ  2
 4  99   1113      (有)オセワサマ    3

このようになっています。

 「DATE」シートの(A列)が(20)の場合は、「20日〆」シートにその行の内容を反映させる。
 (A列)が(99)の場合は、「末日〆」シートにその行の内容を反映させる、というのはどういう関数になるんでしょうか?

 得意先コードを反映させたいセルに
 =IF(DATE!A:A=20,DATE!B:B)という関数を入れたら「FALSE」になってしまいました( p_q)
 どうぞよろしくお願いいたします。

 「DATE」シートをオートフィルタで抽出してから、コピーして、
 各シートに貼り付けされたらどうでしょう?                 (LOOKUP)

 =IF(COUNTIF(Date!$A$1:$A$1000,20)>=ROW(A1),INDEX(Date!$A$1:$D$1000,SMALL(IF(Date!$A$1:$A$1000=20,ROW($A$1:$A$1000)),ROW(A1)),COLUMN(A1)),"")

 1.上の数式をコピーして、20日〆シートのA2を選択して、数式バーに貼り付けて Ctrl+Shift+Enterで確定後、右+下方向へフィル。
 2.他のシートへは数式中に2箇所ある 20 を各条件に変えて 1.を繰り返す。

 では?
 
 (jindon)

 LOOKUPさん、jindonさん、ご回答ありがとうございましたm(__)m
 jindonさんの教えてくださった方法でうまくいきました!
 LOOKUPさんの方法でも良かったのですが、実はセルの位置など微妙に違いまして苦戦してました。説明不足でお手数をおかけしました。
 助かりました、ありがとうございますっ!!
 追伸:もし、お時間が有れば、式の意味を教えてください。
 (美神)

 作業列を使用する処理方法と比較して説明します。
 sheet1「20日〆」 - 20
 sheet2「25日〆」 - 25
 sheet3「末日〆」 - 99
 sheet4「DATE」 
 ●「DATE」シートの内容 
  	A	B	C	D	E	F	G
1	〆日	コード	得意先名	支払条件	20	25	99
2	20	1111	(株)AAA	1	2	 	 
3	25	1112	(有)BBB	2	 	3	 
4	99	1113	(有)CCC	3	 	 	4
5	20	1114	(株)DDD	4	5	 	 
6	99	1115	(有)ABC	5	 	 	6
7	25	1116	(有)EEE	6	 	7	 

 1.E1,F1,G1 に其々抽出条件である、20,25,99を入力
   E2に=IF($A2=E$1,ROW(),"")としてG7までフィルすると上記の通りになります。
   A列の値がE,F,G列,其々の1行目の値と同じ(TRUE)であれば、ROW() その行番号を表示。
 2.各シートには、DateシートのE,F,G列を手掛かりとして、その列の値のある行を
   抽出すればよいですね?
 3.20日〆のシート1行目はDateシートのE列の最初の値のある行、即ち2行目です。
   =INDEX(Date!$A$2:$D$7,MATCH(SMALL(Date!$E$2:$E$7,ROW(A1)),Date!$E$2:$E$7,0),COLUMN(A1))
    INDEX範囲=Date!$A$2:$D$7の、
    行番号=MATCH(SMALL(Date!$E$2:$E$7,ROW(A1)),Date!$E$2:$E$7,0)
          Date!$E$2:$E$7で1番小さい値(2)の位置
    列番号=INDEX範囲=Date!$A$2:$D$7に対する列番号,COLUMN(A1)=1=Date!A列

    これを右+下方向にフィルすれば SMALL関数の引数ROW(A1),INDEX関数の引数,
    CLOUMN(A1)が其々増加します。

 提示した配列数式は前出の 1. 2. を配列を使用してSMALL関数の中で処理をしたと
 考えても良いと思います(この辺り、突込みが入りそうですが)

 =IF(COUNTIF(Date!$A$1:$A$1000,20)>=ROW(A1),INDEX(Date!$A$1:$D$1000,SMALL(IF(Date!$A$1:$A$1000=20,ROW($A$1:$A$1000)),ROW(A1)),COLUMN(A1)),"")

 1.=IF(COUNTIF(Date!$A$1:$A$1000,20)>=ROW(A1),INDEX( ............ ,"")
 エラー処理の部分です。
     DateシートのA列で抽出条件の 20 をカウントした値が A1の行番号(1)より多ければ、",INDEX( ..."以降の処理、そうでなければ ,"")
     ROW(A1)は 1 の代用です。こうしておけば、下方コピーしたとき ROW(A2) と1づつ増加させていくことが出来ますし、
     どのセルにこの数式を配置してもこの数式にとってはその位置が1行目になります。
     もし、A1にこの数式を貼り付けるのなら ROW() (数式のある行番号) でOKです。

 2.INDEX(Date!$A$1:$D$1000,SMALL(IF(Date!$A$1:$A$1000=20,ROW($A$1:$A$1000)),ROW(A1)),COLUMN(A1))
 1.の条件を満たした場合の処理部分です。
     INDEX(範囲,行番号,列番号,領域番号) 詳しくはHELPを!
     INDEXの範囲:Date!$A$1:$D$1000
     行番号:SMALL(IF(Date!$A$1:$A$1000=20,ROW($A$1:$A$1000)),ROW(A1))
          SMALL関数の範囲:
               Date!$A$1:$A$1000の配列中で 20 の値がある 配列 ROW($A$1:$A$1000) に対応する 
               SMALL(範囲,ROW(A1)) 一番小さい位置。これも下方コピーで ROW(A2) と増加し、二番目に小さい位置。
               詳しくは「配列数式」で検索を!
     列番号:COLUMN(A1)
          これも ROW(A1) と同じく 1 の代用で右にコピーするにしたがって(B1),(C1)と増加。
 この程度の説明しか出来ませんが?
 (jindon)

 jindonさん、お礼が遅くなってしまって申し訳ありませんm(__)m
 ご丁寧に、こんなに詳しいご説明ありがとうございます!!本当に嬉しいです!!!
 これからこのコピーを持って、じっくり勉強させていただきます。
 (教えた甲斐のない素人でごめんなさい・・・(T-T))
 また、何か機会があればよろしくお願いします。
 本当にありがとうございました。
 (美神)

コメント返信:

[ 一覧(最新更新順) ]


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