• ベストアンサー

【EXCEL】シフト表から休みの日だけを抽出する方法をご教授ください。

いつも大変お世話になっています。 申し訳ありません。どなたかお力をお貸しください。 1ヶ月のシフト表から休みの日を抽出したいのです。 休みの日の記号は常に【X】です。(=Xを抽出したいのです) 出勤日の記号は英数字で、最大5桁まであります。 【拡大図】   A  B    C      D      E      F 1 No 氏名  2009/4/1 2009/4/2  2009/4/3 2009/4/4    2 123 山田   A      B     B      B 3 124 佐藤   A      B     B      X 4 125 田中   X       X     A      A 5 128 清水   C       B     X      A 6 025 上田   C       B     X      A 【縮小図】 A  B   C DEFGHIHIJKLMNOPORSTU 1  NO 氏名 日日日日日日日日日・・・・・・ 2 123 山田 ABBBAXXAAAAAXXBBBBBXXAAAAAXXAA 3 124 佐藤 ABBXXAAAAAXXBBBBBXXAAAAAXXAABB 4 125 田中 BXXAAAAAXXBBBBBXXAAAAAXXAABBAA 5 128 清水 CBXABBBBXXXBBBBCCCCXAAAAAXXXAA 6 025 上田 CBXABBXBAAABBXBCXCCXAAAAAXXXAA 【やりたいこと】 ※No(=社員No)、氏名、休みの日を別シートに表示したいのです。 ※オートフィルタを使って、日毎に手動でやることは避けたいです。    A  B   C 1  No 氏名 休日     2  123 山田 2009/4/6 3  123 山田 2009/4/7 4  123 山田 2009/4/13 5  123 山田 2009/4/14 6  123 山田 2009/4/20 7  123 山田 2009/4/21 8  123 山田 2009/4/27 9  123 山田 2009/4/28   10 124 佐藤 2009/4/4 11 124 佐藤 2009/4/5 12 124 佐藤 2009/4/11 13 124 佐藤 2009/4/12   ・   ・   ・   ・   申し訳ありませんが、 どなたかご教示をお願いします。

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

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

関数での答えを求めているレベルと思うが、こういう(形式で) ーーー 日 氏名  データ の3元になっている表を且つ(氏名・行単位で)重複が有る休日(データではX)を抜き出すのはむつかしい。 すんなりとやるにはVBAが簡単。 氏名ー日ーデータ(Xの行あり) ・・・ の形式なら、例えば「imogasi方式」(Googleで照会のこと)のようなやり方で何とかできる。 前者から後者の形式に関数で表を構築替えも難しい。 関数は第2番目、第3番目・・の該当列を見つける関数が無いからだ。 関数の回答が出るかどうか? ーーーーーーーーーーーーー 質問者には現在は無縁だろうが、読者のこともありVBAで上げておく。 例データ Sheet1 A-G列 1 No  氏名 2009/4/1 2009/4/2 2009/4/3 2009/4/4 2 123 山田 A B B B 3 124 佐藤 A B B x 4 125 田中  x x A A 5 128 清水  C B x A 6 25 上田  C B x A ーー 結果 Sheet2 A2:C6 C列は表示形式を日付にしておくこと。 124 佐藤 2009/4/4 125 田中  2009/4/1 125 田中  2009/4/2 128 清水  2009/4/3 25 上田  2009/4/3 ーーーー コード 標準モジュールに Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1"): Set sh2 = Worksheets("Sheet2") d = sh1.Range("B65536").End(xlUp).Row '最下行 k = 2 'Sheet2で第2行から書き出し For Each cl In sh1.Range("d2:G" & d) 'D2:Gx範囲の全セル検査 If cl = "x" Then 'xならSheet2へ書き出し sh2.Cells(k, "A") = sh1.Cells(cl.Row, "B") sh2.Cells(k, "B") = sh1.Cells(cl.Row, "C") sh2.Cells(k, "C") = sh1.Cells(1, cl.Column) k = k + 1 End If Next End Sub で実行。 If cl = "x" Then のxは表のセルのxと半角全角など合わせること。

