• ベストアンサー

男女別の名列表をつくりたい

エクセルで名列表をつくっています。 A列に1から40までの通し番号、B列に男女、C列に名前が入っている「名簿」シートがあります。 この「名簿」を元にして、男女別の「名列表」を別のシートに作りたいと思います。 「名列表」の方はA列に1からの通し番号(「名簿」のA列の数字とは関係ありませんので 並べ替えの必要はありません。)、B列に名前がはいります。 これが男女にわけられた2つの表(一つのシート内でかまいません)となるようにしたいです。 ただ、並べ替え等で男女別に分けるのではなく、元になる「名簿」を訂正すると自動的に 「名列表」も訂正されるというものがいいのです。 簡単な方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

簡単な方法?でもないですが、関数で作る方法です。 名簿の1行目、名列表の1行目は項目名が入るものとして 名列表に以下の式を入力(C列を1列お借りします。確認後、非表示にして下さい。) (男) A2セル:=IF(ISNA(B2),"",1) B2セル:=IF(ISNA(C2),"",OFFSET(名簿!$A$2,C2-1,2)) C2セル:=MATCH("男",名簿!$B$2:$B$65536,FALSE) A3セル:=IF(ISNA(B3),"",A2+1) B3セル:=IF(ISNA(C3),"",OFFSET(名簿!$A$2,C3-1,2)) C3セル:=MATCH("男",OFFSET(名簿!$B$2,C2,0):名簿!$B$65536,FALSE)+C2 4行目以降は3行目をコピー貼り付け(何行でも好きなだけ) で試してみてください。 名簿シートの男女は40行固定ではなく、B列全てを対象にしています。 (女)A2~C3をE2~G3にコピーしてG列の"男"を"女"に変更する E2セル:=IF(ISNA(G2),"",1) F2セル:=IF(ISNA(G2),"",OFFSET(名簿!$A$2,G2-1,2)) G2セル:=MATCH("女",名簿!$B$2:$B$65536,FALSE) E3セル:=IF(ISNA(G3),"",E2+1) F3セル:=IF(ISNA(G3),"",OFFSET(名簿!$A$2,G3-1,2)) G3セル:=MATCH("女",OFFSET(名簿!$B$2,G2,0):名簿!$B$65536,FALSE)+G2 説明は省きますが、興味があれば補足してください。(先ずは、うまくいくかどうかですが・・・)

ryo-ta_kun
質問者

お礼

「男」が入っているのが上から何行目だから…その隣の列の… というようには考えていたのですが、どんな関数を使えばいいのか さっぱりわかりませんでした。 ありがとうございました。 早速、使わせていただきます。

その他の回答 (2)

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

エクセルの質問とか回答にはは次の種類があります。 (1)手操作(中でもウイザード的なものあり)・関数・VBA(マクロ) こう言う分類のし方のほかに (2)バッチ処理-一旦入力を締め切って、それまでのデータに対し処理    即時処理--シートへ追加・変更・抹消の都度、「即座に」反映させ   る。 本問題は、手操作を望んでいないと思います。VBAを使ったのはどうでしょうか。(A)通常は関数で処理できないかと漠然と感じている質問者が多いように思います。(B)それと即時処理を望まれていますね。 しかし、(B)は関数では難しいのです。と言う理由は(1)関数は入力したとか言うキッカケを捉え難い(式を潜ませて、ある時には表示しそれ以外は空白にすることは良くやりますがそれは別でです)。VBAならその仕組みがあります。他に難しい点は(2)シートのセルに何か入力すれば、そのデータを他のセルに送る機能はありません。シートの受ける側のセルで関数式を書くことにより(例えば「=A1」)A1の値をそのセルへもって来れるのです。 ところが、本質問のように、男はどの行に入るか判らないのに、即時処理をする為には、受ける側のセルの式は入力より先に入れておく必要があるので、どこのセルよりもって来たら良いか判らない本問のケースには困ってしまう。またシート1の男が増えた時シートの終わりの次に追加すべきですが、終わりの行を捕まえるのも難しい。それでもし回答が出ても、技巧的にならざるを得ないのです。 私も関数で考えましたが、今のところ回答をできません。関数による回答がでるか楽しみです。 (3)また、1つのセルに2つ以上の関数式を入れることは出来ない。VBAならそれに似たことが出来ます。 エクセルで8時間回答がなかったのは珍しく、上記が原因だからと思います。

  • tuji3
  • ベストアンサー率42% (6/14)
回答No.1

