プロが教えるわが家の防犯対策術!

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

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

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

C2 には 日付
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

「ExcelのVBAでシフト表を作っていま」の質問画像

A 回答 (2件)

こんにちは



>毎月C2~AG2まで21日~翌20日と表記されればokです
ご提示のコードでは、D2以降に日付を入力している様には見えませんけれど、関数で表示しているってことでしょうか?
それで、余分になる翌月20日以降の列を非表示にしているってことなのかなぁ・・
(説明が無いし、図も見えないので勝手な推測ですけれど・・)

もしそうなら、ご提示のコードでは列を非表示にする処理しかしていないことが原因と思われます。
小の月の翌月を作成するのに、そのままシートをコピーして非表示の処理だけを行えば、もともと非表示になっている列は非表示のままですから。
2月の翌月(=3/21)にはもっと非表示のままになるのかな?
コードが正しいのなら、先に一旦表示にする処理を入れれば宜しいのでは?


余談ですが、もしも関数で日付を表示させているのなら、最終日がQ1セルにあるので、それ以降は空欄になるような式にしておけば良いのではないかとも思いますが・・
(関数では列は非表示にはできませんけれど・・)
例えば、D2セルに
 =IFS(C2="","",C2+1>$Q$1,"",1,C2+1)
として、右方にフィルコピーしておくとか。

もしそれで済むのなら、マクロも
 ・シートをコピーし、名前を変更
 ・C2の日付を1か月後に
 ・必要な部分をクリア
の処理だけで済むようになるものと思います。
    • good
    • 4
この回答へのお礼

うーん・・・

D2セルに
 =IFS(C2="","",C2+1>$Q$1,"",1,C2+1)
として、右方にフィルコピーしC2の日付を1か月後にしてもうまくいきません

 =IFS(C2="","",C2+1>$Q$1,"",1,C2+1)がうまく反映されませんでした

D2~AF2はそれぞれD2=C2+DAY(1)、E2=D2+DAY(1)のように
それぞれ左のセルに対して+DAY(1)をとるように運用していました

お礼日時:2022/09/24 08:35

画像が不鮮明なのでよくわかりません。


gyazo.comを利用すると鮮明な画像がアップできます。
下記URLはそのサンプルです。(画像の内容は本件とは無関係です)
https://gyazo.com/f94ab002421b0b1c3eb9d3c3b6e7d2c3

gyazo.comへアップされてはいかがでしょうか。
    • good
    • 0

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