プロが教えるわが家の防犯対策術!

エクセル2003で1つのシートのデータを、2つのシートへ振り分けるための関数はあるのでしょうか?例えば
seet1に次のようなデータガあるとして
  A    B    C    D
1 氏名  年齢  性別   住所
2 佐藤  30   男性    東京都
3 伊東  40   女性    大阪府
4 中村  50   男性  北海道
5 後藤  60   女性  京都府

C列「性別」に「男性」を入力すればseet2に、「女性」だったらseet3に。
氏名や年齢等を上から順番に表示(入力)させたいんですが…
(seet2・3ともに、データの列の順番はseet1とは異なりなす。)
次にseet1の「6列目」に男性を入力するとseet2の「4列目」に行くように
(表を作ると)
seet2には
  A     B    C 
1 住所   氏名  年齢
2 東京都  佐藤  30
3 北海道  中村  50
4 (seet1「6列目」の人)
seet3には
  A      B     C 
1 住所    氏名   年齢
2 大阪府   伊東   40
3 京都府   後藤   60

seet1に入力したデータを、性別で振り分けseet2に男性、seet3に女性を…
関数を使いできるでしょうか?
実際には同じようなデータを何度も「コピぺ」で入力していて非常に面倒くさいので、宜しくお願いします。ちょっと、分かりにくいですか?

A 回答 (3件)

こんばんは!


色々方法はあるかと思いますが・・・
一例です。

↓の画像で説明させていただきます。
Sheet1のA列を作業用の列とさせていただいています。

Sheet1のA2セルに
=IF(B2="","",IF(D2="男性",1,2))
として、オートフィルで下へコピーします
(Sheet2・3の数式をそれぞれ1000行まで対応できるようにしていますので、1000行くらいまでコピーしても構いません)

これで男性には1 女性には2 が表示されるはずです。
(ハーフの方は判別できません)

Sheet2(男性)のA2セルに
=IF(COUNTIF(Sheet1!$A$2:$A$1000,1)>=ROW(A1),INDEX(Sheet1!$E$2:$E$1000,SMALL(IF(Sheet1!$A$2:$A$1000=1,ROW($A$1:$A$999)),ROW(A1))),"")

これは配列数式になってしまいますので
もしこの画面からコピー&ペーストされる場合は
単に貼り付けただけではエラーになると思いますので
セルに貼り付け後、F2キーを押すか、数式バー内で一度クリックします。
編集可能になりますので、
Shift+Ctrl+Enterキーで確定します。
数式の前後に{ }マークが入り配列数式になります。

そして、B2セルに
=IF($A2="","",INDEX(Sheet1!$B$2:$C$1000,SMALL(IF(Sheet1!$A$2:$A$1000=1,ROW($A$1:$A$999)),ROW(A1)),COLUMN(A1)))
(これも配列数式になってしまいます。)

B2セルのフィルハンドルでC2セルまでコピーします。

最後にA2~C2セルを範囲指定し、C2セルのフィルハンドルで下へコピーすると
画像のような感じになります。

女性も同様の操作ですが、
数式が少し違いますので
Sheet2の数式も書いておきます。

Sheet3のA2セルに(配列数式です)
=IF(COUNTIF(Sheet1!$A$2:$A$1000,2)>=ROW(A1),INDEX(Sheet1!$E$2:$E$1000,SMALL(IF(Sheet1!$A$2:$A$1000=2,ROW($A$1:$A$999)),ROW(A1))),"")

B2セルに(配列数式です)
=IF($A2="","",INDEX(Sheet1!$B$2:$C$1000,SMALL(IF(Sheet1!$A$2:$A$1000=2,ROW($A$1:$A$999)),ROW(A1)),COLUMN(A1)))
としてC2セルまでコピー
最後にA2~C2セルを範囲指定し、C2セルのフィルハンドルで下へコピー

尚、作業用の列をもう少し増やせば配列数式にしなくても良いような感じがします。

以上、参考になれば幸いですが、
他に良い方法があれば読み流してくださいね。
どうも長々と失礼しました。m(__)m
「エクセル2003で1つのシートのデータを」の回答画像2
    • good
    • 0
この回答へのお礼

有り難うございます。びっくりしました。私が質問を入力するより、この長文、またこの数式でこんなに早いとは…恐れ入ります。「配列数式」ですかぁ。日頃エクセルを使っている者として、恥ずかしいですが聞いたこと無かったです。実際に仕事に使っているのが、もともと違うファイルで、seet1とseet2・3は一部だけが同じデータで、しかし重複している所もあるという何とも面倒くさいものなので、助かります。
 作業用の列は確か、AU列くらいまではあったような気がします。月曜日に仕事場で試してみます。有り難うございました。「配列数式」についても、それまでに勉強しないといけないですね(^_^;)

お礼日時:2009/10/23 21:16

配列数式といった方法でなくとも次のようにすればよいでしょう。


シート1のE列を作業列として次の式を下方にオートフィルドラッグします。

=IF(A2="","",IF(C2="男性","1/"&COUNTIF(C$2:C2,"男性"),"2/"&COUNTIF($C2:C2,"女性")))

この式は今後データが追加されると思われる行までドラッグすればよいでしょう。
この式では男性の場合には1で男性が入力されている最初の行では1/1というように表示されます。女性の場合には2で最初の行では2/1のように表示されます。
シート2では1行目に項目を希望する順序で列に並べて入力します。
A2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(OR(A$1="",COUNTIF(Sheet1!$E:$E,"1/"&ROW(A1))=0),"",INDEX(Sheet1!$A:$D,MATCH("1/"&ROW(A1),Sheet1!$E:$E,0),MATCH(A$1,Sheet1!$1:$1,0)))

シート3でもシート2と同様に1行目に項目名を入力します。
A2セルには次の式を入力し右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(OR(A$1="",COUNTIF(Sheet1!$E:$E,"2/"&ROW(A1))=0),"",INDEX(Sheet1!$A:$D,MATCH("2/"&ROW(A1),Sheet1!$E:$E,0),MATCH(A$1,Sheet1!$1:$1,0)))
    • good
    • 0
この回答へのお礼

KURUMITO さん ありがとうございました。出来ました!一部ですが…
項目が多く微妙に違うので困っています。
報告する部署が違うのんですよねー…何とも…
もうちょっと頑張ってみます。
でも別のところでも使えそうでうすね。
ありがとうございました。

お礼日時:2009/10/29 23:21

振り分けは一度切りですか?



性別にオートフィルターを付けて行を絞り込むではだめですか?
男性・女性に分ける前に列の順序入れ替えした方が楽とは思いますが。
    • good
    • 0
この回答へのお礼

早速、有り難うございます。いやーびっくりしました。
実際仕事で使っているんですが、元々seet1とseet2・3のデータの内容が違うんですよ。ちょっと分かりづらかったですね。でも、こんなに早く回答してもらうとは思っていませんでした。有り難うございました。

お礼日時:2009/10/23 20:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!