[[20050112092622]] 『今月の誕生日の人を別シートに抽出』(TAKE5) ページの最後に飛ぶ

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

 

『今月の誕生日の人を別シートに抽出』(TAKE5)

教えて下さい。

 B   C    D          E

氏名      誕生日

あああ    平成10年12月1日

いいい    昭和40年1月12日

 ・

 ・ 

というシートがあります。

これを今月の誕生月の人を別シートに「名前」と「誕生日」で抽出したいのですが。

宜しくお願い致します。


 オートフィルタしてコピー
 もしくは、 
 フィルタオプション
 を利用しては如何でしょうか?
  (INA)  

 INA様有難う御座います。

 人が増減しますので、出来れば自動(関数)では出来ないでしょうか?

 (TAKE5)


 別シートのどこに抽出したいのでしょうか。

 で、勝手に決めました。(^_^A;
 ※登場する人物は架空のものであり、実在する人物と関係はありません。
Sheet1	 A	 B	 C	 D
  1		氏名		誕生日
  2		哀川翔		昭和35年5月4日
  3		相田翔子		昭和50年1月3日
  4		江口洋介		昭和37年12月18日
  5		太田光		昭和42年12月14日
  6		菊池桃子		昭和45年1月15日
  7		黒木瞳		昭和34年2月8日
  8		栗田寛一		昭和34年1月20日
  9		佐藤藍子		昭和45年1月26日
 10		志村ケン		昭和25年3月4日
 11		杉山愛		昭和48年1月20日
 12		瀬戸朝香		昭和49年4月2日
 13		田中裕子		昭和30年1月18日
 14		夏目雅子		昭和31年3月8日

 Sheet2	 A	 B		
  1	氏名	誕生日		
  2	相田翔子	昭和50年1月3日		
  3	菊池桃子	昭和45年1月15日		
  4	栗田寛一	昭和34年1月20日		
  5	佐藤藍子	昭和45年1月26日		
  6	杉山愛	昭和48年1月20日		
  7	田中裕子	昭和30年1月18日		

 A2=IF(SUM(N(MONTH(Sheet1!$D$2:$D$14)=MONTH(TODAY())))<ROW()-1,"",INDEX(Sheet1!B$1:B$14,SMALL(IF(MONTH(Sheet1!$D$2:$D$14)=MONTH(TODAY()),ROW($A$2:$A$14)),ROWS(A$1:A1)),1))				
 B2=IF(SUM(N(MONTH(Sheet1!$D$2:$D$14)=MONTH(TODAY())))<ROW()-1,"",INDEX(Sheet1!D$1:D$14,SMALL(IF(MONTH(Sheet1!$D$2:$D$14)=MONTH(TODAY()),ROW($A$2:$A$14)),ROWS(B$1:B1)),1))				

 (川野鮎太郎)


 川野様いつも有難う御座います。

 衝突しちゃいました(^^;

 もう一つお願いがあるのですが、抽出した月日なのですが年号以外(昭和等)で

 早い順に並べたいのです。抽出したデータを並べ替えた方が早いかな??

 (TAKE5)


 並び替え・・・。上記の式ではそれは出来ません。
 もっと式を考えるか、値の貼り付けになります。(これでは役立たず_/ ̄|○ il||li)
 Sheet1で並び替えるのはダメですか?
 作業列を使って、E2=DAY(D2) でE列で並び替え
 (川野鮎太郎)

 川野様、有難う御座います。

 今、自分で作成したエクセルに合わせて川野様の数式を変更していましたが上手くいきません。

 そこで、数式の意味を教えていただきたいのですが・・・特に

 「<ROW()-1」と「ROWS(A$1:A1)),1))」の箇所の意味が分かりません。

 宜しくお願い致します。

 (TAKE5)


 「<ROW()-1」は、入力してあるセルの行数-1より、一致するデータが少ない場合空白の処理
 「ROWS(A$1:A1)),1))」は、SMALL関数の第二引数で、ROWS(A$1:A1)を下方にコピーしていくと、
 1,2,3・・・と増えていきます。
 ),1)) の1は、INDEX関数の引数で、1列目のことです。
 (川野鮎太郎)

 と、言う事は、sheet1の5行目からデータが入っていると「sheet1$D$2」の箇所を「sheet1$D$5」に変更するだけで良いのですよね?

 "VALUE!"のエラーが出てしまってます・・・

 (TAKE5)


 5行目からの場合は、以下のような感じになります。
