
いつも大変お世話になっています。
申し訳ありません。どなたかお力をお貸しください。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
複雑なシフト表から1日ごとの出勤者、シフトを抜き出したいです
Excel(エクセル)
-
エクセルで勤務表の出勤者を抜き出したい。 日付 名前 5/16 5/17 5/18 5/19 田中
Excel(エクセル)
-
関数を使用して、エクセルの勤務表から、勤務形態別に担当者を抽出したい
Excel(エクセル)
-
-
4
月のシフト表から当日のシフトを抽出したいです
Excel(エクセル)
-
5
月間勤務表から1日~31日までの各日付ごとに出勤している職員を書き出す方法
Excel(エクセル)
-
6
エクセルで出勤表から出勤者の名前を出したいのですが。
Excel(エクセル)
-
7
エクセルのセルでシフト表を作っているのですが、それを別のシートに反映させたいのですが、どのようにすれ
Excel(エクセル)
-
8
再度質問です。シフト表から日毎の勤務者を抽出する方法
Excel(エクセル)
-
9
エクセルで、勤務表から 日付別に勤務者と勤務形態を抽出して、別シートに抽出したい
Word(ワード)
-
10
エクセル 該当日付のデータの抽出方法
Excel(エクセル)
-
11
エクセルでカレンダーを作成しているのですが、特定の日付を非表示にするやり方を教えて頂きたいです。 縦
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VLOOKUP FALSEのこと
-
if関数の複数条件について
-
【マクロ】実行時エラー '424':...
-
【画像あり】オートフィルター...
-
同じ名前(重複)かつ 日本 ア...
-
【マクロ】数式を入力したい。...
-
excel
-
Office2021のエクセルで米国株...
-
エクセルのVBAで集計をしたい
-
エクセルシートの見出しの文字...
-
エクセルの複雑なシフト表から...
-
グループごとの個数をカウント...
-
エクセルについてどう関数を使...
-
表計算ソフトでの様式の呼称
-
エクセルでフィルターした値を...
-
勤怠表について ABS、TEXT関数...
-
【マクロ】excelファイルを開く...
-
【関数】=EXACT(a1,b1) a1とb1...
-
【マクロ】【画像あり】4つの...
-
オートフィルターの絞込みをし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
Office2021のエクセルで米国株...
-
【画像あり】オートフィルター...
-
vba テキストボックスとリフト...
-
他のシートの検索
-
【マクロ】【相談】Excelブック...
-
【マクロ】【配列】3つのシー...
-
【マクロ】元データと同じお客...
-
【マクロ】数式を入力したい。...
-
【マクロ】左のブックと右のブ...
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】excelファイルを開く...
-
【関数】3つのセルの中で最新...
-
エクセルの複雑なシフト表から...
-
【マクロ】【画像あり】❶ブック...
-
LibreOffice Clalc(またはエク...
おすすめ情報