![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
今回、自分ではどうしてもわからなく、ここで相談させてもらいました。
勤務表の書かれたエクセルファイルから、日ごとの勤務者を出したいと考えています。
勤務が新しく出るごとに毎回作り変えていたのでは、時間がかかってしまい大変です。
関数かマクロとかで、うまく抽出できる方法をご教授お願いします。
(状況)
勤務表.xlsと、当日勤務者.xlsのファイルは別ファイル。
勤務表.xlsは毎月更新され、今は当日勤務者.xlsを月に一度作り変えている。
マクロは完全な初心者でほとんどわからない。
勤務者は40人ほどの小さな会社。
![「勤務シフト表から、当日の出番を抽出するに」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/3/338488_5497bdea0f6f9/M.jpg)
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
No.3・4です!
何度もごめんなさい。
画像をよく見ると「勤務形態」が「休」などSheet1の項目にない場合もあるようですね!
そうなると前回のコードではエラーが発生してマクロが止まってしまいます。
エラー回避のために、どこでもよいので
On Error Resume Next
の1行を挿入しておいてください。
敢えて言えば
Range(ws1.Cells(5, 3), ws1.Cells(35, j)).ClearContents
For j = 4 To 34
の2行の間に入れて
Range(ws1.Cells(5, 3), ws1.Cells(35, j)).ClearContents
On Error Resume Next
For j = 4 To 34
といった感じがよいと思います。
これでSheet1の項目にない場合は空白となります。
親の仇のように「これでもかっ!」というくらい顔を出してごめんなさい。m(_ _)m
No.4
- 回答日時:
No.3です!
たびたびごめんなさい。
前回のコードはSheet1のデータをSheet2に表示させるコードでした!
アップされている画像の矢印をみると、逆の表示がご希望なのですね?
今一度コードを載せてみますので、変更してみてください。
前回アップした画像の配置通りとしています。
操作方法は前回と一緒です。
※ 今回もSheet2のA列は5行ずつ結合してあるという前提です。
Sub Sheet2からSheet1へ() 'この行から
Dim i As Long, j As Long, k As Long, M As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
j = ws1.Cells(4, Columns.Count).End(xlToLeft).Column
Range(ws1.Cells(5, 3), ws1.Cells(35, j)).ClearContents
For j = 4 To 34
For i = 9 To ws2.Cells(Rows.Count, 1).End(xlUp).Row Step 5
If ws2.Cells(i, j) <> "" Then
k = WorksheetFunction.Match(ws2.Cells(6, j), ws1.Columns(1), False)
M = WorksheetFunction.Match(ws2.Cells(i, j), ws1.Rows(4), False)
ws1.Cells(k, M) = ws2.Cells(i, 1)
End If
Next i
Next j
End Sub 'この行まで
画像をよくよくみると、Sheet2(元データ)のA列氏名は5行の真ん中にあるような気もします。
(セルを結合しているのではなく、担当場所と氏名が2行ずれているようにも見える)
この際ですのでその場合のコードも一緒に載せておきます。
Sub Sheet2からSheet1へ() 'この行から
Dim i As Long, j As Long, k As Long, M As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
j = ws1.Cells(4, Columns.Count).End(xlToLeft).Column
Range(ws1.Cells(5, 3), ws1.Cells(35, j)).ClearContents
For j = 4 To 34
For i = 11 To ws2.Cells(Rows.Count, 1).End(xlUp).Row Step 5 '9→11に変更
If ws2.Cells(i - 2, j) <> "" Then 'i → i-2 に変更
k = WorksheetFunction.Match(ws2.Cells(6, j), ws1.Columns(1), False)
M = WorksheetFunction.Match(ws2.Cells(i - 2, j), ws1.Rows(4), False) 'i→i-2に変更
ws1.Cells(k, M) = ws2.Cells(i, 1)
End If
Next i
Next j
End Sub 'この行まで
ご希望通りになればよいのですが・・・m(_ _)m
No.3
- 回答日時:
こんばんは!
>勤務表.xlsと、当日勤務者.xlsのファイルは別ファイル
とありますが、同じBookで別Sheetとしての一例です。
VBAになってしまいますが、その前に一手間かけます。
↓の画像のような配置で左側がSheet1・右側をSheet2としています。
Sheet2のA列は5行ずつ結合してあるというコトだとして・・・
余計なお世話かもしれませんが、両Sheetとも日付・曜日のセルはシリアル値にします。
Sheet1のA1セルに「西暦年」・C1セルに「月」の数値を入れるとします。
Sheet1のA5セル(セルの表示形式はユーザー定義から d とだけしておきます)に
=IF(MONTH(DATE($A$1,$C$1,ROW(A1)))=$C$1,DATE($A$1,$C$1,ROW(A1)),"")
B5セル(セルの表示形式はユーザー定義から aaa としておく)に
=IF(A5="","",A5)
という数式を入れA5・B5セルを範囲指定 → B5セルのフィルハンドルで31日までの
35行目までオートフィルでコピーしておきます。
次にSheet2のD6セルに
=INDEX(Sheet1!$A$5:$B$35,COLUMN(A1),ROW(A1))
という数式を入れ下のD7セルまでとりあえずコピー!
D6セルの表示形式はユーザー定義から d
D7セルの表示形式はユーザー定義から aaa
としておき、D6・D7セルを範囲指定 → D7セルのフィルハンドルで31日の
AH列までオートフィルでコピー!
これでSheet1のA1・C1セルに数値を入力すれば自動で日付・曜日が表示されます。
(もちろん大の月・小の月にも対応しています)
以上の下準備ができたうえで・・・
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub 表示() 'この行から
Dim i As Long, j As Long, k As Long, M As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1") '←「Sheet1」の部分は実際のシート名に!
Set ws2 = Worksheets("Sheet2") '←「Sheet2」も実際のシート名に!
For i = 9 To ws2.Cells(Rows.Count, 1).End(xlUp).Row Step 5
Range(ws2.Cells(i, "D"), ws2.Cells(i, "AH")).ClearContents
Next i
On Error Resume Next
For i = 5 To 35
For j = 3 To ws1.Cells(4, Columns.Count).End(xlToLeft).Column
If ws1.Cells(i, j) <> "" Then
k = WorksheetFunction.Match(ws1.Cells(i, j), ws2.Columns(1), False)
M = WorksheetFunction.Match(ws1.Cells(i, 1), ws2.Rows(6), False)
ws2.Cells(k, M) = ws1.Cells(4, j)
End If
Next j
Next i
End Sub 'この行まで
※ 月が変わるたびにマクロを実行してもよいのは当然ですが、
Sheet1のデータ変更があるたびにマクロを実行しても構いません。
参考になりますかね?m(_ _)m
![「勤務シフト表から、当日の出番を抽出するに」の回答画像3](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/a/667667_5497f2b0aba0c/M.jpg)
No.2
- 回答日時:
これは難しいですね。
例えば、転記先の1日の行。
同じ名前が2度発生してますね。
この条件付けが不明瞭です。
転記先の勤務形態・・でしょうか。
転記元に無い「レジ*」の扱いはどうなっているのか。
転記元、休日出勤・変更・調整欄はどう使うのか。
ぱっと見ただけでこれだけの情報が足りません。
(情報が足りたとしても、それなりに難しい処理だと思いますが)
・・というようなマクロが必要ですが、
> マクロは完全な初心者でほとんどわからない。
状況で、後に人が増えた減ったのメンテナンスはどうされますか?
その辺りも考慮するとなると、ますます凝った仕様が必要です。
そんなこんなで、表の構成から再考するのが先決と思いますよ。
お力になりたいのは山々ですが、それが本音です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 求人情報・採用情報 シフト勤務について 2 2023/08/05 16:53
- アルバイト・パート 大学生新人バイトで7連勤は普通なのでしょうか。 2 2023/04/29 17:40
- 労働相談 ① ・契約社員。業務委託で勤務。 ・時給1180円。毎年1-20円程のベースアップあり。 ・週5の7 1 2022/04/08 21:41
- アルバイト・パート 結果として1週間無断欠勤をしてしまいました。 2 2022/10/09 08:30
- ハローワーク・職業安定所 失業保険の特定理由離職者に当てはまるか知りたいです。 パートで3ヶ月おきに更新しており1年半勤務して 7 2022/08/25 17:12
- その他(恋愛相談) 私は21歳の女で精神疾患があります。 今月からアルバイトを日曜火曜木曜の週三日で始めましたが、2週間 5 2022/10/16 06:32
- 会社・職場 計算できる方がいらしたら教えてください。 私は元々フルタイムの正社員で勤めていて、そのときの月収は約 6 2023/06/23 14:19
- Excel(エクセル) 警備の夜勤の仕事をしています。 誰か助けてください。エクセルのことです。 月の勤務表(表1)と月の人 2 2022/04/13 12:29
- いじめ・人間関係 この度、復職するのですが…。 4 2022/10/24 02:09
- 労働相談 当直勤務の時間外について。 今年の4月から新しく社会人になった者です。 私の職場では当直勤務があり、 4 2022/05/15 17:03
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
複雑なシフト表から1日ごとの出勤者、シフトを抜き出したいです
Excel(エクセル)
-
エクセルで勤務表の出勤者を抜き出したい。 日付 名前 5/16 5/17 5/18 5/19 田中
Excel(エクセル)
-
月のシフト表から当日のシフトを抽出したいです
Excel(エクセル)
-
-
4
月間勤務表から1日~31日までの各日付ごとに出勤している職員を書き出す方法
Excel(エクセル)
-
5
エクセルで、勤務表から 日付別に勤務者と勤務形態を抽出して、別シートに抽出したい
Word(ワード)
-
6
エクセルで、勤務表から 日付別に勤務者と勤務形態を抽出して、別シートに抽出したい
Excel(エクセル)
-
7
関数を使用して、エクセルの勤務表から、勤務形態別に担当者を抽出したい
Excel(エクセル)
-
8
エクセルで出勤表から出勤者の名前を出したいのですが。
Excel(エクセル)
-
9
エクセル シフト勤務表から、シフト別に氏名を抽出。
その他(ソフトウェア)
-
10
再度質問です。シフト表から日毎の勤務者を抽出する方法
Excel(エクセル)
-
11
作業別のシフト表から職員別のシフト表へ反映させたい
Excel(エクセル)
-
12
【EXCEL】シフト表から休みの日だけを抽出する方法をご教授ください。
Excel(エクセル)
-
13
会員名簿から出席者のみ一覧表の作成
その他(Microsoft Office)
-
14
エクセル 該当日付のデータの抽出方法
Excel(エクセル)
-
15
エクセルのセルでシフト表を作っているのですが、それを別のシートに反映させたいのですが、どのようにすれ
Excel(エクセル)
-
16
シフト管理、月間のシフト表を別シートで日ごとの時間別で出勤者の名前を表示したい
Excel(エクセル)
-
17
【Excel】月間シフトから日別シフトを自動作成したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel分数の表示について
-
Excelについての質問です。 B2...
-
EXCELの散布図で日付が1900年に...
-
文字2桁、3桁交じりの文字列...
-
【EXCEL】画像の黄色部分の抽出...
-
マクロエクセルのブロック解除
-
絶対参照
-
Excelで表を作ったところに文字...
-
Excelピボットテーブルの1行目
-
エクセルのクイックアクセスツ...
-
DATE関数で現在の年齢を出した...
-
(マクロ)vlookupの元データを同...
-
PDFの請求明細をエクセルにしたい
-
エクセルのクイックアクセスツ...
-
REGEXREPLACE関数について、
-
職場の人から聞かれており、こ...
-
エクセルの空欄をつめて、次の...
-
ユーザー定義関数をアドイン登...
-
EXCELの質問です 119から足した...
-
エクセルの問題です。絶対値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報