• ベストアンサー

複数項目からのデータ抽出

 エクセルで部活動名簿を作っています。 この学校では、一人の生徒が複数の部活に所属しています。 シート1に下記のような名簿を作成しておいて   A   B   C  D    E   F   G ______________________________ 1 学年  氏名 性別 部活  部活  部活  部活 2  1  スズキ 男 バスケ       水泳 3  1 ヤマシタ 女       テニス 水泳 4  2  サトウ 女 バスケ            バレー 5  2  イトウ 男        テニス 6  3  タナカ 男 バスケ  テニス       バレー シート2に、たとえば「2 男 バレー」(2は、2年生ということ) と入力して、ボタンをクリックするとシート1の名簿から抽出されてシート2に表示されるようにしたいのです。 最初は複数抽出ではなく、バレー部ならバレー部、バスケ部ならバスケと抽出すればよかったので、マクロの記録を使って フィルタオプションの設定で指定した範囲を選択 シート1でリスト範囲を指定し 検索条件範囲は、シート2に部活 バレー部と入力しそこのセルを指定 抽出範囲でシート2の表示したいセルを選択しました。 マクロの記録を終了してから、ビジュアルベーシックエディタで 少しいじって、その後フォームでボタンを作成し そこにマクロを読み込ませて、そのボタンをクリックすると シート2に表示されるようにしました。  これで出来上がりと思ったら、依頼主からバレー部の中でも 学年でわけ、さらに性別で分けるようにしたいという要望があり いろいろと試してみたのですがうまく行かず・・・ お手上げ状態です。 ちなみに、私はエクセルは詳しくないです。 前回の抽出も、ネットや図書館で借りてきた本で調べ調べやっと出来たものです。  どうか、お力をお貸しください!よろしくお願いいたします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

部活を 部活1 部活2 部活3 部活4 といった具合に変更します 条件となるセルに 学年 性別 部活1 部活2 部活3 部活4  2  男 バレー  2  男    バレー  2  男       バレー  2  男          バレー といった具合に設定しておき フィルターのオプションで抽出してみてください 1行の列にきじゅるされた条件がアンド(AND) 行方向に伸びる条件がオア(OR) になります

UNI0928
質問者

お礼

ありがとうございます! 部活1 部活2 部活3 部活4とすることで うまく出来ました!! ありがとうございました!!

その他の回答 (2)

回答No.3

登録のシートと検索結果のシートを分けなくてもいいのであれば、下のように表を変更して、オートフィルタを使うのが簡単だと思います。   A    B    C    D     E    F   G ______________________________ 1 学年  氏名  性別 バスケ テニス 水泳 バレー 2  1  スズキ   男  ○         ○ 3  1  ヤマシタ 女       ○     ○ 4  2  サトウ   女  ○             ○ 5  2  イトウ   男       ○ 6  3  タナカ   男  ○   ○         ○ 1行目で、[データ]メニューの[フィルタ]から[オートフィルタ]をチェックします。

UNI0928
質問者

お礼

 ありがとうございました。 解決いたしました!!

UNI0928
質問者

補足

 ありがとうございます。 そうなんです!私も最初それを提案しました。 それで、ほしいデータだけをコピーして別の名簿に貼り付ける等したら どうかと提案したのですが・・・ 依頼主は、とにかくワンタッチボタンで・・・と言うので。   すみません・・・ ありがとうございました。

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

エクセルの初心者がやるような問題ではないと思う。 それで処理ロジックは総なめ(全員をIF文で判別する方法)法という初等的な方法でやったものを挙げておく。 例データ A1:G6 学年 氏名 性別 部活 部活 部活 部活 1 スズキ 男 バスケ 水泳 1 ヤマシタ 女 テニス 水泳 2 サトウ 女 バスケ バレー 2 イトウ 男 テニス 3 タナカ 男 バスケ テニス バレー 部活所属記録はD列から左よりになっているが、質問例でも問題なかろう。 ーーー コード 標準モジュールに Sub test01() k = 3 d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row MsgBox d For i = 2 To d If Worksheets("Sheet1").Range("C" & i) = Worksheets("Sheet2").Range("A1") Then For j = 4 To 8 'D-H列まで If Worksheets("Sheet1").Cells(i, j) = Worksheets("Sheet2").Range("B1") Then For m = 1 To 8 'その行A-H列をSheet2へ値代入 Worksheets("Sheet2").Cells(k, m) = Worksheets("Sheet1").Cells(i, m) Next m k = k + 1 '次の行をポイント End If Next j End If Next i End Sub これをSheet2のコマンドボタンのクリック処理のなかへ Private Sub CommandButton1_Click() test01 End Sub にする。 ーー 結果 1例です  男 テニス (コマンドボタン)<--条件をA1,B1に入れる 学年 氏名 性別 部活 部活 <--コピーしておく 2 イトウ 男 テニス   <-以下が結果 3 タナカ 男 バスケ テニス バレー

UNI0928
質問者

お礼

ありがとうございます。 確かに、私のような初心者がやるようなことではないかもしれないですが 仕事上、やらざるを得なくて・・・ 部活1 部活2 部活3 部活4とすることで うまく出来ました!! imogasi様の回答はすごいですね。 やはり、初心者には難しいです。 これを機に、勉強してみたいと思います。 ありがとうございました!!

関連するQ&A