• 締切済み

エクセルでの、表からのデータ抽出について

関数を使った、表からのデータ抽出方法について教えてください。 氏名 生年月日 年齢 担当者 所属 佐藤 1973/4/5 33 加藤 営業 上田 1987/10/4 19 永田 経理 林 1978/6/8 28 永田 営業 西田 1977/7/9 29 清水 営業 長尾 1984/6/25 22 加藤 経理 上のような表がある時に、別のシートに誕生日ごとの表を出したいのですが、どのようにすれば良いか分からずに困っています。なお”別のシート”に抽出したデータは、以下のような表をイメージしています。 (抽出例) 1月生まれ 該当者なし 2月生まれ 該当者なし 3月生まれ 該当者なし 4月生まれ 5日 1973 33歳 佐藤 (加藤) 5月生まれ 該当者なし 6月生まれ 8日 1978 28歳 林 (永田) 25日 1984 22歳 長尾 (加藤) というように、誕生日を基準に月ごとに表示され、該当するデータの横軸のデータも連動して表示したいのと、可能であれば日にちの若い順に順番に表示ができれば理想的です。またできることなら、営業か経理かでシートが分けられると完璧です。 自分でできない割には欲張りな質問ですみません。方法をご存知の方に、ご教授いただければありがたいです。よろしくお願いいたします。

みんなの回答

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

仮に同一シート上の A4:E10にデーターが A3:E10に表題が入っているとして書いています 又、該当データがなかったときは「-」と表示させてます =IF(INDEX(FREQUENCY(MONTH($B$4:$B$10),ROW($1:$11)),ROW(A1))<COLUMN(A1),"-",LOOKUP(1,{1},TEXT(INDIRECT("b"&SMALL((MONTH($B$4:$B$10)<>ROW(A1))*65555+ROW($B$4:$B$10),COLUMN(A1)),),"d日 yyyy ")&TEXT(INDIRECT("c"&SMALL((MONTH($B$4:$B$10)<>ROW(A1))*65555+ROW($B$4:$B$10),COLUMN(A1)),),"0 歳 ")&TEXT(INDIRECT("a"&SMALL((MONTH($B$4:$B$10)<>ROW(A1))*65555+ROW($B$4:$B$10),COLUMN(A1)),),"@ ")&TEXT(INDIRECT("d"&SMALL((MONTH($B$4:$B$10)<>ROW(A1))*65555+ROW($B$4:$B$10),COLUMN(A1)),),"(@)"))) これってエラー出ますかね? もしエラーが出たなら SMALL((MONTH($B$4:$B$10)<>ROW(A1))*65555+ROW($B$4:$B$10),COLUMN(A1)) を lookup(1,{1},SMALL((MONTH($B$4:$B$10)<>ROW(A1))*65555+ROW($B$4:$B$10),COLUMN(A1))) と、すべて代えて頂けますか? あと本来要らないように作ったはずなのですが 編集前後の両方の式で 「Control」+「Shift」+「Enter」で配列数式として確定して見てください エラーが回避できたなら十数列、12行にわたってCopyしてみてください お望みの回答がお望みの書式で出てくるはずです 今日再々度目くらいのOSのリストアしたのですが うちのexcelなんか調子悪くて… 式の長ささえ問題なければ ネストも6だし構文も問題ないと思えるので 無事に値を出してくれるはずなのですがね~ とにかく試してみて頂けませんか? もしくはそこの貴方! 赤ペン先生をお願いして構いませんか? (~ ~;)ヾ

kumasannn
質問者

お礼

お返事が遅くなりましてすみません。 No.1の方と同様に何度も試してみたのですが、No.2番さんの方式でも上手くいきませんでした。 せっかく教えていただいたノウハウを生かせなくてすみません。またの機会には懲りずにいろいろ教えてください。 ありがとうございました。

  • 134
  • ベストアンサー率27% (162/600)
回答No.1

 「抽出例」のような形で抽出するのは、関数では不可能ですね。 各月の生年月日がいくつ出るか、確定しませんので。 方法論の一つの例です。  | A  |  B   … 1| 氏名 | 生年月日 … となっていると思いますが、2列ほど計算のための列を入れさせて頂き、氏名をC列、生年月日をD列とします。 B列に =if(c2="","",month(D2)*100000) と入力します。  また、所属の列に「セルの書式設定」→「ユーザー定義」により[=1]"営業";[=2]"経理" と入れます。 これにより、所属の列は 1と入力すると「営業」2と入力すると「経理」と表示されます。 A列には、 =if(c2="","",COUNTIF($B$2:B2,B2)+B2+g2*100) と入力します。 これにより、6桁目に生まれた月、3桁目に営業か経理の区別、下2桁が登場順となります。 「挿入」→「定義」で、列は、A列から最終列まで、行は、最終行よりゆとりを持たせた範囲に名前を定義してください。たとえば、「一覧」とします。 シート2に移ります。 1月生まれの営業の人には、100100番台の、経理の人には、100200番台の、番号が付きます。 2行目からデータを表示させるとして、 A列に =100100+row()-1 と入力します。 B列には、 =if(iserror(vlookup(a2,一覧,3,0)),"",vlookup(a2,一覧,3,0)) と入力し下に数式をコピーすると、一覧ができそうに思いました。

kumasannn
質問者

お礼

ご返事が遅くなりすみませんでした。 何度も試してみたのですが、何故か表示ができませんでした。 せっかく教えていただいたのに活用できませんですみません。 またの機会には、懲りずにいろいろ教えてください。 ありがとうございました。

関連するQ&A