アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelのVBAでシフト表を作っていますが、バグが出て困っています
毎月21日~翌月20日までのシフト表を作成し、
VBAで日付を更新した上でコピーするマクロを作成しましたが

画像1枚目のように
2か月ごとに19日までしか表示されないバグが出てしまい
どうしても原因がわからないので教えてください。


毎月C2~AF2まで21日~翌20日と表記されればokです

C2 には 日付

D2~AF2までは D2=C2+DAY(1), E2=D2+DAY(1)....にように
左のセルに対して+DAY(1)を入れています

O1 には =C2
Q1 には DATE(YEAR($O$1),MONTH($O$1)+1,DAY(20))

がそれぞれ入っています

ソースコードも記しておきますので教えてください
------------------------------------
Sub sheetcopy()
Dim OldSheet As Worksheet
Worksheets(Worksheets.Count).Select
Set OldSheet = ActiveSheet
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)
atama = DateAdd("m", 1, Range("C2").Value)
Range("C2").Value = atama
ActiveSheet.Name = Year(Range("Q1").Value) & "年" & Month(Range("Q1").Value) & "月"
Dim be As Date
Dim af As Date
be = Range("O1").Value
af = Range("Q1").Value
non = af - be
non = non + 4
Do While non < 34
Columns(non).Hidden = True
non = non + 1
Loop
Range("C4:AG6").ClearContents
Range("C7:AG9").ClearContents
Range("C10:AG12").ClearContents
Range("C13:AG40").ClearContents
Range("C13:AG40").Interior.Color = xlNone
End Sub
----------------------------------------------

前回の質問で
D2セルに
 =IFS(C2="","",C2+1>$Q$1,"",1,C2+1)
として、右方にフィルコピーしておき
C2に1か月後の日付を入力するという回答をいただきましたが
うまくいきませんでした
D2セルに=IFS(C2="","",C2+1>$Q$1,"",1,C2+1)を入力しても反映されませんでした

「【再投稿】VBAのシフト表でバグが出て困」の質問画像

質問者からの補足コメント

  • うーん・・・

    回答ありがとうございます。

    バグが出るのは11月、2023年1月と2月が19日までしか表示されません
    2023年4月には17日しか表示されない上以降の翌月からずれてしまいます。

    一応参照までにうまくいった月の画像を貼ります

    あと
    >毎月C2~AF2まで21日~翌20日と表記されればokです
    >いっそC2から月末日までとAF2から逆順で1日まで2つのループじゃ格好良くもない?

    の意味がわかりかねます
    C2~M2までとの20~31日までと
    N2~AG2までの1日~20日のループ処理を2回行うということでしょうか?

    「【再投稿】VBAのシフト表でバグが出て困」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2022/09/24 12:30

A 回答 (3件)

以下のように変更してください。


変更点1
>D2~AF2までは D2=C2+DAY(1), E2=D2+DAY(1)....にように
左のセルに対して+DAY(1)を入れています

これをD2~AG2まで、上記を行ってください。

変更点2
以下の行を追加してください。
追加開始~追加終了の間の行です。

atama = DateAdd("m", 1, Range("C2").Value)
Range("C2").Value = atama
ActiveSheet.Name = Year(Range("Q1").Value) & "年" & Month(Range("Q1").Value) & "月"
'追加開始
For wcol = 1 To 33
Columns(wcol).Hidden = False
Next
'追加終了
Dim be As Date
Dim af As Date
    • good
    • 0
この回答へのお礼

問題なく動作するようになりました!
ありがとうございます!

お礼日時:2022/09/27 08:58

No.1です。


お礼について。

>の意味がわかりかねます
>C2~M2までとの20~31日までと
>N2~AG2までの1日~20日のループ処理を2回行うということでしょうか?

その通りです。
N2~AG2までの1日~20日のループは何月であろうと常に日付は変わらない(年月と曜日は別)ですよね。

C2~M2までの20~31日は月により末日は変動しますし1日までは空白が存在するはず。
ループカウンタが末日を超えたらループを終了させれば良いかと。

まぁ見えないですが別回答がついているようなので、そちらがわかり易ければスル~して下さい。
    • good
    • 0

先の質問は見かけましたけどやり取りは見てなかったので既出の補足になるかもですが、



>2か月ごとに19日までしか表示されないバグが出てしまい

とは何月を指しているのかについては補足済みなのでしょうか?
済であればスル~して下さい。

>毎月C2~AF2まで21日~翌20日と表記されればokです

いっそC2から月末日までとAF2から逆順で1日まで2つのループじゃ格好良くもない?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!