>sheet1からsheet5まで
>inputbox を使って開始の日付と終了の日付を入力して、
>それぞれのシートのA1セルに全部の日付を入力させ、
>日付の入力されたシートの枚数分だけ印刷されるマクロを作成したい
つまり、1日から10日までということは、それぞれのシートのA1に、1日と日付をいれ、5シート分印刷し、それが、10回、合計50枚のシートの印刷をするという意味でしょうか?
Sub Test1()
Dim myDate1 As Variant, myDate2 As Variant, t As Variant
Dim msg As String, i As Long, sh As Worksheet
Dim Period As Long
'//
myDate1 = Application.InputBox("始めの日付を入れてください。", "日付入力", Type:=2)
If VarType(myDate1) = vbBoolean Then Exit Sub
If IsDate(myDate1) = False Then MsgBox "日付が入力されていないようです。yyyy/m/d", vbExclamation
myDate1 = CDate(myDate1)
myDate2 = Application.InputBox("終わりの日付を入れてください。", "日付入力", Type:=2)
If VarType(myDate2) = vbBoolean Then Exit Sub
If IsDate(myDate2) = False Then MsgBox "日付が入力されていないようです。yyyy/m/d", vbExclamation
myDate2 = CDate(myDate2)
'//
If myDate1 > myDate2 Then
t = myDate1: myDate1 = myDate2: myDate2 = t
End If
msg = Format(myDate1, "m/d") & " - " & Format(myDate2, "m/d")
If MsgBox(msg & vbCrLf & "印刷してよろしいですか?", vbQuestion + vbOKCancel) = vbCancel Then Exit Sub
Period = myDate2 - myDate1
'//ループ
For i = 0 To Period
Worksheets(Array(1, 2, 3, 4, 5)).Select '左から5シート
ActiveSheet.Range("A1").Select
Selection.Value = myDate1 + i
Worksheets(1).Select
For Each sh In Worksheets(Array(1, 2, 3, 4, 5))
sh.PrintOut Preview:=True '←ここをFalse にすると、そのまま印刷します。
Next
If Period > i Then
If MsgBox(Format(myDate1 + i + 1, "m/d") & " 続けますか?", vbQuestion + vbOKCancel) = vbCancel Then Exit For
End If
Next
End Sub
もし、マクロを調べるなら、Preview モード、ステップモードで試してみださい。
なお、私は、あくまでも、自分のために、書いているだけです。だから、質問者がどのようなレベルでも、私は初心者向けの手抜きコードは基本的には書きません。もし、VBAを覚えるなら、テクニックのつまみ食いはよくないです。段階を経て、ひとつずつ体系的に覚えることですね。
お礼
早速のコメントありがとうございます。 inputbox を使って開始の日付と終了の日付を入力して、 >それぞれのシートのA1セルに全部の日付を入力させ、 >日付の入力されたシートの枚数分だけ >印刷されるマクロ は自分がイメージしているまさにそのものです。 仰ることはごもっともだと思います。 不明な部分を明記しますが、相当初心者なのでよろしくお願いします。 1、InputBox "開始日日を入力して下さい!", "入力欄" InputBox "終了日を入力して下さい!", "入力欄" これをどうセルに入力(反映)させるのがわかりません。 2、Dim date1 As Variant date1 = Range("A1").Value date1 = InputBox "開始日を入力して下さい!", "入力欄" この方法だと構文エラーとなってしまいます。 現状書ける範囲で書いてみました。