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

おはようございます。
1つのブックで1ヶ月分のシートをつくるマクロを考えています。
月次処理シートのA列に例えば8月であれば、
0801 0802 0803・・・と入力。(もしくは0801から0831までをマクロで自動表示)
シートを1ヶ月分自動で生成するマクロを実行して、シート名を0801、0802、・・・とそれぞれ自動で変更。
1ヶ月分のブックの完成としたいのですが、どういうマクロを組めばよいでしょうか。

A 回答 (2件)

こんにちは。



もう、すでに回答が出ているようですが、私も考えてみました。
欲を言えば、年/月で設定させたほうがよいのですが、今回は、月だけです。

これは、Personal.xls の標準モジュールが良いのではないかと思います。

'-----------------------------------------------------------------
Sub DaysMonthAddedSheets()
''シート生成マクロ
Dim myMonth As Variant
Dim myDate As Date
Dim i As Integer, j As Integer
Dim m As Integer
Dim AcBook As Workbook
Set AcBook = ActiveWorkbook

'月と日付の決定
 myMonth = Application.InputBox("月を入力してください。" & vbCrLf & _
 "注意: 出力は、" & Year(Date) & "年の月の日付です", "シート生成マクロ", Type:=2)
 If myMonth = "" Or VarType(myMonth) = vbBoolean Then Exit Sub
 If Not IsNumeric(myMonth) Then
   MsgBox "数字を入れてください。"
   Exit Sub
 ElseIf 1 > CInt(myMonth) Or CInt(myMonth) > 12 Then
   MsgBox "月数が正しくありません。"
   Exit Sub
 End If
 
 myDate = DateSerial(Year(Date), myMonth + 1, 0)
 m = Day(myDate)
 
'シート生成
Application.ScreenUpdating = False
With AcBook
  i = .Worksheets.Count
  .Worksheets.Add After:=.Worksheets(i), Count:=(m - i)
  On Error GoTo ErrHandler
  For j = 1 To m
  .Worksheets(j).Name = Format$(myDate - m + j, "mmdd")
  Next j
  '終了後は、1日のシートへ
  .Worksheets(Format$(myDate - m + 1, "mmdd")).Select
End With
Set AcBook = Nothing
Exit Sub

Application.ScreenUpdating = True
ErrHandler:
 '再生成のエラー処理
 AcBook.Worksheets(Format$(myDate - m + j, "mmdd")).Name = "Temp"
 Resume
 Err.Clear
End Sub
'-----------------------------------------------------------------
    • good
    • 0
この回答へのお礼

Wendy02さん、こんにちは。
お礼が前後して申し訳ないです。
実行してみました。
相変わらず、すごい!!正直な感想です。
どうもありがとうございました。

お礼日時:2006/08/08 13:56

やろうとしていることがいまいちよくわからないのですが、



1.「月次処理」という名前のシートのA列にmmdd形式で1日から最終日までを自動で記入する。
2.A列に入力した数だけシートを追加しA列セルと同じ名前にする。

というサンプルです。ご参考まで。

Sub test01()
m = Application.InputBox("何月分ですか?2006/08のように入力してください。")
fd = m & "/01"
ld = Day(DateSerial(Year(fd), Month(fd) + 1, 0))
With Sheets("月次処理").Cells(1, 1)
.NumberFormatLocal = "mmdd"
.Value = fd
.AutoFill Destination:=Range("A1:A" & ld)
For i = 1 To ld
Set ns = Sheets.Add(After:=Sheets(Sheets.Count))
ns.Name = .Offset(i - 1).Text
Next
End With
End Sub
    • good
    • 0
この回答へのお礼

>やろうとしていることがいまいちよくわからないのですが

いえいえ、つたない説明でここまで完璧なマクロを教えていただきありがとうございました。
非常に助かりました。

お礼日時:2006/08/08 11:27

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