• 締切済み

エクセルで

以下のようなシートがあります。 A   B   C 01   小林  (1) 02   佐藤  (2) 03   田中  (1) 04   本多  (1) 05   近藤  (2) A列⇒個人別番号(上から下に大きな番号になる) B列⇒名前 C列⇒グループ 以上のシートをもとに、別のシートに、『グループ(1)』と『グループ(2)』の名簿を作成したいのです。名簿のイメージは以下の通りです。 A列      B列 グループ(1)   グループ(2) 小林      佐藤 田中      近藤 本多 名前は、個人番号の小さい順番で並べていきたいのです。理想は関数で作成したいと考えています。宜しくお願い致します。

みんなの回答

  • odessa7
  • ベストアンサー率52% (101/192)
回答No.6

 この場を借りて一言申し上げたいのですが・・。  ご質問者様は、ご回答者の方が提示された方法をちゃんとお試しになられたのでしょうか?    #2の方へ補足を書いていらっしゃいますが、その時点では皆さんの回答を目にされたのでしょう?皆さんが善意で解決案を提示されているのに、それを無視しておかれると言うのは如何なものでしょうか。  試してみて上手くいったのか、そうでないのか、上手くいかなかったのであれば、どこがどうなったのか、どうしたいのか、具体的にお書きになればさらなる解決策もご提示できるかもしれませんが、それをしないでおいて#2の方に「VBAの方法を提示しろ」とは、あまりに安直な要求ではないでしょうか?  あなたがエクセルで関数を組まれたご経験があるなら理解いただけると思いますが、これだけの回答を提示するには、私を含め、皆さんそれなりに時間を費やしてこられたわけです。  ここが無料で回答を求めることの出来る場であることを、どうか良くご理解いただきたく、あえて苦言を呈した次第です。では、誠意あるご対応のほどよろしくお願いいたします。

euratom
質問者

お礼

ご指摘ありがとうございます。 もちろん、すべての方法を試させていただいております。宜しくお願い致します。

  • odessa7
  • ベストアンサー率52% (101/192)
回答No.5

 なるべく簡単な方法で・・。  まず下図のように作業列を挿入します。ちなみにA列は不要になるので、削除してもかまいません。またこのシートのシート名を「データ」と仮定します。 A B C D   E 01    小林  (1) 02    佐藤  (2) 03    田中  (1)  B1セルに下記の関数を入れ、下までコピー。 =IF(E1="(1)",ROW(A1),"")  C1セルに下記の関数を入れ、下までコピー。 =IF(E1="(2)",ROW(A1),"")  表示させたい別シートを下図とすると    A        B 01 グループ(1)  グループ(2)   02 小林      佐藤       03 田中      近藤      A2セルに下記の式をいれ下までコピー。 =VLOOKUP(SMALL(データ!$B$1:$B$5,ROW(A2)-1),データ!$B$1:$D$5,3,FALSE)  B2セルに下記の式をいれ下までコピー。 =VLOOKUP(SMALL(データ!$C$1:$C$5,ROW(A2)-1),データ!$C$1:$D$5,2,FALSE)  上記の関数では、例えばグループ(1)該当者が10人だと、関数を11個以上貼り付けた時にエラーが出ます。その場合は、ISERROR関数などで下記のように対処してください。  A2セルに下記の式。 =IF(ISERROR(SMALL(データ!$B$1:$B$5,ROW(A2)-1)),"該当なし",VLOOKUP(SMALL(データ!$B$1:$B$5,ROW(A2)-1),データ!$B$1:$D$5,3,FALSE))  これを下までコピー。

euratom
質問者

お礼

ありがとうございます。 こういう方法の発想はありませんでした。 勉強になります!

  • zenjee
  • ベストアンサー率47% (50/106)
回答No.4

