Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
タイムカード集計 同じ日付が同じ行に来るようにしたい
投稿日時: 21/12/02 23:14:24
投稿者: 所長

お忙しいところ誠に恐縮ですが、どなたかご回答いただけると幸いです。
給与計算の一環で、タイムカードの自動計算をしたいと思っております。
あるコードを実行すると、営業日と出勤時刻や退勤時刻の日付のズレが生じます。
 
●加工する前のデータ
 

店舗コード	店舗名	従業員コード	従業員名	従業員区分	支給区分	営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1	休憩入2	休憩終2	実労働	休憩	勤務店舗コード	勤務先店舗名	連続勤務
1	A	321	VBA 太郎	社員	時給A	2021/10/1		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30			10:00	1:30	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/2		2021/10/3 10:30	2021/10/3 21:00	2021/10/3 17:42	2021/10/3 18:50			9:22	1:08	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/5		2021/10/6 11:00	2021/10/6 22:00	2021/10/6 15:35	2021/10/6 17:00			9:35	1:25	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/6		2021/10/7 10:30	2021/10/7 21:30	2021/10/7 19:07	2021/10/7 20:25			9:42	1:18	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/7		2021/10/8 10:30	2021/10/8 22:00	2021/10/8 15:18	2021/10/8 17:00			9:48	1:42	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/8		2021/10/9 10:30	2021/10/9 21:30	2021/10/9 17:30	2021/10/9 19:00			9:30	1:30	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/9		2021/10/10 10:30	2021/10/10 21:00	2021/10/10 17:30	2021/10/10 19:00			9:00	1:30	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/10		2021/10/11 10:30	2021/10/11 21:00	2021/10/11 16:25	2021/10/11 17:30			9:25	1:05	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/13		2021/10/14 10:30	2021/10/14 22:00	2021/10/14 16:03	2021/10/14 17:30			10:03	1:27	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/14		2021/10/15 10:30	2021/10/15 21:00	2021/10/15 15:51	2021/10/15 17:20			9:01	1:29	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/15		2021/10/16 10:30	2021/10/16 22:00	2021/10/16 15:16	2021/10/16 16:35			10:11	1:19	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/16		2021/10/17 10:30	2021/10/17 22:00	2021/10/17 16:16	2021/10/17 17:45			10:01	1:29	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/17		2021/10/18 10:30	2021/10/18 22:00	2021/10/18 15:33	2021/10/18 17:00			10:03	1:27	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/18		2021/10/19 10:30	2021/10/19 21:00	2021/10/19 16:28	2021/10/19 17:30			9:28	1:02	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/19		2021/10/20 10:30	2021/10/20 21:00	2021/10/20 16:06	2021/10/20 17:30			9:06	1:24	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/22		2021/10/23 10:30	2021/10/23 22:00	2021/10/23 15:36	2021/10/23 17:00			10:06	1:24	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/23		2021/10/24 10:30	2021/10/24 21:30	2021/10/24 15:15	2021/10/24 16:45			9:30	1:30	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/24		2021/10/25 10:30	2021/10/25 22:00	2021/10/25 14:54	2021/10/25 16:30			9:54	1:36	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/25		2021/10/26 10:30	2021/10/26 21:00	2021/10/26 15:44	2021/10/26 17:05			9:09	1:21	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/26		2021/10/27 10:30	2021/10/27 21:00	2021/10/27 15:32	2021/10/27 17:00			9:02	1:28	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/29		2021/10/30 10:30	2021/10/30 22:00	2021/10/30 15:13	2021/10/30 16:35			10:08	1:22	4	A	
1	A	321	VBA 太郎	社員	時給A	2021/10/30		2021/10/31 10:30	2021/10/31 22:00	2021/10/31 16:05	2021/10/31 17:20			10:15	1:15	4	A	

 
 
●VBAコード
 
Sub macro0()

