[[20050922185316]] 『IF関数で抜き出すと同じ行しか出てこない』(バーズ娘) ページの最後に飛ぶ

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

 

『IF関数で抜き出すと同じ行しか出てこない』(バーズ娘)
 いつもお世話になっております。
 早速ですが、以下のような状況です。お知恵をお貸しください。

 ・いくつかの出荷先に、荷物を送る。
 ・荷物にはそれぞれ管理番号が振ってあり、1つの出荷先に対して複数の荷物を送る。
 ・【datebase】シートのA列には「出荷先」、B列には「管理番号」が入力されている。

 【datebase】
      A     B
 1   出荷先   管理番号
 2   名古屋城  00001
 3   名古屋城  00002
 4   大阪城   A0001
 5   大阪城   A0002

 ・【出荷先別シート】には、出荷先を(例えば)A1セルに入力すれば、B列に管理番号が入るようにしたい。

 【出荷先別シート】
      A          B
 1   (名古屋城)御中
 2             管理番号は以下の通りです
 3             ★00001←ここに、管理番号が順番に入るようにしたい
 4             ★00002             

 ♪今、【出荷先別シート】の「B3」セルに
 『=IF(A1=datebase!A2:A666,datebase!B2:B666)』と入れているのですが
 これだと何かが足りないみたいです・・・
 【datebase】シートと【出荷先別シート】の行が同じところしか抜き出せません。
 【datebase】シートのA列が【出荷先別シート】のA1と同じだったら、
 B列の管理番号がずらっと並ぶようにできますか?
 わかりにくい説明ですが、よろしくお願いします。


 王道のINDEX〜SMALLで処理されてはいかがでしょうか?
http://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2.cgi?mycmd=read&mypage=[[20050820172108]]
                       kym (^o^)_v 

 kym (^o^)_v さん、ありがとうございます。
 すみません、全く理解できません・・・ 。・゚・(ノД`)・゚・。
 ご紹介していただいた↓
 http://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2.cgi?mycmd=read&mypage=[[20050820172108]]
 ここにあるkymさんが作成された例と同じシートを作って、式を写してやってみたら理解できるかと思ってやってみたのですが
 「コピー用紙」ばかりが表示されるようになりました・・・
 少し勉強不足のようです・・・。
 出直します。ありがとうございましたヽ(*^^*)ノ
 (バーズ娘)


 確認しました。

 kym さん、SoulMan さん、お二人が提案された関数、ともに問題なく動きましたよ。

 再度、挑戦されてみてはどうでしょうか?

 (ken)


 ツール→オプション→計算方法 の設定で手動再計算に
 設定されているような気がします。(不知詠人)

 kenさん、不知詠人さん、お返事がおそくなり申し訳ありません。
 冷静にやってみたらできましたヽ(*^^*)ノ
 と、言ってもkymさんの式の範囲を変えただけなのですが・・・(;^_^A
 お時間があれば、ROWとSMALL、COLUMNの意味を教えていただけるとうれしいです。
 $は、コピーしても変わらない・・・固定ということですよね?
 上手に説明できなくてすみません・・・
 よろしくお願いします。
 (バーズ娘)


 少しだけ説明してみます。
 例)3・5・7行目が該当行
 まず、配列=検索条件で{0,0,1,0,1,0,1,0,0,0}が返ります。
 これにROW(A$1:A$10)の返り値{1,2,3,4,5,6,7,8,9,10}を掛けると
 {0,0,3,0,5,0,7,0,0,0}という配列が得られます。
 この配列の中から0以外の数値のみ(=該当行)を抽出したいのです。
 これにはまず0の個数を調べる必要があります。
 COUNTIFやSUMIF,SUMPRODUCT等で数えます。(以後COUNTIFとして説明)
 次にSMALL(配列,COUNTIF(…)+ROW(A1))としますと{0}の個数は7個ですから
 8番目に小さい{3}を得ることができます。
 下にフィルしますとROW関数はROW(A2)になりますので9番目に小さい{5}を得ることができます。
 このROW関数が下にフィル対応する役目になっています。
 この例ですとROW(A4)となったときにSMALL関数の第二引数が11でエラーになるので
 ROW関数の返り値が、配列<>検索条件の個数を超える場合にはエラー処理を加えて空白セル
 が返るようにIF関数で処理します。
 INDEX関数の第二引数(行番号)は上記のようにして求めています。
 第三引数(列番号)は表示したい項目が元表と同じである場合はそのままCOLUMN(A1)
 としてやれば1が返るのでいいです。 これは右にフィル対応にするための処置です。
 もしこれがA列なら()の中を省略してCOLUMN()で十分です。

 ざ〜っとこんな感じですがわからなければまた説明します。
 正直言って自分も完全に理解できているわけではありません。
 パターンによって先のCOUNTIFはSUM関数でも済むわけで、個数をカウントするのに
 何を用いるかは悩みどころですねぇ。

                       kym (^o^)_v 

 おはようございます(^^)
 kym (^o^)_vさん、ご丁寧なお返事ありがとうございます!!!!
 今、前半を理解したところです!(;^_^A 遅い・・・!?
 とりあえずお礼を、と思いとり急ぎ書き込みさせていただきます。
 これからじっくり読み解いて、またわからないところがあれば質問させていただきます。
 >わからなければまた説明します。
 このやさしさに感動・・・。゜(゚´Д`゚)゜。
 本当にありがとうございました!!!
 (バーズ娘・多謝!!)


コメント返信:

[ 一覧(最新更新順) ]


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