- ベストアンサー
エクセル VBAで、条件に当てはまるものをすべて表示させる方法を教えてください。
こんばんは。大変お世話になっています。 エクセルでシフト表を作っています。 職員は100名ほど、勤務時間の種類は8種類ほどあります。 A列に名前が並び、B列の2行目から日付が並んでいます。 1日 2日 3日 4日 ・・・ 佐々木 A 休 C A 佐藤 休 D D B 鈴木 B B A 休 田中 休 D D D 別のシートに、その日の勤務職員をシフト別にそれぞれ表示させた一覧表を作りたいのです。 =LOOKUP(F3,B2:B5,A2:A5) (F3=シフトコードが入っている) とLOOKUP関数で入れてみたのですが、一番最初の反応する名前が表示されるだけで、すべての対応者の名前は出ませんでした。 どうすればできるでしょうか? 関数ではダメだとするとVBAでしょうか? 教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAなら大枠はこんな感じでしょうか。 Sub Test() Dim s, clm, rw As Integer Sheets("シフト表").Range("b2:af5").Clear shift = Array("", "A", "B", "C", "D", "休") For s = 1 To 5 For clm = 2 To 32 For rw = 2 To Range("A65536").End(xlUp).Row If Cells(rw, clm) = shift(s) Then Sheets("シフト表").Cells(s + 1, clm).Value = Sheets("シフト表").Cells(s + 1, clm) & Cells(rw, 1) & Chr(10) Next rw Next clm Next s End Sub 予め「シフト表」というシートを作って、その1行目に「1日,2日,3日,4日, ・・・」を、A列に「A,B,C,D,休」をインプットを手作業で行ってね。(VBAでも可能ですが・・)
その他の回答 (3)
- 11369
- ベストアンサー率29% (20/67)
ピポットテーブルはいかがでしょうか?(A列には”名前”というフィールド名を追加して下さい) (1)[データ]-[ピポットテーブルとピポットグラフレポート]を選択し、表示されたダイアログで、 分析するデータのある場所を、Excelのリスト/データベース、作成するレポートの種類をピポットテーブルを選択。次へ。 (2)使用するデータの範囲を、氏名とシフトがある範囲を指定。次へ。 (3)作成先を新規。完了 ピポットテーブルのフィールドリストについては、表示したいものをダブルクリックすれば追加されます。 1日の勤務シフトAの人を表示したければ、1日のフィールドオプションをAとすればOK。
- hana-hana3
- ベストアンサー率31% (4940/15541)
マルチポストはルール違反です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2168510 >その日の勤務職員をシフト別にそれぞれ表示させた一覧表を作りたいのです。 希望する表示例を提示してください。
お礼
マルチポストの件、申し訳ありませんでした。 VBAで質問した方が良いとアドバイスいただいたもので・・・。あちらを先に締め切り登録すべきでした。以後気をつけます。教えて下さってありがとうございました。 A列 B列 C列 1行 1日 2日 2行 A 田中 鈴木 鈴木 佐藤 佐藤 3行 B 葉山 平野 小林 小林 夏樹 田中 4行 C 高橋 佐々木 小村 近藤 5行 D 藤村 三谷 平野 影山 こんな感じが希望なのですが・・・。 よろしくお願いします。
- merlionXX
- ベストアンサー率48% (1930/4007)
シフトコードとは、質問の表で使われているA~Dのことですか? それならば、表を選択し、メニューの「データ」、「並び替え」で、調べたい日付の列を最優先キーにして並び替えをしたらいいのではないでしょうか?
お礼
ご回答ありがとうございます。 早速試してみたのですが名前を表示させたい場所に、数字ばかりが出ます。 名前を表示させたいのですが・・・。 初心者で申し訳ありません。