ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュの条件に合うデータの抽出

  • mixiチェック
  • このエントリーをはてなブックマークに追加
条件に合うデータの抽出

A列に通し番号 B列に番号 C列に名前 D列に希望番号 E列に第一希望 F列に番号 G列に第二希望 H列に備考 I列に番号 J列に地域 K列に番号 L列に第二地域 M列に住所 N列に電話番号

というシートがあります。このシートのD列のセルには1〜10の数字一つが入ります。何がしたいかと言うと、D列に1を入れた者のA列からN列まで(D列を除く)のデータを別シート(例えばシート「1」)に抽出したいのです。同じように2、3・・・・10と番号別にシートへ集計したいと思います。何が問題かと言うと人数が全部で50人いるために、D列に1を入れる人が5人、2を入れる人が10人、3は・・・、という風に複数人出てしまい、私の知っている単純な関数では処理できなくなってしまっております。

できましたら、私の今後の勉強にもなりますので関数で教えてください。関数が不可能な場合はマクロでお願いいたします。

説明が不足していたらご指摘ください。

コメント(12)

作業列を使用して、COUNTIF関数で各数字の連番を作って
それをキーに別シートにすれば出来ると思います

VBAでやるなら、For文でやれば出来ると思いますよ
マリ男さん

教えていただきありがとうございます。COUNTIFは条件を満たしたセルの個数を返してくれる関数なのに、どうやるとできるのか、もう少し教えていただけないでしょうか。
セル範囲をひとつずつ増やして、その範囲の中で
条件を満たすのはいくつかを返させれば
各数字の連番は振れます

範囲例
A1:A1
A1:A2
A1:A3

連番の区別をつけるために、その数字を前につけるなどすれば
キーに出来るはずです

例えば、1 の連番
011
012
013
D列の値でオートフィルタをかけて、抽出できた分を
コピー&ペーストすれば手作業でもすぐ出来そうですね。
同じ手順をマクロの記録でマクロ化すれば、ワンタッチ化も出来そうですが…
それだと関数の使い方の学習にならないから駄目ですかねぇ?あせあせ(飛び散る汗)

監督さんの意向に沿っていなくて恐縮ですが、
楽に出来る事をわざわざ難しくする必要も無いでしょうし、
関数式で処理した方が楽な部分とマクロで処理した方が楽な部分、
それぞれ適材適所でそれぞれの機能を使う方が、
保守も容易になり幸せなのかなぁ、と個人的には思いますわーい(嬉しい顔)あせあせ(飛び散る汗)
マリ男さん

教えていただきありがとうございます。私の説明が下手で、上手く伝わっていないようです。申し訳ありません。

もう一度説明しなおします。
「シート1」には
A列に「通し番号」 B列に「番号」 C列に「名前」 D列に「希望番号」 E列に「第一希望」 F列に「番号」 G列に「第二希望」 H列に「備考」 I列に「番号」 J列に「地域希望」 K列に「番号」 L列に「第二地域希望」 M列に「住所」 N列に「電話番号」

各々50人分のデータが入っております。

D列には“1”から“10”の数が入ります。

同じシート内でも別にシートを造っても構わないので、
★D列に“1”を記入した者は誰なのか?その者のA〜N列のデータはどうなのか?複数名いるので、それぞれ同様にA〜N列のデータはどうなのか?
★上記と同じで、今度はD列に“2”を記入した者は誰なのか?以下上記と同じ
★では“3”は“4”は、、、と“10”まで集計する。

いかがでしょうか。
ですから、COUNTIF関数でキーを作成し、それを元に抽出すればいいのでは?

例えば、Sheet1のO列を作業列とする
D1セル =TEXT(D1,"00")&COUNTIF($D$1:D1,D1)
O1セルをO1:O50までコピー

1 を抽出するSheetのA1
A1セル =IF(ISNA(MATCH("01"&ROW(),Sheet1!$O$1:$O$50,0)),"",INDEX(Sheet1!$A$1:$N$50,MATCH("01"&ROW(),Sheet1!$O$1:$O$50,0),IF(COLUMN()>=4,COLUMN()+1,COLUMN())))
A1セルをA1:M50までコピー

2 を抽出するSheetのA1
A1セル =IF(ISNA(MATCH("02"&ROW(),Sheet1!$O$1:$O$50,0)),"",INDEX(Sheet1!$A$1:$N$50,MATCH("02"&ROW(),Sheet1!$O$1:$O$50,0),IF(COLUMN()>=4,COLUMN()+1,COLUMN())))
A1セルをA1:M50までコピー
マリ男さんはじめみなさん。

解決いたしました。とても単純な事に気づかず、頭をこねまわしてしまいました。みなさんに申し訳ありませんでした。
Minonさん

おっしゃる通りです。複雑にするつもりは無かったのですが、簡単だということに気づかず、皆様のお手を煩わせてしまいました。申し訳ありませんでした。
>> 監督 さん
学習として、関数式で解決する事が主目的かと思ったもので…あせあせ(飛び散る汗)
無事解決されたようで良かったですわーい(嬉しい顔)

>> マリ男 さん
勉強になりましたm(__)m
3つ以上ネストされた関数式を見ると眩暈がする人なので、
ついついマクロに逃げてしまうのですが、
職場の制約によりマクロが使えない環境の事を考えると
きちんと構築できるようになった方が良いんでしょうねぇわーい(嬉しい顔)あせあせ(飛び散る汗)
逃げずにちゃんと読み解いて理解を深めたいと思います。
関数を使わない方法、つまりそれほど頻繁にその作業をしない前提であれば、列Dをキーにソートした上で、そこに固まった番号単位で単純にコピペ。
今よくよく見ると
>7の
D1セル =TEXT(D1,"00")&COUNTIF($D$1:D1,D1)
は
O1セル =TEXT(D1,"00")&COUNTIF($D$1:D1,D1)
のミスですね

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。