自動的に更新するには、VBAを使わなくてはいけません。 以下のようにトライしてください。 まず、データがあるシートは Sheet1    男          Sheet2    女          Sheet3 として、各シートの1行目はタイトル行が入力されているとし、 各シートのA列は、通し番号が入力されているとします。 標準モジュールを挿入し、以下をコピー貼り付けします。 Option Explicit Public r As Range Sub DataChange() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Dim i As Integer, manRow As Integer, womanRow As Integer Set ws1 = Sheet1 Set ws2 = Sheet2 Set ws3 = Sheet3 ws1.Select Set r = Range("A1").CurrentRegion '転記先のクリア ws2.Range("B2:B41").ClearContents ws3.Range("B2:B41").ClearContents With r manRow = 2: womanRow = 2 '2行目から41行目まで繰り返す For i = 2 To r.Rows.Count If .Cells(i, "B") = "男" Then ws2.Cells(manRow, "B") = .Cells(i, "C") manRow = manRow + 1 Else ws3.Cells(womanRow, "B") = .Cells(i, "C") womanRow = womanRow + 1 End If Next End With End Sub 次に、VBEの画面で、プロジェクトエクスプローラのSheet1をダブルクリックして以下のコードを右側のペインにコピー貼り付けします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row > 41 Then Exit Sub If Target.Column < 2 Or Target.Column > 3 Then Exit Sub DataChange End Sub これで、シート1の元のデータが訂正されるたびに、シート2、3のデータは 自動的に更新されます。 

ryo-ta_kun
質問者

お礼

回答ありがとうございました。 ただ、VBAもVBEも全くわからない私には難しすぎて最初からつまづいてしまいました。 標準モジュールの挿入の仕方さえわからないのです。 申し訳ありませんが、関数を使う方法を選ばせていただきました。

