[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.