実際はC列を基準にソートしてコピー&ペーストした方が遙かに簡単なのでしょうが、どうしても関数でやりたいということであれば、このような式の立て方もあるという程度の意味で、私なりの方法を投稿しますので、答の良否は別として気が向いたらたら参考にしてください。。 Sheet1が次のとおりとします。 1 小林 (1) 2 佐藤 (2) 3 田中 (1) 4 本多 (1) 5 近藤 (2) 6 山本 (2) 7 鈴木 (1) 8 大野 (2) Sheet2のA~E列を作業列とし、最終の答をF、G列に出すことにします。 各列の1行目は見出し行とし、計算範囲は15行までとしておきます。 A列にはA2:A15まで一連番号(1~14)を入力します。 B2からG2まで各セルの入力式を次のとおりとします。 「C2」  =IF(Sheet1!$C1="(1)",Sheet1!$B1,"") 「E2」  =IF(Sheet1!$C1="(2)",Sheet1!$B1,"") 「B2」  =IF(C2="","",COUNTA(C$2:C2)-COUNTIF(C$2:C2,"")) 「D2」  =IF(E2="","",COUNTA(E$2:E2)-COUNTIF(E$2:E2,"")) 「F2」  =IF(ISNA(MATCH($A2,B:B,0)),"",VLOOKUP($A2,B$2:C$15,2,FALSE)) 「G2」  =IF(ISNA(MATCH($A2,D:D,0)),"",VLOOKUP($A2,D$2:E$15,2,FALSE)) 以上の後、「B2:G2」を「B15:G15」までコピーします。 この計算式のプロセスは、Sheet1から一旦(1)(2)のグループ別に、Sheet2のC、E列に名前を取り出し、そのままでは空白行が出来るので、A、B、Dに作業列を設け、最終的にF、G列に空白行を詰めてグループ別に名前を並べるということです。 一見簡単な問題のように見えても、関数でエラー値を出さずに空白行を詰めて並べ直すということは決して容易でなく、もしグループが(3)(4)…と増えていけば作業列や計算式もそれだけ増え、更に複雑化するでしょう。

noname#192382
noname#192382
回答No.3

データ→フィルタ→オートフィルタ グループの列で(1)または(2)を抽出条件としてフィルターをかけると望みのデータが得られますからそれをコピーして別シートにはりつければ望みのデータが簡単に得られます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>理想は関数で作成したいと・・ このタイプの問題は関数では難しいと思います。 関数では、抜き出しが結構難しい上に、横に並べて列挙して行くのも難しいです。 何とか近いものを出しますが、これ以上のものは難しいかもしれない。本当は、VBAでやりたい。 データ例 Sheet1の A2:C10 A列  B列  C列   E列 F列 G列 1 小林 a 1 1 101 2 佐藤 b 2 1 201 3 田中 a 1 2 102 4 本多 c 3 1 301 5 近藤 b 2 2 202 6 鈴木 d 4 1 401 7 大島 d 4 2 402 8 植田 a 1 3 103 9 磐田 b 2 3 203 C列をa,b,c・・・にしたのは一般性を持たせるためです。 E2に=IF(COUNTIF($C$2:C2,C2)=1,MAX($E$1:E1)+1,VLOOKUP(C2,$C$2:$E$10,3,FALSE)) と入れてE10まで式を複写。 F2に=COUNTIF($C$2:C2,C2)と入れてF10まで式を複写。 G2に=E2*100+F2と入れて、F10まで式を複写。(100を掛けているのはa,b,c・・などが99人以下と仮定している。1000掛ける必要がある場合も考えられる。) なおF列は、E,F列の関数式を組み込んでG列だけの1式にすることはできるが、理解のため、あえて分けているもの。 E,F,G列の結果は上記の通り。 ーーーー Sheet2に行って A2に=INDEX(Sheet1!$A$2:$C$10,MATCH(COLUMN()*100+ROW()-1,Sheet1!$G$2:$G$10,0),2)と入れて式をA3まで複写する。 A2:A4を範囲指定し+ハンドルを出して、D2:D4まで引っ張る。 結果は 小林 佐藤 本多 鈴木 田中 近藤 #N/A 大島 植田 磐田 #N/A #N/A 私の手抜きで、回答はここまでにします。#N/Aが出ていますが ISERROR関数をかぶせて、エラーが出ないようにするのは、やってみて ください。あまりに式が長くなって、難しそうに見えるようになるので、載せることをあきらめています。 難しいといった意味がお分かりでしょうか。 これは私が自称imogasi方式といっているやり方の応用版です。 さて、もっと簡単な回答が出ますでしょうか。