関連するQ&A

  • エクセルで男女別に名前を検索して表示するには?

    エクセルで名簿を作っています。 一つめのシートに男女混合の名簿を貼り付けます。 二つめのシートで,女だったら左の列,男だったら右の列に名前を表示させたいのです。どのような関数を組み合わせればできるでしょうか。 一つめのシートは,一列目に番号,二列目に氏名,三列目に性別が入力されています。

  • 特定の文字列が入力されると、その文字列の列すべてを別のシートに抽出する

    特定の文字列が入力されると、その文字列の列すべてを別のシートに抽出する方法について お世話になります。 エクセルについてのご相談なのですが、 「シート1に入力された内容を、表の一番左の番号を元に別シートに引用したい」 というご相談です。 条件として、 ・入力される内容は複数の項目 ・入力されるデータは文字列も数値もある ・シート1は任意の項目でソートをすることもあるが、一番左の番号も同様にソートされるので、データと番号がずれることはない という前提です。 サンプル画像にイメージデータを添付致しました。 このサンプルですと、A4~A12の数字が「左端の番号」になり、別シートでは「左端の番号」を元にB~Fのデータを引用するように作成をしたいと思っています。 説明がわかりにくいかとは思いますが、ご助力頂ければ助かります。 よろしくおねがいいたします。

  • excel:表をある列の内容で並べ替え

    excel2000以上 EXCELのシートがあります。 (B3からE102)まで4列、100行の表 B列(B3の頭から順にb102まで1番から100番まで順番に数字が入っています。) さてこの表を、別にあるG3からG102に入っている数値この数値は1から100のある順列になっており、その順列の順番に元の表の行を並べかえたい。どうすればいいのでしょうか。 例えば G列には上から 23,53,61,63,11,5,43、―――となっていたら 新しい表は1行目から元の表の23行目、53行目、61行目と並べる。 よろしく。

  • エクセルで別シートからクラス別の名列表を作るには?

    学校の学年の名簿を作っています。 sheet1のセルAには通し番号、セルBには1年の組、セルCには1年の出席番号、セルDには2年の組、セルEには2年の出席番号、セルFには3年の組、セルGには3年の出席番号、セルHには名前を入れてます。 そこで、別のSheetでクラス毎の名簿一覧を作りたいと考えています。 できあがっている名簿の枠の中に、スピンボタンでクラスを1とか2とか入れると1組の出席番号順や2組の出席番号順に名簿ができるというものを考えています。 クラスによって人数の多少があるので、1組が35人の時には35番目の名簿まできちんと埋まって、2組が34人の時は35番目が空欄になるように。 さほどエクセルに詳しくなく、本やネットで散々調べ、何度か関数を入れてみましたが・・・。 どなたかのお知恵を拝借したく・・・。よろしくお願いします。

  • 表を列に転換(vlookup もしくは indirect ?)

    シート1に47都道府県が行、1980-99年までの20年間が列の表があり、940セルに数値が入力されています シート2に47都道府県を示す列Aと1980-99年までの20年間を示す列Bがあります ここでシート1の表とシート2の列A,Bを元に、シート2の列Cに、各年の各都道府県の数値を入力したいです 要すれば、シート1の表の940セルに入力された数値をシート2の列Cに一列に転換したいのです どのような関数を書けばよいでしょうか

  • VBAでソートして、貼り付けのやり方

    (条件及び操作) 1 シートが2つあります。(元データ と 名簿シート)という名前。 2 名簿シートのH2に数字を入力する。元データのシートの1行目にある、番号と一致する列を操作する。 3 元データの対象の列で、まずD列(組ごと)に、1組・2組をソートする 4 次に、対象の列(科目:国語や理科など)事に、○をソートする 5 ソート後に、番号、名前、出身と○をコピーする。 6 その後、名簿シート(1組でソートしたものは、B2、2組でソートしたものはE2)に貼り付ける 7 対象の列の科目名(国語なら国語を)をA1に貼り付ける 8 元データのソートを解除する (備考) 番号も科目も100ぐらいあります。 これらの(条件及び操作)を元に、名簿シートのH2に任意の数字を入力して、元データの対象の列を上記(1~8)の操作を行いたいと思います。 《シート名:元データ》 A列   B列   C列   D列   E列   F列   G列   H列   I列   ・・・                       1    2     3     4    5   ・・・   番号  名前   出身  組    国語  理科   英語   数学  社会  ・・・ 001 Aさん  東京    1     ○                ○   ○  002 Bさん  沖縄   1     ○                 ○   ○  003 Cさん  鹿児島  1     ○                     ○  004 Dさん  青森    1     ○                     ○  005 Eさん  北海道  2     ○          ○  006 Fさん  京都   2     ○          ○     ○ ・ ・ ・ 《シート名:名簿シート》      A列   B列   C列   D列   E列   F列   G列   H列    国語     1組              2組     番号   名前   出身  番号   名前   出身  番号入力      お忙しい中、大変申し訳ございませんが、どうぞよろしくお願いします。 また、質問の内容などがわかりづらいなどの事がありましたら、ご指摘ください。

  • 作成の表の値を別シートに移したい

    Sheet1に画像の表にあるように、Sheet1のC列のA+Bの結合番号の数字(例えば11とか118とか15007など)をSheet2のあるセルに入力すると、Sheet2へSheet1のD・E・Fのセルにある数字が移るようにするには、関数はどのようにしたらよいでしょうか。Sheet1のC列セルの「BC結合番号」はランダムの数字で最高7桁、最低1桁ですし、同一番号が「BC結合番号」(空欄セルがあるので)とびとびの行に1桁と2桁の数字が出てきます。また、A列セルの番号は50行程度こどに2・3・4・・・・30ぐらいまでと増えていきます。当然、D・E・Fのセル値はSheet2へ移行した時は、単独で評値が入るようにしたいのです。また、リンク貼り付け以外の方法でやりたいのです。(初心者でマクロは使えません。)

  • excel男女混合名簿を別のシートへ男女別にしたい

    sheet1に、男女混合名簿を作成しました。    A    B    C    D    E 1  年   組   性  名前   住所  2   1   1    男   山田   東京都 3   1    1   女   鈴木   神奈川県 4   1    1   男   高橋   埼玉県 5 1 1 男  佐藤  千葉県 6 1 1 女  田中 茨城県 7 1 1 男  松井  沖縄県 sheet2に、男女別の名前だけの名簿(男だけが先女だけが後)   A   B  C  D  E 1 山田 2 高橋 3 佐藤 4 松井 5 鈴木 6 田中 のようにしたいのですが、どうしたらいいですか? (1)sheet1が変更されたら、sheet2も自動的に変更したい。 (2)VBAなしで という初心者向けのわがままですが、よろしくお願いいたします。  

  • エクセルで項目ごとに新しい別のシートにしたい

    エクセルで名簿を作成しています。 C列に生徒番号、D列に氏名、E列にクラスがAからFまでランダムに入っています。 この名簿を新しいファイルに、クラスごとに別のシートにしたいです。 できればシート名も「A」「B」となっていれば助かります。 A,B列にもデータが入っていますが、今回は生徒番号、氏名、クラスのみの ファイルにしたいです。 良い方法を教えてください。よろしくお願いします。

  • A列の表の値を別の表の該当セルに転記していく。

    新たに質問させていただきます。 Sheet2にこのような表があります。 Sheet1A列にランダムで数字が並んでいます。503、401、310 ・・・ A1"503"は、Sheet2の表のF2に入ります。同様に Sheet1A2"401"は表のH6にはります。 このようにA1をSheet2F2に転記するのに 表のI列で検索し、該当のI1を見つけD1:H1,D3:H3からF1を見つけF2に転記していくことは可能でしょうか?

専門家に質問してみよう