chihatatu
質問者

お礼

早速のご回答ありがとうございました。 お礼が大変遅くなりましたが、 imogasi 様 のアドバイスに従い行ったところ できました。(一部ソースは修正しましたが) VBAを真剣に学ぶ決意をしたところです。 関数ではできないことが(対応が難しいことが) 簡単にできるような気がします。 大変ありがとうございました。

その他の回答 (2)

noname#204879
noname#204879
回答No.3

貴方の【やりたいこと】のレイアウトが異なっても構わなければ、次のような方法もあります。 Sheet1   A  B    C     D     E   …   AF    AG 1 No  氏名 09/04/01 09/04/02 09/04/03 … 09/04/30 2 123 山田 A     B     B     … C 3 124 佐藤 A     B     B     … A 4 125 田中 X     X     A     … A 5 128 清水 C     B     X     … B 6 025 上田 C     B     X     … C Sheet2    A     B     C     D     E 1    123    124    125    128    025 2 山田   佐藤   田中   清水   上田 3 09/04/18 09/04/04 09/04/01 09/04/03 09/04/03 4 09/04/29 09/04/08 09/04/02 09/04/05 09/04/08 5      09/04/10 09/04/20 09/04/13 6      09/04/18 09/04/26 09/04/20 7                09/04/27 8 Sheet2!A2: =VLOOKUP(A1,Sheet1!$A:$B,2,FALSE) Sheet2!A3: {=SMALL(IF(OFFSET(INDIRECT(ADDRESS(MATCH(A$1,Sheet1!$A:$A,0),1,,,"Sheet1")),,2,,31)="X",(OFFSET(INDIRECT(ADDRESS(MATCH(A$1,Sheet1!$A:$A,0),1,,,"Sheet1")),,2,,31)="X")*(Sheet1!$C$1:$AG$1),""),ROW(A1))} ← 配列数式 Sheet2 において、3行目以降のデータがないセルは、そのままでは、エラー #NUM! が表示されるので、此れを非表示にするために、次の[条件付き書式](Sheet2!A3 の場合)を設定します。 数式が    =ISERROR(A3) フォント色  白

chihatatu
質問者

お礼

お忙しいところご回答ありがとうございました。 今回はVBAを御提案くださった方がいらっしゃったため、 VBAで対応しました。 今後ともよろしくお願いします。

回答No.2

まず、現状 作成されている「スケジュール表」と あなたがやりたい事では 「軸」が違うから面倒なのです。 名前が横軸、日付が縦軸になっていればフィルターでの抽出も簡単になりますよね。 「元々の表はイジれない」ということであれば、別のシートにコピペで「行列を入れ替えて貼り付け」をすれば やりたい事が やりやすくなります。 (またはピポッドでもOK) 従業員の人数によっては、その人数分のボタンを用意して そこにマクロを登録しておいて ボタンを押すだけで 「誰だれさんの休みの日」を一発で抽出出来るようになります。 それが無理なら「休みの日を抽出」だけでもマクロ登録しておいて「人」だけ手動で抽出するのが良いでしょう。 どちらにせよ上記の方法は「軸を変更する」という事が前提ですが。 興味があり、この方法を選択するということであれば再度回答します。

chihatatu
質問者

お礼

レスをありがとうございました。 VBAを御提案くださった方がいらっしゃったため、 今回は再度のご回答は結構です。 お忙しいところ大変ありがとうございました。