euratom
質問者

補足

ご返答ありがとうございます。助かりますm(_ _)m もし、VBAを使用した場合はどのようになりますか。

noname#32989
noname#32989
回答No.1

VLOOKUPがいいのではないでしょうか? SUM IFでもできそうには思いますが・・・

関連するQ&A

  • エクセルで2つの条件を元に

    エクセル2007で名簿を作っています。 1ヶ月ごとにメンバーの順が変わります。 シート1(番号順に名簿を作りました)   A  B   C  1 1     山田 2 2     木村 3 3 副長 佐藤 4 4     鈴木 5 5 班長 田中 6 6     長田  シート2(こちらがメンバーに配る名簿です)   A   B  C   D 1 班長    1    3 2 田中    山田  鈴木 3 4 副長    2    4 5 佐藤    木村  長田 A2に田中,A5に佐藤を選んでくるのはvlookupで成功しました。 質問したいのは C列D列に上記の番号のようにシート1の名前を入れていきたいのですが,田中,佐藤の分を抜いた上で番号の若い順に選んできたいのです。 どのような関数をどのように使えば成功するでしょうか。  

  • エクセルで・・・

    エクセルで以下のシートがあります。 A   B  C  D 小林  ●  ●  ● 田中 佐藤  ●     ● このシートで、B/C/D列に数にかかわらず、一つでも『●』が入っていたら、1とカウントしたいのです。上のシートでいけば、小林は『1』、田中は『なし』、佐藤は『1』で、合計『2』とカウントしたいのです。どのような関数を使えばいいでしょうか?宜しくお願い致します。

  • エクセルでひもづいて表示させるには

    エクセルで、シート1とシート2をつくり、シート2には、 A  B   C 1  佐藤 5214 2  田中 3562 3  木村 2235 という、番号と名前、コードを表にします。 シート1のA列に「1」(番号)を入れると、B列にそれにひもづいた「名前」、C列に同じく「コード」を表示させるには、どうすればよいでしょうか。 よろしくお願いいたします。

  • エクセルで質問です。

    エクセルで質問です。 sheet1に     A     B      C     D 1  No.   グループ    氏名   住所 2 3  1     C      佐藤    東京 4  2     B      鈴木    埼玉 5  3     A      加藤    千葉 6  4     B      本多    東京 このようなデータがたくさんあります。(左の数字は行番号、上のアルファベットは列番号) これを別シートにグループ順に   A     B      C     D 1  No.   グループ    氏名   住所 2 3  1     A      加藤    千葉 4  2     B      鈴木    埼玉 5  3     B      本多    東京 6  4     C      佐藤    東京 と表示させる方法はありますか。 エクセルに詳しくないのですが どなたか助けていただければと思います。

  • エクセルの入力データーを別のシートの日付と氏名の交差点に記録していくマクロ

    エクセルのセルに入力したデーターを別のシートの名簿一覧に記録していくにはどのようなマクロを組めばよいでしょうか? 入力イメージとして、「田中 90 良」この項目は手動で入力するとします。 Sheet1 A   B  C  D  E  F  G 1 日付 氏名 成績 区分 2 9/19 田中 90  優 ここでマクロを実行すると別のシートに Sheet2 A   B  C  D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  と記録され、次に入力し、 Sheet1 A   B  C  D  E  F  G 1 日付 氏名 成績 区分 2 9/21 小林 80  良 さらにマクロを実行すると Sheet2 A   B  C  D   E   F  G 1       1組       2組  2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21        80 このように記録され、さらに Sheet1 A   B  C  D  E  F  G 1 日付 氏名 成績 区分 2 9/23 佐藤 95  優 と入力して、さらにマクロを実行すると Sheet2 A   B  C  D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21        80 5 9/23    95 という具合に、氏名と日付が交差するセルにデーターを記録していきたいのですが、 可能でしょうか? どうかお返事よろしくお願いいたします。

  • エクセルで質問です

    エクセルで質問です。 sheet1に     A     B      C     D 1  No.   グループ    氏名   住所 2 3  1     C      佐藤    東京 4  2     B      鈴木    埼玉 5  3     A      加藤    千葉 6  4     B      本多    東京 このようなデータがたくさんあります。(左の数字は行番号、上のアルファベットは列番号) これを別シートにグループ順に   A     B      C     D 1  No.   グループ    氏名   住所 2 3  1     A      加藤    千葉 4  2     B      鈴木    埼玉 5  3     B      本多    東京 6  4     C      佐藤    東京 と表示させる方法はありますか。 sheet1には都度入力されるので、並べ替えなどではなく vlooupとか関数の活用で何とかならないものでしょうか。 エクセルに詳しくないのですが どなたか助けていただければと思います。

  • 条件に合うものの合計

    エクセルでA列に「名前=山下、佐藤、田中、佐藤、田中、近藤、山下…等」で。B列に「100,90,70,120、30、50、5」などがあり、田中の合計は70+30=100、山下の合計は100+5=105というように、集計したいのですが…よろしくお願いします>

  • エクセル(Excel)の部分一致検索[COUNTIFでは無理かな?]

    A列の文字列(データベース)が、B列の個々に一致または部分一致するかをC列に表示させたいと思っています。 COUNTIF($A$1:$A$8,B1) だと、近藤さんと麻生さんは部分一致になりません。 COUNTIF($A$1:$A$8,"*"&B1&"*") だと、近藤さんと麻生さんは逆の不一致となってしまい、佐藤さんは部分一致になってしまいます。 COUNTIF("*"&$A$1&"*":"*"&$A$8&"*",B1) こんな感じが理想なのですが、文法的にはエラーになります。 何か得策は、ありますでしょうか? よろしくお願い致します。   AAAA  BBBB  CCCC  1鈴木一朗 近藤真彦 True 2田中角栄 野村克也 False  3野茂英雄 伊藤     True 4佐藤浩一 鈴木一朗 True 5伊藤     麻生太郎 True 6小林     佐藤     False 7近藤 8麻生

  • 他のシートのセルの値を引用したい

    EXCEL2007でマクロ作成中の初心者です。今困っています。お助けください。 シートのA列に名前が書いてあります。 その名前の横B列に番号を入れたいのです。      A       B     1 佐藤   2 伊東   3 加藤   4 以下つづく 横B列の番号は他のシートにあります。現状では以下の番号になります。     A          B     1 佐藤        1   2 伊東        3   3 加藤        5   4 以下つづく 他のシートに以下の表があります。これは可変の表で、名前は次の列は空白です。 名前のあるセルのみ上の番号を表示したいです。 、       A    B    C    D    E     F   G  →以下つづく    1     2 番号    1     2    3     4    5    6   7   →以下つづく    3 名前   佐藤        伊東       加藤      田中  →以下つづく わかりにくいかもしれませんがよろしくお願いします。

  • Excelの質問

      A   B 1山田 65 2佐藤 77 3田中 77 4小林 90 Aの列を生徒の名前、Bの列をテストの点数とします。上位三名の名前をC1、C2、C3に書き出したいのですがうまくできません。また、この例のように点数が同じ人がランクインしている場合は五十音順になるようにもしたいのですがやり方が分かりません。どなたか教えてくれないでしょうか。

専門家に質問してみよう