• ベストアンサー

シートを任意の日付で自動で作成したい

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の知識はまったくありません。 どうすれば自動でコピーして同じシートをこれらの名前で作ることができるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

自動作成って言う時点でマクロ(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

r2san
質問者

お礼

ご回答ありがとうございました 書いていただくと何となく意味はわかるのですが、0からつくるのは無理そうです。 いただいたプログラムを入れてみて勉強させていただきます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

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のように答えてください。

r2san
質問者

お礼

大変参考になりました。 必要は発明の母ですね。 マクロを自由に操れたらおもしろいだろうなと感銘を受けました。 これから少しづつ学んでいこうと思います。

関連するQ&A