関連するQ&A

  • エクセル:別ファイルからの抽出

    エクセル:別ファイルからの抽出 エクセルにて、 あるファイルに A  B    C No 月    氏名    1 2010/11  佐藤 2 2010/10  山田 3 2011/12  田中 4 2010/10  田中 ・ ・ とあり、それを別ファイルで 2010/10とセルに入力してやると、B列の2010/10だけ抽出して 一覧にしてくれるようにしたいと考えております。 関数またはVBAにて処理する方法はありますでしょうか? A  B    C No 月    氏名    2 2010/10  山田 4 2010/10  田中 ・ ・ ※別ファイルにおいては順番は関係ないので、Noがなくても よいです。 恐縮ですが、お答え願えれば有難いです。

  • エクセルのデータ並べ替え(抽出)の方法

    エクセルのデータ並べ替え(抽出)の方法 を教えてください。 下記のようなデータがあるとします。   A    B    C   D 1 田中  東京  千葉  福岡 2 山田  京都  滋賀 3 佐藤  奈良  青森  USA 4 鈴木  カナダ 愛媛 A列は名前、B列以降は文字列です。B列以降はC列までの行、D列までの行とさまざまです。重複セルはありません。 これを下記のように並べ替えたいです。   A    B    C   D 1東京  田中 2千葉  田中 3福岡  田中 4京都  山田 5滋賀  山田 6奈良  佐藤 7青森  佐藤 8USA   佐藤 9カナダ 鈴木 10愛媛  鈴木 こういうことは可能でしょうか??? 教えてください。 よろしくお願いします。

  • 条件抽出の方法について教えてください。

    以下の家族名簿から代表者だけ抽出するにはどうしたらよいのでしょうか?以下のテキストファイルの場合、1項目の番号が家族番号になります。 member.txt 1,山田太郎 1,山田花子 1,山田凛 2,田中一郎 2,田中桂子 3,佐藤圭太 3,佐藤洋子 抽出結果を、 山田太郎,田中一郎,佐藤圭太としたいのです。 以上、わかる方がいらっしゃればアドバイスお願いします。

    • ベストアンサー
    • CGI
  • エクセルで抽出条件に合う行を表示させるにはどうしたらよいですか

    抽出条件に合う行を表示(抽出)したいのですが、 どのようにしたらよいですか。 条件ですが、 下記の表が有ります。 A列には氏名、B列には今年度金額、C列には、前年度金額を入力しています。 抽出条件は、B列(今年度金額)が0でC列(前年度金額)が5,000以内の行を抽出したいです。 下記の表ですと、木村さんと上田さんと後藤さんと田中さんを抽出したいです。 B列=0 or C列 <=5,000という条件を抽出する方法を教えて下さい。 A B C 氏名 今年度金額 前年度金額 後藤 10000 5000 田中 1000 1250 佐藤 2000 10000 木村 0 3000 上田 0 1000

  • 【Excel】各来客の最古来店日を抽出する方法

    当方Excel2007を使用しております。 来店されたお客様のリストの中から、 それぞれのお客様の最古来店日のみを 抽出したいと考えているのですが、 実現できる方法を模索しております。 イメージとしては以下のような感じです。 【シートA】     A    B    C 1    ID   氏名  来店日 2    003   Cさん 2011/11/07 3    001   Aさん 2011/11/13 4    002   Bさん 2011/12/22 5    001   Aさん 2011/11/10 6    003   Cさん 2012/01/03 7    003   Cさん 2011/12/16 【シートB】     A    B    C 1    ID   氏名  来店日 2    003   Cさん 2011/11/07 3    001   Aさん 2011/11/10 4    002   Bさん 2011/12/22 オートフィルタを使わずに抽出後の状態まで 整理する方法を探しています。 あまりPC経験のない別の人に作業を任せたいため、 人的工数を少なくするためにも シートAにデータを貼り付ければシートBに抽出されるよう、 関数で制御したいと考えています。 とりあえずこの方法が可能か不可能かだけでも お教えいただけると助かりますので よろしくお願いいたします。

  • Excelでの抽出方法を教えてください

    Excelに以下のデータが入力されています。 氏名  日付 都市名 Aさん  9/8 東京 Bさん 9/15 大阪 Cさん 9/16 仙台 Bさん 9/19 名古屋 Cさん 9/22 前橋 Dさん 9/22 横浜 Cさん 9/22 清水 Aさん 9/30 東京 これらのデータから氏名欄に出現する氏名の一覧を抽出したいのです 求められている結果は Aさん Bさん Cさん Dさん です。 何か方法はあるでしょうか。

  • エクセル。表からの抽出について

    A表の中に複数の会社名と担当者がありますが、重複する社名もあります。 (例) 【Aセル】【Bセル】 A社・・・・山田 B社・・・・鈴木 A社・・・・田中 C社・・・・大田 これを別の表に社名を抽出したいのですが、同じ社名は1社とみなし社名の種類だけを抽出する方法はありますか。 (例) 【A表】→→【B表】 A社-----⇒A社 B社-----⇒B社 A社--⇒×重複するため除外 C社-----⇒C社 説明が不明瞭で申し訳ありませんが、宜しくお願いいたします

  • Excel 該当データ数の抽出方法(日付)

    Excel 該当データ数の抽出方法(日付) <元データ>  A    B      C 1 氏名  開始日  終了日 2 3 青木 2010/3/1 2010/3/10 4 石田 2010/3/1 2010/3/20 5 鈴木 2010/3/3 2010/3/7 6 佐藤 2010/3/1 2010/3/3 7 田中 2010/3/5 2010/3/17  上記のような元データがあった場合に、各日に実施されているデータ数(開始日~終了日の間 に当たるデータ数)を以下のように抽出したいのですが、その方法を教えていただけないでしょうか。抽出先は同じシート内でも、別シートでもいいのですが。 <抽出>    A      B 1  日付    該当数 2 3 2010/3/1   3 4 2010/3/2   3 5 2010/3/3   4 6 2010/3/4   3 7 2010/3/5   4  よろしくお願いします。 

  • excelオートフィルタの検索条件をセルに入力したい

    以下のようなexcelのリストがあるとします。     A       B    C~ 1 佐藤・鈴木  Aタイプ 2 田中・山田  Bタイプ 3  佐藤     Aタイプ 4  田中     Cタイプ 5 山田・鈴木  Cタイプ A列の"田"が含まれる行を抽出したい場合 オートフィルタをかけ、オプションの抽出条件の指定で "田"を含む、で検索すれば良い、というのはわかります。 ですが、この動作をもうちょっと簡単にできないかと思っています。 具体的には、以下のようにセルに入力して検索・抽出するとはできないでしょうか。     A       B    C~ 1   田 2 3 4   A       B    C~ 6 田中・山田  Bタイプ 8  田中     Cタイプ 9 山田・鈴木  Cタイプ (1、2行目=検索用 3行目=空き 4行目以降=リスト) 過去の質問で、同じようにセルに入力して抽出する方法を 聞いていた方がいらっしゃったので参考にしようと思ったのですが 方法がVBAを使ったもので、VBAの知識がまったく無いために さっぱり理解することができませんでした。 何か良い方法がありましたら教えていただけないでしょうか。

  • 表からの抽出

    素人からの質問です。 エクセルのシート1にこの様な表があります。 世帯主  名義人  不動産種類  面積 佐藤A子 佐藤B子 宅地     100m2 山本C男 山本D男 畑      200m2 佐藤A子 山田F雄 山林     5000m2 次にシート2で検索する1つのセルに 佐藤A子 と入力します。 世帯主  名義人  不動産種類  面積 佐藤A子 佐藤B子 宅地     100m2 佐藤A子 山田F雄 山林     5000m2 この様に、世帯主が 佐藤A子 のデータだけが抽出されるようにしたいのですが、どうすればよいでしょうか?(オートフィルターは使用したくありません。)関数又はマクロでの作成方法を教えてください。

専門家に質問してみよう