この人頭いいなと思ったエピソード

1月分平日のみのシートを4桁の数字で作成したいと思います。
(平日とは土日・祝日など任意の日を除いた日)

例えば、2006年5月であれば

05010502050805090510051105120515
05160517051805190522052305240525
0526052905300531

のシートを自動で作成したいです。
VBAの知識はまったくありません。
どうすれば自動でコピーして同じシートをこれらの名前で作ることができるでしょうか?

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/21 06:08

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のように答えてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/22 18:12

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