- 締切済み
マクロについてです。
マクロについてです。 sheet1からsheet5まで同じ内容の表があります。 inputbox を使って開始の日付と終了の日付を入力して、それぞれのシートのA1セルに全部の日付を入力させ、日付の入力されたシートの枚数分だけ印刷されるマクロを作成したいと考えております。まだまだマクロに関して無知なもので、いろいろと検索したり考えてもみたのですができませんでした。どうしても必要なものでこんな私になんとかご助力頂きたくヒントなどを頂きたく思います。どうか宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- layy
- ベストアンサー率23% (292/1222)
構文エラーの原因、MSGBOXとINPUTBOXの記載を混乱して覚えていませんか?。 括弧は?。 date1=inputbox~ RANGE("A1").VALUE=date1 セルの操作、表現はいろいろあります。 EXCELVBAへの道 というサイトも参考に。
- Wendy02
- ベストアンサー率57% (3570/6232)
>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を覚えるなら、テクニックのつまみ食いはよくないです。段階を経て、ひとつずつ体系的に覚えることですね。
- layy
- ベストアンサー率23% (292/1222)
マクロ(VBA)記述になりますから この基本的なところが分かっていないならそこからです。 多少はやったことある前提でいうと、 >inputbox を使って開始の日付と終了の日付を入力して、 >それぞれのシートのA1セルに全部の日付を入力させ、 >日付の入力されたシートの枚数分だけ >印刷されるマクロ おおきく4つの機能の分類でしょう。 この4つを実現するにはどんな仕組みにするかイメージできているか、どうか。 どの機能が行き詰っているのか。 全体でいうと、 それぞれ処理1~4とすると、 まずsheet1に対して処理1を実行 次にsheet1に対して処理1と処理2を実行 次にsheet1に対して処理1と処理2と処理3を実行 ・・・・・ sheet1に対して処理1~4まで実行できるようになったら sheet5に対してどうなるか、考える。 おおまかなやりたいことが明確なので どう実現するかを1つずつ片づけていけばなんとかなるものです。 いきなり全部やろうとしてもそんなものは答えやサンプルはありません。 「できそうにない」と人に頼ってあきらめる(※)人もいます。 こういうところは回答にいきなり結果コードを記載されることありますが、 そのままコピー&貼り付けで使い終わらせないことです。 ※の人は結果ばかり求めがちです。 考えないで作業を終わらせるという手段ではこの先も苦労します。 コード例に関しては面倒でも質問することです。 まず、 どの処理が自分でできそうで、 どの処理が困っていてできそうにないか明確にしましょう。
お礼
早速のコメントありがとうございます。 inputbox を使って開始の日付と終了の日付を入力して、 >それぞれのシートのA1セルに全部の日付を入力させ、 >日付の入力されたシートの枚数分だけ >印刷されるマクロ は自分がイメージしているまさにそのものです。 仰ることはごもっともだと思います。 不明な部分を明記しますが、相当初心者なのでよろしくお願いします。 1、InputBox "開始日日を入力して下さい!", "入力欄" InputBox "終了日を入力して下さい!", "入力欄" これをどうセルに入力(反映)させるのがわかりません。 2、Dim date1 As Variant date1 = Range("A1").Value date1 = InputBox "開始日を入力して下さい!", "入力欄" この方法だと構文エラーとなってしまいます。 現状書ける範囲で書いてみました。