今回、自分ではどうしてもわからなく、ここで相談させてもらいました。
勤務表の書かれたエクセルファイルから、日ごとの勤務者を出したいと考えています。
勤務が新しく出るごとに毎回作り変えていたのでは、時間がかかってしまい大変です。
関数かマクロとかで、うまく抽出できる方法をご教授お願いします。
(状況)
勤務表.xlsと、当日勤務者.xlsのファイルは別ファイル。
勤務表.xlsは毎月更新され、今は当日勤務者.xlsを月に一度作り変えている。
マクロは完全な初心者でほとんどわからない。
勤務者は40人ほどの小さな会社。
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
No.2
- 回答日時:
これは難しいですね。
例えば、転記先の1日の行。
同じ名前が2度発生してますね。
この条件付けが不明瞭です。
転記先の勤務形態・・でしょうか。
転記元に無い「レジ*」の扱いはどうなっているのか。
転記元、休日出勤・変更・調整欄はどう使うのか。
ぱっと見ただけでこれだけの情報が足りません。
(情報が足りたとしても、それなりに難しい処理だと思いますが)
・・というようなマクロが必要ですが、
> マクロは完全な初心者でほとんどわからない。
状況で、後に人が増えた減ったのメンテナンスはどうされますか?
その辺りも考慮するとなると、ますます凝った仕様が必要です。
そんなこんなで、表の構成から再考するのが先決と思いますよ。
お力になりたいのは山々ですが、それが本音です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
複雑なシフト表から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
会員名簿から出席者のみ一覧表の作成
その他(Microsoft Office)
-
12
作業別のシフト表から職員別のシフト表へ反映させたい
Excel(エクセル)
-
13
シフト管理、月間のシフト表を別シートで日ごとの時間別で出勤者の名前を表示したい
Excel(エクセル)
-
14
エクセル 該当日付のデータの抽出方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Win11で画像ファイルが突然開け...
-
PythonとPowerShellはどっちの...
-
「再帰的」の意味がよく分からな...
-
Pythonはオープンソースなので1...
-
PythonはPowerShellの上位互換...
-
PowerShellでファイルの操作を...
-
PowerShellとPythonはどっちの...
-
F5アタックとは
-
Windows標準のフォトには写真は...
-
結構前にパソコン工房で購入し...
-
中華ゲーム機のGame Console R3...
-
ある英語発音の本のあるサイト...
-
iOS18にしてからこのようなマー...
-
英語の音声のサイトからのダウ...
-
WindowsのパソコンとiPhoneをUS...
-
iTunesは廃止されるらしいです...
-
ファイル名の命名のオススメを...
-
ノートパソコンの充電は延長コ...
-
拡張子が.txtのファイルに将来...
-
授業の内容なのですがほんとに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報