- ベストアンサー
複数項目からのデータ抽出
エクセルで部活動名簿を作っています。 この学校では、一人の生徒が複数の部活に所属しています。 シート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に表示されるようにしました。 これで出来上がりと思ったら、依頼主からバレー部の中でも 学年でわけ、さらに性別で分けるようにしたいという要望があり いろいろと試してみたのですがうまく行かず・・・ お手上げ状態です。 ちなみに、私はエクセルは詳しくないです。 前回の抽出も、ネットや図書館で借りてきた本で調べ調べやっと出来たものです。 どうか、お力をお貸しください!よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
部活を 部活1 部活2 部活3 部活4 といった具合に変更します 条件となるセルに 学年 性別 部活1 部活2 部活3 部活4 2 男 バレー 2 男 バレー 2 男 バレー 2 男 バレー といった具合に設定しておき フィルターのオプションで抽出してみてください 1行の列にきじゅるされた条件がアンド(AND) 行方向に伸びる条件がオア(OR) になります
その他の回答 (2)
- JaritenCat
- ベストアンサー率37% (122/322)
登録のシートと検索結果のシートを分けなくてもいいのであれば、下のように表を変更して、オートフィルタを使うのが簡単だと思います。 A B C D E F G ______________________________ 1 学年 氏名 性別 バスケ テニス 水泳 バレー 2 1 スズキ 男 ○ ○ 3 1 ヤマシタ 女 ○ ○ 4 2 サトウ 女 ○ ○ 5 2 イトウ 男 ○ 6 3 タナカ 男 ○ ○ ○ 1行目で、[データ]メニューの[フィルタ]から[オートフィルタ]をチェックします。
お礼
ありがとうございました。 解決いたしました!!
補足
ありがとうございます。 そうなんです!私も最初それを提案しました。 それで、ほしいデータだけをコピーして別の名簿に貼り付ける等したら どうかと提案したのですが・・・ 依頼主は、とにかくワンタッチボタンで・・・と言うので。 すみません・・・ ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17070)
エクセルの初心者がやるような問題ではないと思う。 それで処理ロジックは総なめ(全員を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 タナカ 男 バスケ テニス バレー
お礼
ありがとうございます。 確かに、私のような初心者がやるようなことではないかもしれないですが 仕事上、やらざるを得なくて・・・ 部活1 部活2 部活3 部活4とすることで うまく出来ました!! imogasi様の回答はすごいですね。 やはり、初心者には難しいです。 これを機に、勉強してみたいと思います。 ありがとうございました!!
お礼
ありがとうございます! 部活1 部活2 部活3 部活4とすることで うまく出来ました!! ありがとうございました!!