=IF(SUM(N(MONTH(Sheet1!$D$5:$D$17)=MONTH(TODAY())))<ROW()-1,"",INDEX(Sheet1!B$4:B$17,SMALL(IF(MONTH(Sheet1!$D$5:$D$17)=MONTH(TODAY()),ROW($C$2:$C$14)),ROWS(A$1:A1)),1
 (川野鮎太郎)

 川野様、有難う御座います。

 やってみます!

 (TAKE5)

 川野様すみません。「で、勝手に決めました。(^_^A;」のカキコ通りにエクセルで

 作成したのですが何も出てこないのです。配列数式じゃないですよね?配列数式にすると"VALUE!"のエラーが出てしまいます。

 どこがおかしいのでしょうか?

 (TAKE5)


 ( ̄0 ̄;アッ 書き忘れてました。Shift+Ctrlキー押しながらEnterキーで確定させて配列数式にしてください。

 で、エラー???
 どこのセルに入れましたか?

 (川野鮎太郎)

 はい、sheet2のA2に「A2=IF・・・」をB2に「B2=IF・・・」を"="からそのまま入れて配列数式にしました。

 (TAKE5)


 で、Sheet1は1行目から入ってますか?
 (川野鮎太郎)

 はい、B1に「氏名」D1に「誕生日」があり、実際のデータは2行目から入っています。

 (TAKE5)


 であれば、考えられるのは、Sheet1のD列の生年月日がシリアル値ではなく、
 文字列になってる部分がある。
 ちなみに、D列を選択して、ツールバーの , (桁区切りスタイル)を押したら
 全て38625などの数値になりますか。
 (川野鮎太郎)

 はい、D2からの「昭和35年5月4日」が「22,040」とかに全てなりました。

 (TAKE5)


 う〜ん(/-_-\) A列 B列両方でしょうか・・・。
 こちらでは問題ないので、原因が判らない_/ ̄|○ il||li
 最初の式をもう一度コピペして確認していただけますか。
 (川野鮎太郎)

 川野様、大変申し訳御座いませんでした。

 「(Sheet1!$D$2:$D$14)」の箇所が「(Sheet1!$D$1:$D$14)」となっていました・・・お忙しい時間をお取りして本当にすみませんでした。

 (TAKE5)

 すみません、またまた質問があります。『(Sheet1!$D$5:$D$17)』の意味ですが参照する範囲がsheet1のD5〜D17までの範囲という意味ではないのでしょうか?
例えばsheet1に200行ある時は『(Sheet1!$D$5:$D$200)』と3箇所変更してやれば良いのかと思ったのですがうまくいきません。

ご教授願います。

 (TAKE5)


 最初の式を基に変更したほうがわかりやすいかもしれません。

 IF(SUM(N(MONTH(Sheet1!$D$2:$D$14)=MONTH(TODAY())))<ROW()-1,"",INDEX(Sheet1!B$1:B$14,SMALL(IF(MONTH(Sheet1!$D$2:$D$14)=MONTH(TODAY()),ROW($A$2:$A$14)),ROWS(A$1:A1)),1))

 範囲が、D5からD200までなら、
 $D$2:$D$14 を $D$5:$D$200 、 B$1:B$14 を D$1:D$200 、 ROW($A$2:$A$14) を ROW($A$5:$A$200) 
 に変えてみてください。
 (川野鮎太郎)

 川野様、昨日は有難う御座いました。うまくいきましたが・・・

 また疑問が出てきたのです。『Sheet1!B$1:B$14』の箇所なのですがなぜここだ
け"B$5"とならないのでしょうか?"B"の前に"$"がないから別な意味なのでしょうか?
試しにそこの数字を変えてみたらいろいろな誕生日を引っ張ってきてしまったもので。

もう一つの質問ですが該当のデータがない場合、『氏名』は"0"に『誕生日』は"明治33年1
月0日"と表示されてしまいます。該当データがない場合はそうなってしまうのでしょう
か?

 (TAKE5)


 該当が無い場合は、何も出ないのが正解です。
 IF(SUM(N(MONTH(Sheet1!$D$5:$D$200)=MONTH(TODAY())))<ROW()-1
 この部分が少し違うかもしれません。

 もう一度、Sheet1の配置(項目セルと実質データのセル番地)、Sheet2のどこに入れるのかを
 教えてください。
 >『Sheet1!B$1:B$14』は、INDEX関数の引数を、ROW関数で求めた行数でやっているので、
 必ず1行目からになります。

 (川野鮎太郎)

 >該当が無い場合は、何も出ないのが正解です。
 というのは数式が該当数よりも広範囲に入っていても何も出ないと言うことですか?
『IF(SUM(N(MONTH(Sheet1!$D$5:$D$200)=MONTH(TODAY())))<ROW()-1』
の部分を確認してみます。
(TAKE5)

 わかりました。IF(SUM(N(MONTH(Sheet1!$D$5:$D$200)=MONTH(TODAY())))<ROW()-1』
で"$D$200"の"200"がSheet1に実際に記載されている行数より多く設定するとなるみたい
です。
と、いうことはSheet1で人数が増えるたびに上記の数式を変更しなければいけないとい
うことですよね??違うかな(^^;
 (TAKE5)


 なるほど、そういうことですね。正解です。
 増えることも含めて範囲を広げたい場合は、条件を追加しなくてはいけないですね。
IF(SUM(N((MONTH(Sheet1!$D$5:$D$200)=MONTH(TODAY())*(Sheet1!$D$5:$D$200<>""))))<ROW()-1,"",INDEX(Sheet1!B$1:B$200,SMALL(IF((MONTH(Sheet1!$D$5:$D$200)=MONTH(TODAY())*(Sheet1!$D$5:$D$200<>"")),ROW($A$5:$A$200)),ROWS(A$1:A1)),1))

 (川野鮎太郎)

 川野様、有難う御座います。
 うまくいきました!!
 (TAKE5)

コメント返信:

[ 一覧(最新更新順) ]


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