![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつも大変お世話になっています。
申し訳ありません。どなたかお力をお貸しください。
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
・
・
・
・
申し訳ありませんが、
どなたかご教示をお願いします。
No.1ベストアンサー
- 回答日時:
関数での答えを求めているレベルと思うが、こういう(形式で)
ーーー 日
氏名 データ
の3元になっている表を且つ(氏名・行単位で)重複が有る休日(データではX)を抜き出すのはむつかしい。
すんなりとやるにはVBAが簡単。
氏名ー日ーデータ(Xの行あり)
・・・
の形式なら、例えば「imogasi方式」(Googleで照会のこと)のようなやり方で何とかできる。
前者から後者の形式に関数で表を構築替えも難しい。
関数は第2番目、第3番目・・の該当列を見つける関数が無いからだ。
関数の回答が出るかどうか?
ーーーーーーーーーーーーー
質問者には現在は無縁だろうが、読者のこともありVBAで上げておく。
例データ
Sheet1
A-G列
1No氏名2009/4/12009/4/22009/4/32009/4/4
2123山田ABBB
3124佐藤ABBx
4125田中xxAA
5128清水CBxA
625上田CBxA
ーー
結果
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と半角全角など合わせること。
早速のご回答ありがとうございました。
お礼が大変遅くなりましたが、
imogasi 様
のアドバイスに従い行ったところ
できました。(一部ソースは修正しましたが)
VBAを真剣に学ぶ決意をしたところです。
関数ではできないことが(対応が難しいことが)
簡単にできるような気がします。
大変ありがとうございました。
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)
フォント色 白
お忙しいところご回答ありがとうございました。
今回はVBAを御提案くださった方がいらっしゃったため、
VBAで対応しました。
今後ともよろしくお願いします。
No.2
- 回答日時:
まず、現状 作成されている「スケジュール表」と あなたがやりたい事では
「軸」が違うから面倒なのです。
名前が横軸、日付が縦軸になっていればフィルターでの抽出も簡単になりますよね。
「元々の表はイジれない」ということであれば、別のシートにコピペで「行列を入れ替えて貼り付け」をすれば
やりたい事が やりやすくなります。
(またはピポッドでもOK)
従業員の人数によっては、その人数分のボタンを用意して そこにマクロを登録しておいて ボタンを押すだけで
「誰だれさんの休みの日」を一発で抽出出来るようになります。
それが無理なら「休みの日を抽出」だけでもマクロ登録しておいて「人」だけ手動で抽出するのが良いでしょう。
どちらにせよ上記の方法は「軸を変更する」という事が前提ですが。
興味があり、この方法を選択するということであれば再度回答します。
レスをありがとうございました。
VBAを御提案くださった方がいらっしゃったため、
今回は再度のご回答は結構です。
お忙しいところ大変ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- その他(プログラミング・Web制作) Python pandasについての質問です。 日付 名前 ◯月◯日 佐藤 ・ 伊藤 ・ 山田 ・ 2 2022/06/13 17:16
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- 野球 世界一ですか 4 2022/11/11 06:17
- 野球 日本代表 これで世界一ですか 2 2022/11/11 05:59
- 野球 世界一ですか 2 2022/11/11 06:15
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Excel(エクセル) Excelの1つのセルにそれぞれ文字+数字が入力されていて、 数字のみ抽出して合計したいです。(合計 4 2023/03/16 23:44
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- 野球 高校野球の話 1 2022/08/18 09:54
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
エクセルで勤務表の出勤者を抜き出したい。 日付 名前 5/16 5/17 5/18 5/19 田中
Excel(エクセル)
-
複雑なシフト表から1日ごとの出勤者、シフトを抜き出したいです
Excel(エクセル)
-
月間勤務表から1日~31日までの各日付ごとに出勤している職員を書き出す方法
Excel(エクセル)
-
-
4
月のシフト表から当日のシフトを抽出したいです
Excel(エクセル)
-
5
関数を使用して、エクセルの勤務表から、勤務形態別に担当者を抽出したい
Excel(エクセル)
-
6
エクセルで出勤表から出勤者の名前を出したいのですが。
Excel(エクセル)
-
7
エクセルで、勤務表から 日付別に勤務者と勤務形態を抽出して、別シートに抽出したい
Word(ワード)
-
8
会員名簿から出席者のみ一覧表の作成
その他(Microsoft Office)
-
9
再度質問です。シフト表から日毎の勤務者を抽出する方法
Excel(エクセル)
-
10
エクセル2010 欠席者の名前を抽出し同じセルに
Excel(エクセル)
-
11
エクセルで、勤務表から 日付別に勤務者と勤務形態を抽出して、別シートに抽出したい
Excel(エクセル)
-
12
Excelで当番表の作成(休み考慮、完全ランダム)
Excel(エクセル)
-
13
エクセル シフト勤務表から、シフト別に氏名を抽出。
その他(ソフトウェア)
-
14
勤務シフト表から、当日の出番を抽出するには?
Excel(エクセル)
-
15
エクセル 該当日付のデータの抽出方法
Excel(エクセル)
-
16
エクセルのセルでシフト表を作っているのですが、それを別のシートに反映させたいのですが、どのようにすれ
Excel(エクセル)
-
17
【Excel】月間シフトから日別シフトを自動作成したい
Excel(エクセル)
-
18
エクセルで勤怠表 土日祝と平日と分けてそれぞれの合計を出したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelデータをコピペして、ペー...
-
スプレッドシート、Excelでの数...
-
エクセルの関数について教えて...
-
スプレッドシートで使う数式を...
-
Microsoft Officeの中古は信用...
-
エクセルで会社の従業員のデー...
-
Excelで50個のセルに同じ文字を...
-
エクセルの表で1年間の曜日を...
-
エクセルでの特別な文字を上に...
-
エクセルで不等号記号(≠)が上に...
-
エクセルでB列でフィルターをか...
-
エクセルでセルに標準で入力さ...
-
Excelで、項目の種類ごとにカウ...
-
【マクロ】アクティブセルにブ...
-
EXCELの質問です 119から足した...
-
【マクロ】アクティブセルの、...
-
【マクロ】アクティブセルの行...
-
エクセルの空欄をつめて、次の...
-
Excelの数式について教えてくだ...
-
非表示列の再表示に失敗
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報