• ベストアンサー

エクセルVBAで日報自動印刷

会社で、コピーした日報に毎日、日付を記入して使用しているのですが、面倒なのと、コピー代よりプリンターで印刷した方が安いと言うことを聞き、何とか自動で1ヶ月分日付入りで印刷できないものかと考えております。 VBAの達人の方、何月何日から何月何日までと入力してボタンを押すだけで日報印刷できるプログラムを教えて下さい。御願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TTak
  • ベストアンサー率52% (206/389)
回答No.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)
回答No.2

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の環境にて動作確認済みです

ponkiti
質問者

補足

早速のプログラムありがとうございます。 ちょっと状況の説明が甘かったので補足いたします。 製造日報がエクセルで作成されており、通常は日付欄は 空欄になっています。いつも、これを毎月見直して変更したりして一枚だけ印刷し、1ヶ月分コピー機で印刷してい ます。これを自動的に日付入りをプリンターで印刷したい ということです。 イメージ的には、日報印刷のマクロボタンを押すと 「何月何日からですか」とダイヤログボックスがでて たとえば5月1日と入力、すると次に「何月何日までですか」と出てきて、5月31日と入力すると、「印刷しますか?」とでて、「ハイ」を押すとあとは、日付欄に5月1日が自動入力されて印刷→5月2日が自動入力されて印刷→・・・→5月31日入力されて印刷→終了 となるようなマクロです。単純に上記の操作を自動記録でやってみたらうまくいったのですが、とても長いマクロになるし、日付の融通がきかないので使いずらいのです。サブルーチンとか使ってもっと短いプログラムで、対話形式でできる方法をなんとかおしえていただきたいのですが、・・・誠に勝手な御願いで申し訳ございませんが、何卒宜しく御願いいたします。

  • don_cha
  • ベストアンサー率34% (139/407)
回答No.1

エクセルのブックが月別で、シート毎に日付で分けていらっしゃるのでしょうか? 上記のような区分けの場合、VBAで制御するまでもなく、印刷したいシートの先頭を選び、SHIFTキーを押しながら印刷したい最終シートを選び、その状態で印刷ボタンを押すと先頭から最終シートまで印刷してくれますが、これではダメでしょうか? もし、もっと違うことをお望みであればブック及びシートの構成を補足願います。

ponkiti
質問者

補足

説明が不足していて申し訳ございません。 エクセルで作成した日報には日付欄があって、 通常は空欄のものを印刷し、これを1ヶ月分 の31枚をコピー機でコピーしており、製造日報 なので手書きで日報を作成しています。 日報の日付の部分だけでも1ヶ月分自動印字 されないものかと思っています。 宜しく御願いいたします。

