- ベストアンサー
エクセルVBAで日報自動印刷
会社で、コピーした日報に毎日、日付を記入して使用しているのですが、面倒なのと、コピー代よりプリンターで印刷した方が安いと言うことを聞き、何とか自動で1ヶ月分日付入りで印刷できないものかと考えております。 VBAの達人の方、何月何日から何月何日までと入力してボタンを押すだけで日報印刷できるプログラムを教えて下さい。御願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なるほど・・・・。 つまり、1,2,3,....31枚とプリントアウトすると、それぞれに5/1,5/2,5/3,.....5/31と日付が記入されているということですね?。 これをVBAで行うとなると・・・、PrintOutメソッドをループにかける必要が出てきそうですね。簡単な思いつきマクロでは、 Sub Test() Dim myPrompt_s As String, myTitle_s As String Dim myPrompt_e As String, myTitle_e As String Dim startDay As Date, endDay As Date, I As Integer On Error GoTo ExitMe myPrompt_s = "何月何日からですか?" myTitle_s = "印刷開始日付" myPrompt_e = "何月何日までですか?" myTitle_e = "印刷終了日付" startDay = Format(InputBox(myPrompt_s, myTitle_s), "yyyy/m/d") '開始 endDay = Format(InputBox(myPrompt_e, myTitle_e), "yyyy/m/d") '終了 For I = 0 To endDay - startDay Range("A1").Value = Format(startDay + I, "yyyy/m/d") ActiveSheets.PrintOut Next I ExitMe: End Sub のような感じではないでしょうか(この例ではセルA1に日付が入ります)。 ただ、このマクロ、走ることは走りますが、PrintOutメソッドをループ内に入れているので、枚数が増えるとOSやドライバ関係のエラーを誘発するおそれがあります。できれば、ファーマットを31ページ作って(シートの下の方にコピー&ペーストで増やす)印刷範囲を変化させるようなコーディングが望ましいと思われます。
その他の回答 (2)
- TTak
- ベストアンサー率52% (206/389)
ponkitiさんこんにちは > 何月何日から何月何日までと入力してボタンを押すだけで とありますが、日付の並び具合が判りませんので、オートフィルタを使った方法を紹介します。 例)日報データの日付はA列に入力されていて、これをキーとして特定の期間を抽出し、その結果を印刷するという方法です。なお、抽出する期間は、”何月何日から”がセルB1に、何月何日まで”がセルB2に記入されていることとします。 Sub MySheetPrintOut() Dim startDay As String, endDay As String With ActiveSheets '---印刷範囲を使用しているセルすべてに設定します(注記1) .PageSetup.PrintArea = _ ActiveSheet.UsedRange.CurrentRegion.Address '---抽出開始~終了期間を取得します startDay = Format(.Range("B1").Value, "yyyy/m/d")'開始 endDay = Format(.Range("B2").Value, "yyyy/m/d")'終了 '---抽出開始~終了期間でフィルタをかけます .Range(Cells(4, 1), Cells(.UsedRange.Rows.Count, 1)).AutoFilter Selection.AutoFilter Field:=1, _ Criteria1:=">=" & startDay, _ Operator:=xlAnd, _ Criteria2:="<=" & endDay '---印刷します(注記2) .PrintOut '---フィルタを解除します Selection.AutoFilter Field:=1 End With End Sub 注記1:このコードでは、一切、記入がない列が存在する場合の配慮がありませんので注意してください。 注記2:印刷用紙や印刷部数の値を必要に応じて追加してください。 簡単に書いていますので、実際はエラー処理などが必要です。 Win98SE+Excel2000の環境にて動作確認済みです
- don_cha
- ベストアンサー率34% (139/407)
エクセルのブックが月別で、シート毎に日付で分けていらっしゃるのでしょうか? 上記のような区分けの場合、VBAで制御するまでもなく、印刷したいシートの先頭を選び、SHIFTキーを押しながら印刷したい最終シートを選び、その状態で印刷ボタンを押すと先頭から最終シートまで印刷してくれますが、これではダメでしょうか? もし、もっと違うことをお望みであればブック及びシートの構成を補足願います。
補足
説明が不足していて申し訳ございません。 エクセルで作成した日報には日付欄があって、 通常は空欄のものを印刷し、これを1ヶ月分 の31枚をコピー機でコピーしており、製造日報 なので手書きで日報を作成しています。 日報の日付の部分だけでも1ヶ月分自動印字 されないものかと思っています。 宜しく御願いいたします。
補足
早速のプログラムありがとうございます。 ちょっと状況の説明が甘かったので補足いたします。 製造日報がエクセルで作成されており、通常は日付欄は 空欄になっています。いつも、これを毎月見直して変更したりして一枚だけ印刷し、1ヶ月分コピー機で印刷してい ます。これを自動的に日付入りをプリンターで印刷したい ということです。 イメージ的には、日報印刷のマクロボタンを押すと 「何月何日からですか」とダイヤログボックスがでて たとえば5月1日と入力、すると次に「何月何日までですか」と出てきて、5月31日と入力すると、「印刷しますか?」とでて、「ハイ」を押すとあとは、日付欄に5月1日が自動入力されて印刷→5月2日が自動入力されて印刷→・・・→5月31日入力されて印刷→終了 となるようなマクロです。単純に上記の操作を自動記録でやってみたらうまくいったのですが、とても長いマクロになるし、日付の融通がきかないので使いずらいのです。サブルーチンとか使ってもっと短いプログラムで、対話形式でできる方法をなんとかおしえていただきたいのですが、・・・誠に勝手な御願いで申し訳ございませんが、何卒宜しく御願いいたします。