- ベストアンサー
シートを任意の日付で自動で作成したい
1月分平日のみのシートを4桁の数字で作成したいと思います。 (平日とは土日・祝日など任意の日を除いた日) 例えば、2006年5月であれば 0501 0502 0508 0509 0510 0511 0512 0515 0516 0517 0518 0519 0522 0523 0524 0525 0526 0529 0530 0531 のシートを自動で作成したいです。 VBAの知識はまったくありません。 どうすれば自動でコピーして同じシートをこれらの名前で作ることができるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
自動作成って言う時点でマクロ(VBA)が必要です。 シートを作って名前を変えるだけならこんな感じです。 祭日は対応してません。 Sub Test() Dim sd, ed, cnt sd = Application.InputBox("yyyy/m/d", "日付", Type:=2) If Not IsDate(sd) Then Exit Sub sd = DateValue(sd) ed = DateSerial(Year(sd), Month(sd) + 1, 0) On Error Resume Next For cnt = sd To ed If Weekday(cnt, vbMonday) < 6 Then Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = Format(cnt, "mmdd") End If Next cnt End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
VBAの知識なしでは、自動でではできません。 関数でシート名を変えられません。シート名は、セルの「値」では無いですから。この辺をよく認識してください。何か気の効いたことをやろうとすると、VBAが必要になります。エクセルに限らず何でも教えてもらったことを理解するにも勉強が必要な場合が多い。 Sub tetst01() ym = InputBox("yyyy/mm") sn = Sheets.Count - 1 d = DateValue(ym & "/1") dl = DateSerial(Year(d), Month(d) + 1, 1) - 1 For i = d To dl If Weekday(i) > 1 And Weekday(i) < 7 Then sn = sn + 1 Worksheets.Add after:=Worksheets(sn) Sheets(sn + 1).Name = Format(i, "mmdd") MsgBox i & " " & Weekday(i) End If Next i End Sub yyyy/mm年月は2006/6のように答えてください。
お礼
大変参考になりました。 必要は発明の母ですね。 マクロを自由に操れたらおもしろいだろうなと感銘を受けました。 これから少しづつ学んでいこうと思います。
お礼
ご回答ありがとうございました 書いていただくと何となく意味はわかるのですが、0からつくるのは無理そうです。 いただいたプログラムを入れてみて勉強させていただきます。