• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:男女別名簿)

男女別名簿を自動生成する方法

このQ&Aのポイント
  • 関数が複雑すぎて分からなくなった場合、混合名簿から男女別名簿を自動で作成する方法を教えていただけないでしょうか。クエリではなく数式での解決方法が望ましいです。
  • 男女別名簿を自動で生成するためには、混合名簿シートの通番を適切に管理し、各学年ごとに男女別のシートを作成して数式を入力する必要があります。また、学年やクラス数が増えても対応できるようにする必要があります。
  • 男女別名簿を自動的に更新するためには、混合名簿シートの変更に応じて各学年の男女別シートも自動で更新する仕組みを構築する必要があります。また、1クラスの枠は最大で25人とし、男女比を大まかに5:5とすることが求められます。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (788/1647)
回答No.1

混合名簿シート:シート名は「混合名簿」とします。 999 行迄を想定しています。もっと多い場合、下式の$999を増やして下さい。 学年男女別シート A1 1~3 の数字にします。 B1:年 A3: =QUOTIENT(ROW()-3,25)+1 B3: =IFERROR(INDEX(混合名簿!D:D,SMALL(IF((混合名簿!$B$2:$B$999=$A$1)*(混合名簿!$C$2:$C$999=$A3)*(混合名簿!$G$2:$G$999=$C$1),ROW($B$2:$B$999)),MOD(ROW()-3,25)+1)),"") Ctrl+Shift +Enter で配列数式にして下さい。数式に{}が付きます。 纏めて必要なだけ下へコピペ。 例えば、3クラスだったら77行目までコピペします。 A1: データの入力規則、リスト 元の値: 1,2,3 C1: データの入力規則、リスト 元の値: 男,女 にして、プルダウンで選べるようにすれば、学年別男女別にシートを作る必要はありません。

その他の回答 (2)

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

#2です。imogasi方式でやってみた。 例データ 小生の勝手な内容のデータ例がありますが。 A1:D12 学年 氏名 氏名カナ 男女 1 木村 キムラ 1 1 山田 ヤマダ 1 1 佐野  サノ 1 2 近藤  コンドウ 2 3 山下  ヤマシタ 1 1 富野  トミノ 2 2 山本  ヤマモト 1 3 今井  イマイ 2 1 川田  カワタ 1 2 東田  ヒガシダ 2 3 西田  ニシダ 1 このまま、この部分をコピペしてデーター区切り位置、で操作すると、シートデータになると思います。画像で挙げるのでなく、質問には、こういう方式でデータ例をつくってほしい。 F2の式 =IF(AND($A2=1,$D2=1),A2,"") I2まで式の複写 J2の式 =IF(AND($A2=1,$D2=1),MAX($J$1:J1)+1,"") F2:J2を範囲指定して、J2で+ハンドルを出し、下方向に引っ張る。 J列だけでもよいが。 年 氏名 氏名カナ 男女 該当連番 1 木村 キムラ 1 1 1 山田 ヤマダ 1 2 1 佐野 サノ 1 3 1 川田 カワタ 1 4 ーーー L2に式 =IFERROR(INDEX($F$2:$I$12,MATCH(ROW()-1,$J$2:$J$12,0),COLUMN()-11),"") O列まで式複写。 L2:O2を範囲指定して、O2で+ハンドルを出して、下へ11行分、引っ張る。 結果 年 氏名 氏名カナ 男女 1 木村 キムラ 1 1 山田 ヤマダ 1 1 佐野 サノ 1 1 川田 カワタ 1 == 質問と違うところは、同一シートに出てしまっているところ。 Sheet2に出すなら、Sheet2の式において、Sheet1のセルの番地の前にSheet1!を加えれば よい。Row()やColumn()はSheet2の情報を取るのだから、注意(そのまま) == 上記J列を使わない関数式を考えるのが難しいので、作業列を使った。 関数式では、中間のデータ変数を、式中で使えない。VBAなら当たり前に使うのだが。 使わない場合は、配列数式、Sumproduct、その他関数の組み合わせ、などを使うのかなと思う。

mmrkjg
質問者

お礼

ありがとうございました😭

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

>関数が複雑すぎて分からなくなりました。 関数を使って、表の組み換え(本件は、抜出し・フィルタ―・タイプ)をやるには式が複雑になる。 ーー それよりも、操作のフィルタ―・詳細設定ででできないか考えるべきだ。 ただし抽出先を元データと別シートに指定できない。 まず同一シートの別セル範囲に、抜出後のデータを作って、手操作で各シートにコピペするべきだ。 ーー 作業列を使えば、1年男子だけ、などを抜出しは、IF関数で出来る。 しかし該当データが途中ブランク行データも混じり、それを最上行から、詰めるのが 厄介(imogasi方式が1つのやり方)で、1ステップ必要だ。これを嫌がる者が多くて、そういうことを分かってないように思う。 == 元々 ・操作 ・VBAや ・データベース言語(Accessなど)や ・クエリ機能でやるべき問題を、あえて 難しい方法でやりたいと言っていることを自覚すること。 ーー 作業列も使わず、関数の1式で抜出する回答も過去質問やWEB記事にある。 それを見て、>関数が複雑すぎて分からなくなりました、と言っているのかなと思う。自力で、1・2日で思いつくものではない。出来ればエクセル関数の上級だと思う。

関連するQ&A

専門家に質問してみよう