関連するQ&A

  • VBAで日報を作っています。

    VBAで日報を作っています。 日報はほとんどできましたが、 みんなで使っている全体のスケジュール管理ソフトがあり、 VBAで日報を自動で処理している途中で、全体のスケジュールソフトを起動させ実行させたと 思っています。 今のVBAの途中に付け加えたいと思っています。 VBAで日報を処理している途中でデスクトップにあるショートカットのプログラムを実行させる 事はできるのでしょうか? Shellで他のプログラムを実行できると聞いたことがあるのですが、 人により、デスクトップのパスが違ってくると思うので、パスを取得し そのパスにあるショートカット(exe)を実行させ、開いた画面にある スタート(A)を押したいのですが、VBAでできまでしょうか? 説明が下手なので、すみませんがよろしくお願いします。

  • EXCEL VBAで日報作成したい

    お世話になります。 EXCEL VBAの勉強をかねて日報を作成しようと思っています。 添付図にあるような簡単な日報ですが、VBAでやりたいことは2つあります。 1.行追加 各行の隣にある「行追加」ボタンを押したらその行を下に追加したいのです。 2.カレンダー作成 「カレンダー作成」というボタンを押したらA5に入っている月を参照して、添付図のようなA列が月、B列が日、C列が曜日、D列が開始時間、E列が終了時間、F列が作業、G列に行追加ボタンが自動で該当月のカレンダーに自動作成できれば最高です。 上記1.2を実現するためのロジックについてどなたかお知恵をお借りできませんでしょうか? よろしくお願い致します。 EXCEL2013

  • エクセル2010 VBA初心者です

    エクセル2010で30日分の日報を作成しています 日付の入力をカレンダーから選択したくて、Microsoft Date and Time Picker Control6.0 を使用して、日報1日目の日付のセルにカレンダーから日付を入力する事が出来るようになりました。 これを30日分のそれぞれの日付のセルに入力出来るようにするにはどうすれば良いでしょうか? 単純にコピーして貼り付けても出来ませんでした。 VBAやマクロは初心者ですが、教えていただける方がいましたら宜しくお願い致します また補足が必要な物があれば教えてください 宜しくお願い致します

  • エクセル VBA

    VBA初心者です。教えてください。 エクセルで日々残高管理をしております。 1~31(日付別)までシートがあります。 例えばなんですが、今日は29日なので29のシートを一旦表示します。その後で、28日のシートの最終残高の金額をコピーして29日のシートの最初残高に数字を貼り付けたいのです。ボタンを押すと上記のような動作が起こるようにしたいのですが可能でしょうか。 ボタンは2~31のシートすべてに付けたいです。 マクロの自動記録で作ろうと思いましたが、30パターン程作らなければならなくて、面倒だと思いました。 どなたかお知恵を貸していただけないでしょうか 宜しくお願い致します。

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • エクセルのVBAでオブジェクトの配列変数は使えますか?

    VBですとオブジェクトの配列変数というか、コピーしたときに自動的に配列になってしまいますが、エクセルのVBAの場合でオブジェクトの配列変数は使えますか? なにをしたいかというと、ボタンが多すぎて一つ一つにプログラム定義は面倒、そこで配列にしてまわすことにしたいのですが、エクセルで可能でしょうか。 どなたかお願いします。

  • エクセルVBAでの自動ファイル保存

    エクセルVBAを使い入力したシート(ファイル)を、一定のデータが 入力された時点で指定した場所に例えば作成日をファイル名にして自動 的に保存していくようにしたいのですが、プログラムはどのようにすればいいのでしょうか? 実現させたいプログラムは、このような感じにしたいです。 1.VBAで指定シートにデータ入力→2.データ数10個で自動的に日付をファイル名にして自動的に保存→3.更に、データ10個追加された時点で前に作成されたファイルを自動で更新→4.データの入力完了で更に自動で更新 2~4のプログラムをご教授お願いします。

  • Excel 日報管理

    Excelに詳しい方、教えてください! 携帯からだと意味がわからないと思います…。 Excelで営業日報の管理をしています(日付ごとシート管理で一月ごと)。 今の営業日報にお客様情報の検索ページを作りたいのです。 ルート営業の日報なのですが、 毎日お客様のお店を回れるわけではありませんので、 1~31日までの空欄を作ってそこに引っ張ってくるというやり方ですと、 空欄が目立ちそうで…。 ポイントとして、 (1)特定のお客様の情報があった日の日報の、 (2)特定のお客様の情報だけを、 (3)時系列に並べて表示できるように。 という形にしたいです。 幾つか関数を組み合わせればいけそうな気がするのですが、 詳しい方がいましたら教えてください!

  • VBAでExcelのヘッダーに文字列+セルの値を入れたい

    お知恵を貸してください。 Excelヘッダーについてです。 セルA1に日付が入っていて、この値をYYYY/MM/DDの形でヘッダーにしたいと思っているのですが、この日付の前に「日報」という2文字を必ず入れたいのです。 最終的な形は「日報YYYY/MM/DD」となればよいのですが、これはVBAで可能なのでしょうか。 今まで手入力していたのですが毎日印刷するものなので、自動化したいと思うのです。 よろしくお願いいたします。

  • エクセル VBA

    エクセル VBA コマンドボタン(印刷)をクリックするとSHeet1・SHeet2が 2つ印刷出来るような設定にしたいです。 普通は、SHeet1をコピーして Sheet2の画面を開いてコピーという手順を ボタン押すと、SHeet1・SHeet2が印刷されるようにしたいのですが・・・・ ちなみに印刷設定は出来ています。 このような ことはマクロで出来るのでしょうか? 記述を教えて下さい!

専門家に質問してみよう