'
' Macro2 Macro
'
'ブックの全シートを 1 つずつループして処理する
    Dim WS As Worksheet
    For Each WS In Worksheets
        WS.Activate
        
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
        
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "カレンダー"
    Range("A34").Select
    ActiveCell.FormulaR1C1 = "2021"
    Range("B34").Select
    ActiveCell.FormulaR1C1 = "年"
    Range("C34").Select
    ActiveCell.FormulaR1C1 = "10"
    Range("D34").Select
    ActiveCell.FormulaR1C1 = "月"
    
    
    Range("A2").FormulaR1C1 = "=DATE(R34C1,R34C3,1)"
    Range("A3:A29").FormulaR1C1 = "=R[-1]C+1"
    Range("A30:A32").FormulaR1C1 = "=IF(R[-1]C="""","""",IF(MONTH(R[-1]C)=MONTH(R[-1]C+1),R[-1]C+1,""""))"
    
    Range("A30:A32").Select
    Selection.NumberFormatLocal = "yyyy/m/d"
    
    Next WS


End Sub

 
 
●VBAコード実行後のデータ
 
 
カレンダー																		店舗コード	店舗名	従業員コード	従業員名	従業員区分	支給区分	営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1	休憩入2	休憩終2	実労働	休憩	勤務店舗コード	勤務先店舗名	連続勤務
2021/10/1																		1	A	321	VBA 太郎	社員	時給A	2021/10/1		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30			10:00	1:30	4	A	
2021/10/2																		1	A	321	VBA 太郎	社員	時給A	2021/10/2		2021/10/3 10:30	2021/10/3 21:00	2021/10/3 17:42	2021/10/3 18:50			9:22	1:08	4	A	
2021/10/3																		1	A	321	VBA 太郎	社員	時給A	2021/10/5		2021/10/6 11:00	2021/10/6 22:00	2021/10/6 15:35	2021/10/6 17:00			9:35	1:25	4	A	
2021/10/4																		1	A	321	VBA 太郎	社員	時給A	2021/10/6		2021/10/7 10:30	2021/10/7 21:30	2021/10/7 19:07	2021/10/7 20:25			9:42	1:18	4	A	
2021/10/5																		1	A	321	VBA 太郎	社員	時給A	2021/10/7		2021/10/8 10:30	2021/10/8 22:00	2021/10/8 15:18	2021/10/8 17:00			9:48	1:42	4	A	
2021/10/6																		1	A	321	VBA 太郎	社員	時給A	2021/10/8		2021/10/9 10:30	2021/10/9 21:30	2021/10/9 17:30	2021/10/9 19:00			9:30	1:30	4	A	
2021/10/7																		1	A	321	VBA 太郎	社員	時給A	2021/10/9		2021/10/10 10:30	2021/10/10 21:00	2021/10/10 17:30	2021/10/10 19:00			9:00	1:30	4	A	
2021/10/8																		1	A	321	VBA 太郎	社員	時給A	2021/10/10		2021/10/11 10:30	2021/10/11 21:00	2021/10/11 16:25	2021/10/11 17:30			9:25	1:05	4	A	
2021/10/9																		1	A	321	VBA 太郎	社員	時給A	2021/10/13		2021/10/14 10:30	2021/10/14 22:00	2021/10/14 16:03	2021/10/14 17:30			10:03	1:27	4	A	
2021/10/10																		1	A	321	VBA 太郎	社員	時給A	2021/10/14		2021/10/15 10:30	2021/10/15 21:00	2021/10/15 15:51	2021/10/15 17:20			9:01	1:29	4	A	
2021/10/11																		1	A	321	VBA 太郎	社員	時給A	2021/10/15		2021/10/16 10:30	2021/10/16 22:00	2021/10/16 15:16	2021/10/16 16:35			10:11	1:19	4	A	
2021/10/12																		1	A	321	VBA 太郎	社員	時給A	2021/10/16		2021/10/17 10:30	2021/10/17 22:00	2021/10/17 16:16	2021/10/17 17:45			10:01	1:29	4	A	
2021/10/13																		1	A	321	VBA 太郎	社員	時給A	2021/10/17		2021/10/18 10:30	2021/10/18 22:00	2021/10/18 15:33	2021/10/18 17:00			10:03	1:27	4	A	
2021/10/14																		1	A	321	VBA 太郎	社員	時給A	2021/10/18		2021/10/19 10:30	2021/10/19 21:00	2021/10/19 16:28	2021/10/19 17:30			9:28	1:02	4	A	
2021/10/15																		1	A	321	VBA 太郎	社員	時給A	2021/10/19		2021/10/20 10:30	2021/10/20 21:00	2021/10/20 16:06	2021/10/20 17:30			9:06	1:24	4	A	
2021/10/16																		1	A	321	VBA 太郎	社員	時給A	2021/10/22		2021/10/23 10:30	2021/10/23 22:00	2021/10/23 15:36	2021/10/23 17:00			10:06	1:24	4	A	
2021/10/17																		1	A	321	VBA 太郎	社員	時給A	2021/10/23		2021/10/24 10:30	2021/10/24 21:30	2021/10/24 15:15	2021/10/24 16:45			9:30	1:30	4	A	
2021/10/18																		1	A	321	VBA 太郎	社員	時給A	2021/10/24		2021/10/25 10:30	2021/10/25 22:00	2021/10/25 14:54	2021/10/25 16:30			9:54	1:36	4	A	
2021/10/19																		1	A	321	VBA 太郎	社員	時給A	2021/10/25		2021/10/26 10:30	2021/10/26 21:00	2021/10/26 15:44	2021/10/26 17:05			9:09	1:21	4	A	
2021/10/20																		1	A	321	VBA 太郎	社員	時給A	2021/10/26		2021/10/27 10:30	2021/10/27 21:00	2021/10/27 15:32	2021/10/27 17:00			9:02	1:28	4	A	
2021/10/21																		1	A	321	VBA 太郎	社員	時給A	2021/10/29		2021/10/30 10:30	2021/10/30 22:00	2021/10/30 15:13	2021/10/30 16:35			10:08	1:22	4	A	
2021/10/22																		1	A	321	VBA 太郎	社員	時給A	2021/10/30		2021/10/31 10:30	2021/10/31 22:00	2021/10/31 16:05	2021/10/31 17:20			10:15	1:15	4	A	
2021/10/23																																				
2021/10/24																																				
2021/10/25																																				
2021/10/26																																				
2021/10/27																																				
2021/10/28																																				
2021/10/29																																				
2021/10/30																																				
2021/10/31																																				
																																				
2021	年	10	月
    
 
 
Y2は2021/10/1
AA2は2021/10/2 10:30
AB2は2021/10/2 22:00
 
 
1日ズレてしまうので、ズレないようにするにはどうしたらよいか、ご教示お願いいただけますでしょうか。
実行結果は下記が理想です。
 
Y3は2021/10/2
AA3は2021/10/2 10:30
AB3は2021/10/2 22:00
→上記3つが同列に
                                                                                                                                
なにとぞ、ご教示よろしくお願いいたします。

回答
投稿日時: 21/12/03 00:06:33
投稿者: WinArrow
投稿者のウェブサイトに移動

まず、表のレイアウトが全くわかりません。
掲示した表で、1件のデータがどこなのか?
 

引用:

1日ズレてしまうので、ズレないようにするにはどうしたらよいか、ご教示お願いいただけますでしょうか。

元の表が「2021/10/2」から始まっているからです。
セルA2が2021/10/2に得るようにするか
1行空白行を挿入するか
どちらかを検討してみてください。
 
複数のシートを扱っているようですが、
全て、2021/10なんですか?
 
#コードは可読性を考えて記述しましょう。
 
>Range("A2").FormulaR1C1 = "=DATE(R34C1,R34C3,1)

Range("A2").Formula = "=DATE(A34,C34,1)
のように記述したほうがわかりやすいと思いませんか?

回答
投稿日時: 21/12/03 08:43:05
投稿者: simple

既にご指摘のありましたとおりですね。
 
マクロは、

・A:R列に列挿入し、(Columns("A:R").Insert Shift:=xlToRight でいいですよ)
・A列に、指定した月の、1日から月末までを(土日も含め)、書き込む
という作業をしているだけで、元のデータには一切触っていませんよね。
 
引用:
あるコードを実行すると、営業日と出勤時刻や退勤時刻の日付のズレが生じます。
という認識が間違いで、もともとからそうなっているのです。
コードのせいではありません。
 
まずは、ずれている原因をそちらで調査してください。
いや、それ自体は記入されたデータとしては正しいが、内容を修正したいということであれば、
どういう表にしたいのかを再度提示してください。
 
# 提示されたデータは確かに見た目はわかりにくいですが、
# これをそのままExcelにコピーペイストすると判明するのではないかと思います。

投稿日時: 21/12/03 09:43:42
投稿者: 所長

WinArrow さんの引用:
まず、表のレイアウトが全くわかりません。
掲示した表で、1件のデータがどこなのか?
 
引用:

1日ズレてしまうので、ズレないようにするにはどうしたらよいか、ご教示お願いいただけますでしょうか。

元の表が「2021/10/2」から始まっているからです。
セルA2が2021/10/2に得るようにするか
1行空白行を挿入するか
どちらかを検討してみてください。
 
複数のシートを扱っているようですが、
全て、2021/10なんですか?
 
#コードは可読性を考えて記述しましょう。
 
>Range("A2").FormulaR1C1 = "=DATE(R34C1,R34C3,1)

Range("A2").Formula = "=DATE(A34,C34,1)
のように記述したほうがわかりやすいと思いませんか?

 
ご回答誠にありがとうございます。
はい、複数従業員がいて、2020/10シートとなります。
1行空白行をいれて、常に同列になるようにしたいと思っております。
(A列を軸として同列にしたい)
可読性のご指摘誠にありがとうございます。
修正します。

回答
投稿日時: 21/12/03 10:04:18
投稿者: Suzu

引用:
●加工する前のデータ
  
店舗コード	店舗名	従業員コード	従業員名	従業員区分	支給区分	営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1	休憩入2	休憩終2	実労働	休憩	勤務店舗コード	勤務先店舗名	連続勤務
1	A	321	VBA 太郎	社員	時給A	2021/10/1		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30			10:00	1:30	4	A

 
の段階の
営業日    2021/10/1
出勤時刻    2021/10/2 10:30
退勤時刻    2021/10/2 22:00
休憩入1    2021/10/2 16:00
休憩終1    2021/10/2 17:30
 
この段階でずれていて、
提示されたコードが影響してずれているのでは無いと言うことです。
 
 
日付の連続値の挿入で、数式でなく、値を埋め込んで良いなら、DateSeriesメソッドを使えば良いです。
Range("A2") = DateSerial(.Range("A34"), Range("C34"), 1)
Range("A2:A32").DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:=xlDay, Step:=1, Stop:=DateAdd("m", 1, Range("A2")) - 1
Range("A2:A32").NumberFormatLocal = "yyyy/m/d"

投稿日時: 21/12/03 10:51:08
投稿者: 所長

simple さんの引用:
既にご指摘のありましたとおりですね。
 
マクロは、
・A:R列に列挿入し、(Columns("A:R").Insert Shift:=xlToRight でいいですよ)
・A列に、指定した月の、1日から月末までを(土日も含め)、書き込む
という作業をしているだけで、元のデータには一切触っていませんよね。
 
引用:
あるコードを実行すると、営業日と出勤時刻や退勤時刻の日付のズレが生じます。
という認識が間違いで、もともとからそうなっているのです。
コードのせいではありません。
 
まずは、ずれている原因をそちらで調査してください。
いや、それ自体は記入されたデータとしては正しいが、内容を修正したいということであれば、
どういう表にしたいのかを再度提示してください。
 
# 提示されたデータは確かに見た目はわかりにくいですが、
# これをそのままExcelにコピーペイストすると判明するのではないかと思います。

 
 
コードのご指摘誠にありがとうございます。
前任者のコードを引き継いでいて、力量不足を痛感します。
修正いたします。
 
元のデータは顧客からもらうデータで、そのデータを修正出来ればと思っております。
 
下記のような表にしたいと考えております。
 
カレンダー																		店舗コード	店舗名	従業員コード	従業員名	従業員区分	支給区分	営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1	休憩入2	休憩終2	実労働	休憩	勤務店舗コード	勤務先店舗名	連続勤務
2021/10/1																		1	A	321	VBA  太郎	社員	時給A	2021/10/1												
2021/10/2																		1	A	321	VBA  太郎	社員	時給A	2021/10/2		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30			10:00	1:30	4		
2021/10/3																		1	A	321	VBA  太郎	社員	時給A	2021/10/5		2021/10/3 10:30	2021/10/3 21:00	2021/10/3 17:42	2021/10/3 18:50			9:22	1:08	4		
2021/10/4																		1	A	321	VBA  太郎	社員	時給A	2021/10/6		2021/10/6 11:00	2021/10/6 22:00	2021/10/6 15:35	2021/10/6 17:00			9:35	1:25	4		
2021/10/5																		1	A	321	VBA  太郎	社員	時給A	2021/10/7		2021/10/7 10:30	2021/10/7 21:30	2021/10/7 19:07	2021/10/7 20:25			9:42	1:18	4		
2021/10/6																		1	A	321	VBA  太郎	社員	時給A	2021/10/8		2021/10/8 10:30	2021/10/8 22:00	2021/10/8 15:18	2021/10/8 17:00			9:48	1:42	4		
2021/10/7																		1	A	321	VBA  太郎	社員	時給A	2021/10/9		2021/10/9 10:30	2021/10/9 21:30	2021/10/9 17:30	2021/10/9 19:00			9:30	1:30	4		
2021/10/8																		1	A	321	VBA  太郎	社員	時給A	2021/10/10		2021/10/10 10:30	2021/10/10 21:00	2021/10/10 17:30	2021/10/10 19:00			9:00	1:30	4		
2021/10/9																		1	A	321	VBA  太郎	社員	時給A	2021/10/13		2021/10/11 10:30	2021/10/11 21:00	2021/10/11 16:25	2021/10/11 17:30			9:25	1:05	4		
2021/10/10																		1	A	321	VBA  太郎	社員	時給A	2021/10/14		2021/10/14 10:30	2021/10/14 22:00	2021/10/14 16:03	2021/10/14 17:30			10:03	1:27	4		
2021/10/11																		1	A	321	VBA  太郎	社員	時給A	2021/10/15		2021/10/15 10:30	2021/10/15 21:00	2021/10/15 15:51	2021/10/15 17:20			9:01	1:29	4		
2021/10/12																		1	A	321	VBA  太郎	社員	時給A	2021/10/16		2021/10/16 10:30	2021/10/16 22:00	2021/10/16 15:16	2021/10/16 16:35			10:11	1:19	4		
2021/10/13																		1	A	321	VBA  太郎	社員	時給A	2021/10/17		2021/10/17 10:30	2021/10/17 22:00	2021/10/17 16:16	2021/10/17 17:45			10:01	1:29	4		
2021/10/14																		1	A	321	VBA  太郎	社員	時給A	2021/10/18		2021/10/18 10:30	2021/10/18 22:00	2021/10/18 15:33	2021/10/18 17:00			10:03	1:27	4		
2021/10/15																		1	A	321	VBA  太郎	社員	時給A	2021/10/19		2021/10/19 10:30	2021/10/19 21:00	2021/10/19 16:28	2021/10/19 17:30			9:28	1:02	4		
2021/10/16																		1	A	321	VBA  太郎	社員	時給A	2021/10/22		2021/10/20 10:30	2021/10/20 21:00	2021/10/20 16:06	2021/10/20 17:30			9:06	1:24	4		
2021/10/17																		1	A	321	VBA  太郎	社員	時給A	2021/10/23		2021/10/23 10:30	2021/10/23 22:00	2021/10/23 15:36	2021/10/23 17:00			10:06	1:24	4		
2021/10/18																		1	A	321	VBA  太郎	社員	時給A	2021/10/24		2021/10/24 10:30	2021/10/24 21:30	2021/10/24 15:15	2021/10/24 16:45			9:30	1:30	4		
2021/10/19																		1	A	321	VBA  太郎	社員	時給A	2021/10/25		2021/10/25 10:30	2021/10/25 22:00	2021/10/25 14:54	2021/10/25 16:30			9:54	1:36	4		
2021/10/20																		1	A	321	VBA  太郎	社員	時給A	2021/10/26		2021/10/26 10:30	2021/10/26 21:00	2021/10/26 15:44	2021/10/26 17:05			9:09	1:21	4		
2021/10/21																		1	A	321	VBA  太郎	社員	時給A	2021/10/29		2021/10/27 10:30	2021/10/27 21:00	2021/10/27 15:32	2021/10/27 17:00			9:02	1:28	4		
2021/10/22																		1	A	321	VBA  太郎	社員	時給A	2021/10/30		2021/10/30 10:30	2021/10/30 22:00	2021/10/30 15:13	2021/10/30 16:35			10:08	1:22	4		
2021/10/23																										2021/10/31 10:30	2021/10/31 22:00	2021/10/31 16:05	2021/10/31 17:20			10:15	1:15	4		
2021/10/24																																				
2021/10/25																																				
2021/10/26																																				
2021/10/27																																				
2021/10/28																																				
2021/10/29																																				
2021/10/30																																				
2021/10/31																																				
																																				
2021	年	10	月																																	


 
お忙しい中誠に恐縮です。
なにとぞ宜しくお願い致します。

回答
投稿日時: 21/12/03 11:01:56
投稿者: WinArrow
投稿者のウェブサイトに移動

Y2(営業日)とAA2(出勤時刻)のずれは、
Suzuさんのご指摘通りです。
掲示のプログラムとは関係ありません。
 
観点を変えて
 
A列に「日付」を入れることに関して
 
A列に「日付」を連続で代入していますが、
元表をみると、営業日や出勤日が、ところどころ抜けていますね・・・・
 
 
A列の「日付」は、どのような目的なのかをキチンと整理するよう
お薄めします。

投稿日時: 21/12/03 11:07:15
投稿者: 所長

Suzu さんの引用:
引用:
●加工する前のデータ
  
店舗コード	店舗名	従業員コード	従業員名	従業員区分	支給区分	営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1	休憩入2	休憩終2	実労働	休憩	勤務店舗コード	勤務先店舗名	連続勤務
1	A	321	VBA 太郎	社員	時給A	2021/10/1		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30			10:00	1:30	4	A

 
の段階の
営業日    2021/10/1
出勤時刻    2021/10/2 10:30
退勤時刻    2021/10/2 22:00
休憩入1    2021/10/2 16:00
休憩終1    2021/10/2 17:30
 
この段階でずれていて、
提示されたコードが影響してずれているのでは無いと言うことです。
 
 
日付の連続値の挿入で、数式でなく、値を埋め込んで良いなら、DateSeriesメソッドを使えば良いです。
Range("A2") = DateSerial(.Range("A34"), Range("C34"), 1)
Range("A2:A32").DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:=xlDay, Step:=1, Stop:=DateAdd("m", 1, Range("A2")) - 1
Range("A2:A32").NumberFormatLocal = "yyyy/m/d"

 
 
ご回答誠にありがとうございます。
コードを修正いたしましたが、下記で大丈夫でしょうか。
 
Sub macro0()

'
' Macro2 Macro
'
'ブックの全シートを 1 つずつループして処理する
    Dim WS As Worksheet
    For Each WS In Worksheets
        WS.Activate

  
   Columns("A:R").Insert Shift:=xlToRight

    Range("A1").Select
    ActiveCell.FormulaR1C1 = "カレンダー"
    Range("A34").Select
    ActiveCell.FormulaR1C1 = "2021"
    Range("B34").Select
    ActiveCell.FormulaR1C1 = "年"
    Range("C34").Select
    ActiveCell.FormulaR1C1 = "10"
    Range("D34").Select
    ActiveCell.FormulaR1C1 = "月"
    
   
    Range("A2") = DateSerial(.Range("A34"), Range("C34"), 1)
    Range("A2:A32").DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:=xlDay, Step:=1, Stop:=DateAdd("m", 1, Range("A2")) - 1
    Range("A2:A32").NumberFormatLocal = "yyyy/m/d"
    Next WS


End Sub

 

投稿日時: 21/12/03 11:10:32
投稿者: 所長

WinArrow さんの引用:
Y2(営業日)とAA2(出勤時刻)のずれは、
Suzuさんのご指摘通りです。
掲示のプログラムとは関係ありません。
 
観点を変えて
 
A列に「日付」を入れることに関して
 
A列に「日付」を連続で代入していますが、
元表をみると、営業日や出勤日が、ところどころ抜けていますね・・・・
 
 
A列の「日付」は、どのような目的なのかをキチンと整理するよう
お薄めします。

 
 
ご回答誠にありがとうございます。
A列は日曜日起算で1週間ごとに労働時間を計算する為となっております。
他のシート(ほかの従業員)も同様に日曜日起算にして、週の合計の労働時間を出すのが目的となります。
サービス業の為、お休みがマチマチでこのような仕様にしておりました。。

回答
投稿日時: 21/12/03 12:08:23
投稿者: simple

話が通じていないように思います。
所期する結果はどのようなものですか?
最初の10行くらいを示してください。

回答
投稿日時: 21/12/03 12:34:25
投稿者: WinArrow
投稿者のウェブサイトに移動

細かいことになりますが、シートやセルは「Select」しなくても処理可能です。
 

引用:

    Range("A1").Select
    ActiveCell.FormulaR1C1 = "カレンダー"
    Range("A34").Select
    ActiveCell.FormulaR1C1 = "2021"
    Range("B34").Select
    ActiveCell.FormulaR1C1 = "年"
    Range("C34").Select
    ActiveCell.FormulaR1C1 = "10"
    Range("D34").Select
    ActiveCell.FormulaR1C1 = "月"


    Range("A1").Value = "カレンダー"
    Range("A34").Value =  "2021"
    Range("B34").Value =  "年"
    Range("C34").Vlue =  "10"
    Range("D34").Value =  "月"

または
    Range("A34:D34").Value = Array("2021", "年", "10", "月")


セルに「値」を代入するときは、.Value プロパティを使いましょう。
セルに「数式」を代入するときは、Formula プロパティを使いましょう。
セルを「A1」形式で記述しているときは、代入する数式に記述セルも「A1」形式にしましょう
(可読性向上)
週で集計するとなると集計するためのキーと集計値用の「行」を準備する必要がありますね・・・
日付の羅列では対応できますか?
参考までに、週番号はWEEKNUM関数で取得可能です。
 
 
 

投稿日時: 21/12/03 13:38:44
投稿者: 所長

simple さんの引用:
話が通じていないように思います。
所期する結果はどのようなものですか?
最初の10行くらいを示してください。

 
 
分かりづらくて申し訳ございません。
下記に記載しました。
                                                                        
店舗コード	店舗名	従業員コード	従業員名	従業員区分	支給区分	営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1	休憩入2	休憩終2	実労働	休憩	勤務店舗コード	勤務先店舗名	連続勤務
2021/10/1																		1	A	321	VBA  太郎	社員	時給A	2021/10/1												
2021/10/2																		1	A	321	VBA  太郎	社員	時給A	2021/10/2		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30			10:00	1:30	4		
2021/10/3																		1	A	321	VBA  太郎	社員	時給A	2021/10/5		2021/10/3 10:30	2021/10/3 21:00	2021/10/3 17:42	2021/10/3 18:50			9:22	1:08	4		
2021/10/4																		1	A	321	VBA  太郎	社員	時給A	2021/10/6		2021/10/6 11:00	2021/10/6 22:00	2021/10/6 15:35	2021/10/6 17:00			9:35	1:25	4		
2021/10/5																		1	A	321	VBA  太郎	社員	時給A	2021/10/7		2021/10/7 10:30	2021/10/7 21:30	2021/10/7 19:07	2021/10/7 20:25			9:42	1:18	4		
2021/10/6																		1	A	321	VBA  太郎	社員	時給A	2021/10/8		2021/10/8 10:30	2021/10/8 22:00	2021/10/8 15:18	2021/10/8 17:00			9:48	1:42	4		
2021/10/7																		1	A	321	VBA  太郎	社員	時給A	2021/10/9		2021/10/9 10:30	2021/10/9 21:30	2021/10/9 17:30	2021/10/9 19:00			9:30	1:30	4		
2021/10/8																		1	A	321	VBA  太郎	社員	時給A	2021/10/10		2021/10/10 10:30	2021/10/10 21:00	2021/10/10 17:30	2021/10/10 19:00			9:00	1:30	4		
2021/10/9																		1	A	321	VBA  太郎	社員	時給A	2021/10/13		2021/10/11 10:30	2021/10/11 21:00	2021/10/11 16:25	2021/10/11 17:30			9:25	1:05	4		

 
部分抜粋
 
営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1
2021/10/1					
2021/10/2		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30
2021/10/5		2021/10/3 10:30	2021/10/3 21:00	2021/10/3 17:42	2021/10/3 18:50
2021/10/6		2021/10/6 11:00	2021/10/6 22:00	2021/10/6 15:35	2021/10/6 17:00

 
営業日は1日からですが、出勤時刻と退勤時刻は2日が先頭なので、営業日に行を合わせたいと思っております。
なにとぞ、宜しくお願い申し上げます。

投稿日時: 21/12/03 13:51:14
投稿者: 所長

WinArrow さんの引用:
細かいことになりますが、シートやセルは「Select」しなくても処理可能です。
 

引用:

    Range("A1").Select
    ActiveCell.FormulaR1C1 = "カレンダー"
    Range("A34").Select
    ActiveCell.FormulaR1C1 = "2021"
    Range("B34").Select
    ActiveCell.FormulaR1C1 = "年"
    Range("C34").Select
    ActiveCell.FormulaR1C1 = "10"
    Range("D34").Select
    ActiveCell.FormulaR1C1 = "月"


    Range("A1").Value = "カレンダー"
    Range("A34").Value =  "2021"
    Range("B34").Value =  "年"
    Range("C34").Vlue =  "10"
    Range("D34").Value =  "月"

または
    Range("A34:D34").Value = Array("2021", "年", "10", "月")


セルに「値」を代入するときは、.Value プロパティを使いましょう。
セルに「数式」を代入するときは、Formula プロパティを使いましょう。
セルを「A1」形式で記述しているときは、代入する数式に記述セルも「A1」形式にしましょう
(可読性向上)
週で集計するとなると集計するためのキーと集計値用の「行」を準備する必要がありますね・・・
日付の羅列では対応できますか?
参考までに、週番号はWEEKNUM関数で取得可能です。
 
 
 

 
ご指摘誠にありがとうございます。
コードがとても綺麗になり、分かりやすくなりました。
基本が大切なのですね。。
 
週の集計はWEEKNUM関数で週番号を割り出し、当てはめていくイメージでしょうか?
ご教示いただけますと幸いです。
 

回答
投稿日時: 21/12/03 14:31:20
投稿者: simple

当初のデータは、
・「営業日」が間違い。(一日前になってしまっていて、1を加えると正しい)
・出勤時刻や退勤時刻の日付は正しい、
ということですか?
 
今回新たに追加したA列の日付は、土日も含むもの。
それに沿って、前のデータを対応させたいとかいったことではないんですか?
今度追加したB列からR列はブランクのままなんですか?
 
そういう話をお聞きしたかったのですが、私はここまでとさせてもらいます。

回答
投稿日時: 21/12/03 15:19:16
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

週の集計はWEEKNUM関数で週番号を割り出し、当てはめていくイメージでしょうか?

その通りです。

=WEEKNUM(A2)
 
取り敢えずここまでとします。

投稿日時: 21/12/03 15:39:26
投稿者: 所長

simple さんの引用:
当初のデータは、
・「営業日」が間違い。(一日前になってしまっていて、1を加えると正しい)
・出勤時刻や退勤時刻の日付は正しい、
ということですか?
 
今回新たに追加したA列の日付は、土日も含むもの。
それに沿って、前のデータを対応させたいとかいったことではないんですか?
今度追加したB列からR列はブランクのままなんですか?
 
そういう話をお聞きしたかったのですが、私はここまでとさせてもらいます。

 
 
今回新たに追加したA列の日付は、土日も含むもの。
それに沿って、前のデータを対応させたいとかいったことではないんですか?
→その通りでございます。
 
今度追加したB列からR列はブランクのままなんですか?
→ブランクに新たな計算式が入ります。
 
色々分かりづらくて申し訳ございませんでした。
コードのご教示ありがとうございました。

投稿日時: 21/12/03 15:40:36
投稿者: 所長

WinArrow さんの引用:
引用:

週の集計はWEEKNUM関数で週番号を割り出し、当てはめていくイメージでしょうか?

その通りです。

=WEEKNUM(A2)
 
取り敢えずここまでとします。

 
お忙しい中、色々ご教示頂き誠にありがとうございました。
試してみます。

回答
投稿日時: 21/12/03 16:29:19
投稿者: Suzu

当方の提示したコードは、ご質問にある
 

引用:
Y2は2021/10/1
AA2は2021/10/2 10:30
AB2は2021/10/2 22:00
  
  
1日ズレてしまうので、ズレないようにするにはどうしたらよいか、ご教示お願いいただけますでしょうか。
実行結果は下記が理想です。
  
Y3は2021/10/2
AA3は2021/10/2 10:30
AB3は2021/10/2 22:00

 
には影響を与えていません。
 
コードの提案をしましたが、
引用:
コードを修正いたしましたが、下記で大丈夫でしょうか。

大丈夫かどうかをテストし、その結果を元に判断するのは 質問者の方の責任で行って下さい。
 
 
皆さんが 提示している コード云々は、提示頂いたコードを元に よりよい方法を提示しているだけです。
 
 
今、話が 2つに発散してしまっていて、質問者の方も混乱されているのだと思うのですが
コード云々はとりあえず、後回しにしませんか?
 
 
質問文の
引用:
1日ズレてしまうので、ズレないようにするにはどうしたらよいか、ご教示お願いいただけますでしょうか。

と、
10:15:08 の表から察するに
 
店舗コード	店舗名	従業員コード	従業員名	従業員区分	支給区分	営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1
1	A	321	VBA 太郎	社員	時給A	2021/10/1		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30
1	A	321	VBA 太郎	社員	時給A	2021/10/2		2021/10/3 10:30	2021/10/3 21:00	2021/10/3 17:42	2021/10/3 18:50
1	A	321	VBA 太郎	社員	時給A	2021/10/5		2021/10/6 11:00	2021/10/6 22:00	2021/10/6 15:35	2021/10/6 17:00
1	A	321	VBA 太郎	社員	時給A	2021/10/6		2021/10/7 10:30	2021/10/7 21:30	2021/10/7 19:07	2021/10/7 20:25

 

引用:
店舗コード    店舗名    従業員コード    従業員名    従業員区分    支給区分    営業日    休日    出勤時刻    退勤時刻    休憩入1    休憩終1
1    A    321    VBA 太郎    社員    時給A    2021/10/1                    
1    A    321    VBA 太郎    社員    時給A    2021/10/2        2021/10/2 10:30    2021/10/2 22:00    2021/10/2 16:00    2021/10/2 17:30
1    A    321    VBA 太郎    社員    時給A    2021/10/3        2021/10/3 10:30    2021/10/3 21:00    2021/10/3 17:42    2021/10/3 18:50
1    A    321    VBA 太郎    社員    時給A    2021/10/4                    
1    A    321    VBA 太郎    社員    時給A    2021/10/5                    
1    A    321    VBA 太郎    社員    時給A    2021/10/6        2021/10/6 11:00    2021/10/6 22:00    2021/10/6 15:35    2021/10/6 17:00
1    A    321    VBA 太郎    社員    時給A    2021/10/7        2021/10/7 10:30    2021/10/7 21:30    2021/10/7 19:07    2021/10/7 20:25

 
としたいと言うことでしょうか?
 
変更点は
・出勤日 を、出勤時刻の 日付に合わせる
・出勤時刻等の データのない 休日分 のデータを追加する
と推測しました。
 
希望と違うのであれば、その内容を説明ください。

回答
投稿日時: 21/12/03 17:23:14
投稿者: WinArrow
投稿者のウェブサイトに移動

話があちこち飛んで申し訳ありません。
  
本題の

引用:

部分抜粋
   
営業日 休日 出勤時刻 退勤時刻 休憩入1 休憩終1
2021/10/1
2021/10/2 2021/10/2 10:30 2021/10/2 22:00 2021/10/2 16:00 2021/10/2 17:30
2021/10/5 2021/10/3 10:30 2021/10/3 21:00 2021/10/3 17:42 2021/10/3 18:50
2021/10/6 2021/10/6 11:00 2021/10/6 22:00 2021/10/6 15:35 2021/10/6 17:00
  
   
営業日は1日からですが、出勤時刻と退勤時刻は2日が先頭なので、営業日に行を合わせたいと思っております。
なにとぞ、宜しくお願い申し上げます。

 
この作業は手作業で行うのですか?
営業日の列は、右へシフトしする前は、G列ですからセルG2に
=ROUNDDOWN(I2,0)
のような関数で対応できます。
2021/10/1 の行は手作業で対応できますよね・・
  
それとも、現在のコードに組み込むのですか?
但し、コードはあなたが作成するものですよ!!

回答
投稿日時: 21/12/03 20:59:22
投稿者: WinArrow
投稿者のウェブサイトに移動

>元のデータは顧客からもらうデータで、そのデータを修正出来ればと思っております。
 
↑の説明を見つけました。
元データを作成している側で変更して貰うことができれば、
受取側で都度修正する必要がないわけなんですけど、
相手があることなので依頼してすんなり受け入れてくれるかは疑問です。
なぜ、すれているのか?くらいは聞いてもよいと思いますが・・・・
 
修正をマクロで実行するならば、
前レスの関数を代入するコードを組み込めばよいと考えます。
 
今回のコードは、追加の機能ですよね?
こちらは質問の趣旨とは別のことなので、
仕様を整理するところから、取り掛かりましょう。
(列Aに日付を埋め込むのが目的ではないですよね?)

投稿日時: 21/12/04 12:14:57
投稿者: 所長

Suzu さんの引用:
当方の提示したコードは、ご質問にある
 
引用:
Y2は2021/10/1
AA2は2021/10/2 10:30
AB2は2021/10/2 22:00
  
  
1日ズレてしまうので、ズレないようにするにはどうしたらよいか、ご教示お願いいただけますでしょうか。
実行結果は下記が理想です。
  
Y3は2021/10/2
AA3は2021/10/2 10:30
AB3は2021/10/2 22:00

 
には影響を与えていません。
 
コードの提案をしましたが、
引用:
コードを修正いたしましたが、下記で大丈夫でしょうか。

大丈夫かどうかをテストし、その結果を元に判断するのは 質問者の方の責任で行って下さい。
 
 
皆さんが 提示している コード云々は、提示頂いたコードを元に よりよい方法を提示しているだけです。
 
 
今、話が 2つに発散してしまっていて、質問者の方も混乱されているのだと思うのですが
コード云々はとりあえず、後回しにしませんか?
 
 
質問文の
引用:
1日ズレてしまうので、ズレないようにするにはどうしたらよいか、ご教示お願いいただけますでしょうか。

と、
10:15:08 の表から察するに
 
店舗コード	店舗名	従業員コード	従業員名	従業員区分	支給区分	営業日	休日	出勤時刻	退勤時刻	休憩入1	休憩終1
1	A	321	VBA 太郎	社員	時給A	2021/10/1		2021/10/2 10:30	2021/10/2 22:00	2021/10/2 16:00	2021/10/2 17:30
1	A	321	VBA 太郎	社員	時給A	2021/10/2		2021/10/3 10:30	2021/10/3 21:00	2021/10/3 17:42	2021/10/3 18:50
1	A	321	VBA 太郎	社員	時給A	2021/10/5		2021/10/6 11:00	2021/10/6 22:00	2021/10/6 15:35	2021/10/6 17:00
1	A	321	VBA 太郎	社員	時給A	2021/10/6		2021/10/7 10:30	2021/10/7 21:30	2021/10/7 19:07	2021/10/7 20:25

 

引用:
店舗コード    店舗名    従業員コード    従業員名    従業員区分    支給区分    営業日    休日    出勤時刻    退勤時刻    休憩入1    休憩終1
1    A    321    VBA 太郎    社員    時給A    2021/10/1                    
1    A    321    VBA 太郎    社員    時給A    2021/10/2        2021/10/2 10:30    2021/10/2 22:00    2021/10/2 16:00    2021/10/2 17:30
1    A    321    VBA 太郎    社員    時給A    2021/10/3        2021/10/3 10:30    2021/10/3 21:00    2021/10/3 17:42    2021/10/3 18:50
1    A    321    VBA 太郎    社員    時給A    2021/10/4                    
1    A    321    VBA 太郎    社員    時給A    2021/10/5                    
1    A    321    VBA 太郎    社員    時給A    2021/10/6        2021/10/6 11:00    2021/10/6 22:00    2021/10/6 15:35    2021/10/6 17:00
1    A    321    VBA 太郎    社員    時給A    2021/10/7        2021/10/7 10:30    2021/10/7 21:30    2021/10/7 19:07    2021/10/7 20:25

 
としたいと言うことでしょうか?
 
変更点は
・出勤日 を、出勤時刻の 日付に合わせる
・出勤時刻等の データのない 休日分 のデータを追加する
と推測しました。
 
希望と違うのであれば、その内容を説明ください。

 
 
返信遅れて申し訳ございません。
ご回答ありがとうございます。
Suzuさんの言われる通りでございます。
同じ日付を同じ行に出来ればと思っております。

投稿日時: 21/12/04 12:34:59
投稿者: 所長

WinArrow さんの引用:
>元のデータは顧客からもらうデータで、そのデータを修正出来ればと思っております。
 
↑の説明を見つけました。
元データを作成している側で変更して貰うことができれば、
受取側で都度修正する必要がないわけなんですけど、
相手があることなので依頼してすんなり受け入れてくれるかは疑問です。
なぜ、すれているのか?くらいは聞いてもよいと思いますが・・・・
 
修正をマクロで実行するならば、
前レスの関数を代入するコードを組み込めばよいと考えます。
 
今回のコードは、追加の機能ですよね?
こちらは質問の趣旨とは別のことなので、
仕様を整理するところから、取り掛かりましょう。
(列Aに日付を埋め込むのが目的ではないですよね?)

 
 
ご回答誠にありがとうございます。
返信遅れて失礼いたしました。
 
ROUNDDOWN関数のご教示ありがとうございました。
不勉強で申し訳ありませんが、切り捨ての関数のような気がしておりまして、
どのように使うのかイメージ出来ないでおります。
日付を丸めるということでしょうか。
 
そうですね、顧問先からもらうデータなのですが、
データを修正して送ってもらうのが厳しい状況にあります。
(担当者もそこまで詳しい方がおらず・・・です)
 
はい、顧問先からもらったデータを元に給与計算をしております。
日曜日起算で1週間40時間を超過していた分を残業時間として
計上する・・・というのが目的となります。
 

回答
投稿日時: 21/12/04 13:37:49
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

日付を丸めるということでしょうか。

「まるめる」には、「四捨五入」「切上げ」「切り捨て」「銀行方式四捨五入」があります。
今回は、「切捨て」になります。
なぜ、ROUNDDOWNを使用するのか?
 
日付(時刻を含め)データの実体は、数値データです。(但し、負は存在しない)
整数部分を日付、小数点以下を時刻で構成されています。

2021/10/1 12:00:00
は、44470.50000 となります。
44470は、1900/1/1を「1」として2021/10/1までの日数(シリアル値)になります。
12時は、24時の半分(1日の真ん中)ですから、0.5(12/24)になります。
10分だったら、10*60/(24*60*60)で求められます。
従って、yyy/mm/dd hh:mm:ss すなわち、少数点未満を除けば、日付だけになります。
 
週の集計について
月の最初の週、月の最後の週は、必ずしも7日(1週間の7日とした場合)に満たないことがあります。
当該週は、どのように考えるのでしょうか?

投稿日時: 21/12/04 13:58:46
投稿者: 所長

WinArrow さんの引用:
引用:

日付を丸めるということでしょうか。

「まるめる」には、「四捨五入」「切上げ」「切り捨て」「銀行方式四捨五入」があります。
今回は、「切捨て」になります。
なぜ、ROUNDDOWNを使用するのか?
 
日付(時刻を含め)データの実体は、数値データです。(但し、負は存在しない)
整数部分を日付、小数点以下を時刻で構成されています。

2021/10/1 12:00:00
は、44470.50000 となります。
44470は、1900/1/1を「1」として2021/10/1までの日数(シリアル値)になります。
12時は、24時の半分(1日の真ん中)ですから、0.5(12/24)になります。
10分だったら、10*60/(24*60*60)で求められます。
従って、yyy/mm/dd hh:mm:ss すなわち、少数点未満を除けば、日付だけになります。
 
週の集計について
月の最初の週、月の最後の週は、必ずしも7日(1週間の7日とした場合)に満たないことがあります。
当該週は、どのように考えるのでしょうか?

 
ご教示誠にありがとうございます。
なるほどですね、ほかのシートもあるのですがズレるシートとズレ無いシートがあって、
時刻が影響しているということですね。
 
はい、最初の週は前の月から半端分を持ってきて手作業でコピペします。
(1週間で40時間超の時間を計上するため)
 
最後の週は日ごとに8時間を超えた分を計上します。
(最後の週は半端分を加えないです。)

投稿日時: 21/12/04 16:33:37
投稿者: 所長

WinArrow さんの引用:
引用:
ほかのシートもあるのですがズレるシートとズレ無いシートがあって、
時刻が影響しているということですね。

時刻がどの様に影響しているかは、私にはあありません。
 
実際のデータ作成仕様を確認したほうがよいのでは?

 
ご返信誠にありがとうございます。
そうですね、顧問先に伝えて、仕様の確認、変更が出来るか聞いてみようと思います。
ズレが無いように変更できれば、解決します。
ご教示ありがとうございます。

回答
投稿日時: 21/12/04 16:34:05
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
ほかのシートもあるのですがズレるシートとズレ無いシートがあって、
時刻が影響しているということですね。

時刻がどの様に影響しているかは、私にはわかりません。
  
実際のデータ作成仕様を確認したほうがよいのでは?

回答
投稿日時: 21/12/04 23:13:23
投稿者: WinArrow
投稿者のウェブサイトに移動

いろいろ、気になるところがあります。

引用:
はい、最初の週は前の月から半端分を持ってきて手作業でコピペします。
(1週間で40時間超の時間を計上するため)
  
最後の週は日ごとに8時間を超えた分を計上します。
(最後の週は半端分を加えないです。)

 
最後の週は、日単位で残業時間を計算するということですが、
今月の最終週は、翌月の最初の週になる可能性があります。
ダブルで計算することになりませんか?
 

投稿日時: 21/12/05 01:11:55
投稿者: 所長

WinArrow さんの引用:
いろいろ、気になるところがあります。
引用:
はい、最初の週は前の月から半端分を持ってきて手作業でコピペします。
(1週間で40時間超の時間を計上するため)
  
最後の週は日ごとに8時間を超えた分を計上します。
(最後の週は半端分を加えないです。)

 
最後の週は、日単位で残業時間を計算するということですが、
今月の最終週は、翌月の最初の週になる可能性があります。
ダブルで計算することになりませんか?
 

 
 
ご返信誠にありがとうございます。
そうですね、最終週は1日8時間超は当月に計上して、1週間の超過分(40時間超)は翌月第1週で計上します。
イメージ的には下記です。
・当月
11月28日(日)休み
11月29日(月)10時間 2時間超過
11月30日(火)10時間 2時間超過
→当月中に4時間計上で1.25倍計算
 
・翌月
11月28日(日)休み
11月29日(月)8時間 
11月30日(火)8時間 
12月1日 (水)8時間
12月2日 (木)8時間
12月3日 (金)8時間
12月4日 (土)8時間
 
8時間×6日=48時間
40時間超過は8時間
8時間×1.25倍というような計算となります。
 

回答
投稿日時: 21/12/05 14:28:23
投稿者: WinArrow
投稿者のウェブサイトに移動

いろんな勤務形態があり、一律にこうすべきということはできませんが
 
「法定労働時間の週40時間超ってどうやって計算するの?」
を解説しているページがあります。
参考になりますか?
https://www.shinjuku-law.jp/columns-labor/houteiroudou-40jikan/

投稿日時: 21/12/05 16:15:33
投稿者: 所長

WinArrow さんの引用:
いろんな勤務形態があり、一律にこうすべきということはできませんが
 
「法定労働時間の週40時間超ってどうやって計算するの?」
を解説しているページがあります。
参考になりますか?
https://www.shinjuku-law.jp/columns-labor/houteiroudou-40jikan/

 
ご返信誠にありがとうございます。
はい、参考になると思います。
週計は日計とダブルカウントしないという点、その通りと思います。
補足となりますが、月またぎ週(月初、月末)は以前のメールで記載した通りで、計算しております。
なにとぞ、宜しくお願い申し上げます。

回答
投稿日時: 21/12/06 10:14:18
投稿者: 半平太

>日付のズレ
 
その本題の話ですけども、
 
先頭にある出勤時刻の日付(I2セル)と
営業日の日付が合うところ(サンプルではG3)にズレた行数(つまり今回は1行)だけ
I列より右にあるデータ全体を下にズラせばいいだけの話なんじゃないですか?
 
そうであれば、いとも簡単な話ですけどね。

投稿日時: 21/12/06 10:41:24
投稿者: 所長

半平太 さんの引用:
>日付のズレ
 
その本題の話ですけども、
 
先頭にある出勤時刻の日付(I2セル)と
営業日の日付が合うところ(サンプルではG3)にズレた行数(つまり今回は1行)だけ
I列より右にあるデータ全体を下にズラせばいいだけの話なんじゃないですか?
 
そうであれば、いとも簡単な話ですけどね。

 
ご返信誠にありがとうございます。
そうですね、I列より右のデータを下にズラせればと思っております。
出勤時刻や退勤時刻などが10/2で、営業日10/1が同じ行になってしまうので、
ズレてしまうのを修正したいと考えてます。

回答
投稿日時: 21/12/06 14:33:18
投稿者: WinArrow
投稿者のウェブサイトに移動

所長 さんの引用:

ご返信誠にありがとうございます。
そうですね、I列より右のデータを下にズラせればと思っております。
出勤時刻や退勤時刻などが10/2で、営業日10/1が同じ行になってしまうので、
ズレてしまうのを修正したいと考えてます。

 
掲示の表(シート)だけ見ると、その通りだと思いますが。
出勤時刻、退勤時刻は。2日から始める・・・ってj話があるので、
110/1の行は食うh区になるが、それは大丈夫なんですか?
なぜ1日は、出勤しないのか?よくわかりませんけど・・・・
 
ズレているシートとズレていないシートがある
という説明がありました。
なぜ、そうなるのかを確認することも必要ではないかと考えます。

回答
投稿日時: 21/12/06 17:12:38
投稿者: 半平太

>I列より右のデータを下にズラせればと思っております。
>出勤時刻や退勤時刻などが10/2で、営業日10/1が同じ行になってしまうので、
>ズレてしまうのを修正したいと考えてます。
  
取敢えず「I2セルの出勤日と同じ営業日までズラす」と言う前提で処理してみます。
不都合な点が出たら、何がその前提ではマズいのか分析してから返信願います。
 

Sub macro0()
    Dim WS As Worksheet
    Dim Pos
    Dim Dates
    Dim Days
    
    'ブックの全シートを 1 つずつループして処理する
    For Each WS In Worksheets
        
        With WS
            Pos = Application.Match(Int(.Range("I2").Value2), .Columns("G:G"), 0)
            If IsNumeric(Pos) Then
                If Pos > 2 Then
                    With .Range("I2").Resize(.UsedRange.Rows.Count, 11)
                        .Cut WS.Range("I" & Pos)
                    End With
                End If
            Else
                MsgBox WS.Name & "シート中、I2セルと同じ日付が、G列に存在しません"
                Exit For
            End If
            
            .Columns("A:R").Insert Shift:=xlToRight
            
            .Range("A1") = "カレンダー"
            .Range("A34:D34") = Array(2021, "年", 10, "月")
            
            Dates = .[DATE(A34,C34,0)+ROW(A1:A31)]
            Days = .[DAY(DATE(A34,C34+1,0))]
            
            .Range("A2").Resize(Days).Value = Dates
            .Range("A2").Resize(Days).NumberFormatLocal = "yyyy/m/d"
        End With
    Next WS
End Sub

ところで、2021年10月が決め打ちですけど、
月が変わる度にコードを書き換えなければならなくなります。
 
G7セル辺りの日付データを使って自動的に処理する方が簡単だと思いますが、どうですか?

投稿日時: 21/12/06 17:33:24
投稿者: 所長

半平太 さんの引用:
>I列より右のデータを下にズラせればと思っております。
>出勤時刻や退勤時刻などが10/2で、営業日10/1が同じ行になってしまうので、
>ズレてしまうのを修正したいと考えてます。
  
取敢えず「I2セルの出勤日と同じ営業日までズラす」と言う前提で処理してみます。
不都合な点が出たら、何がその前提ではマズいのか分析してから返信願います。
 
Sub macro0()
    Dim WS As Worksheet
    Dim Pos
    Dim Dates
    Dim Days
    
    'ブックの全シートを 1 つずつループして処理する
    For Each WS In Worksheets
        
        With WS
            Pos = Application.Match(Int(.Range("I2").Value2), .Columns("G:G"), 0)
            If IsNumeric(Pos) Then
                If Pos > 2 Then
                    With .Range("I2").Resize(.UsedRange.Rows.Count, 11)
                        .Cut WS.Range("I" & Pos)
                    End With
                End If
            Else
                MsgBox WS.Name & "シート中、I2セルと同じ日付が、G列に存在しません"
                Exit For
            End If
            
            .Columns("A:R").Insert Shift:=xlToRight
            
            .Range("A1") = "カレンダー"
            .Range("A34:D34") = Array(2021, "年", 10, "月")
            
            Dates = .[DATE(A34,C34,0)+ROW(A1:A31)]
            Days = .[DAY(DATE(A34,C34+1,0))]
            
            .Range("A2").Resize(Days).Value = Dates
            .Range("A2").Resize(Days).NumberFormatLocal = "yyyy/m/d"
        End With
    Next WS
End Sub

ところで、2021年10月が決め打ちですけど、
月が変わる度にコードを書き換えなければならなくなります。
 
G7セル辺りの日付データを使って自動的に処理する方が簡単だと思いますが、どうですか?

 
 
ご返信誠にありがとうございます。
早速実行してみたところ、解決しました!
お忙しい中本当にありがとうございました。
これで、しばらく検証したいと思います。
G7セルを使って自動的に出来るのでしょうか?
そうなると、とても良いですね。
コードを追加するのですかね?
 
 
他のメッセージを頂いた方々もありがとうございました!
コードの書き方、可読性なども大変勉強になりました。
皆さま、本当にありがとうございました。