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

このQ&Aに関連する最新のQ&A

印刷 VBA」に関するQ&A: VBA印刷ページ設定

A 回答 (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ページ作って(シートの下の方にコピー&ペーストで増やす)印刷範囲を変化させるようなコーディングが望ましいと思われます。
    • good
    • 1

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

この回答への補足

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

補足日時:2001/04/26 11:54
    • good
    • 0

エクセルのブックが月別で、シート毎に日付で分けていらっしゃるのでしょうか?



上記のような区分けの場合、VBAで制御するまでもなく、印刷したいシートの先頭を選び、SHIFTキーを押しながら印刷したい最終シートを選び、その状態で印刷ボタンを押すと先頭から最終シートまで印刷してくれますが、これではダメでしょうか?

もし、もっと違うことをお望みであればブック及びシートの構成を補足願います。

この回答への補足

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

補足日時:2001/04/26 11:28
    • good
    • 4

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q日付だけを変更して印刷(Excel)

事務の仕事をしています。
毎月初めに営業さんにExcel2003で作った日報や予定表などの書類を、
一ヶ月分(31枚)コピーして渡していました(中の文書は手書きなので、全部同じ内容です)

しかし最近、日付と曜日だけは先に入力しておくように言われたので、
毎回 「12月●日▲曜日」 の●と▲の部分だけ変えて一枚ずつ印刷しているのですが、何種類もあるので少し大変です。

一度印刷ボタンを押すだけで、日付と曜日を変更して一ヶ月分を一度に印刷してくれるような機能はありますか?

説明が下手で申し訳ありません。
よろしくお願いします。

Aベストアンサー

マクロ(VBA)を使えば可能です。
一番簡単なのは、同じフォーム(帳票)を一つのシートに31枚コピーして予め作ってしまう事かも知れません。

日付や曜日は関数や書式で設定できるので、1枚目に設定するだけで他の帳票の日付も自動的に変更されます。
印刷時は必要なページ数(日数:28-31)までを印刷すれば良いでしょう。

(1)1枚目の日付と曜日が1セルなら「m"月"d"日" aaa"曜日"」と書式設定しておきます。
(2)1枚目をコピーして1枚目の下段に貼付けます。
(3)2枚目の日付欄に「=[1枚目の日付セル] + 1」と式を記入。
(4)2枚目をコピーして下段に必要枚数貼付ける。

1枚目に日付を入れればいつでも使えます。

Qエクセルで日付連続印刷

エクセルで日付連続印刷したく下記のようなものが、別の質問の回答であり、
試してみましたが、印刷できません。
印刷できるようにするには、どのようにしたら良いのでしょうか?

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), "m/d(aaa)") '開始
endDay = Format(InputBox(myPrompt_e, myTitle_e), "m/d(aaa)") '終了
For I = 0 To endDay - startDay
Range("b3").Value = Format(startDay + I, "m/d(aaa)")
ActiveSheets.PrintOut
Next I
ExitMe:
End Sub

エクセルで日付連続印刷したく下記のようなものが、別の質問の回答であり、
試してみましたが、印刷できません。
印刷できるようにするには、どのようにしたら良いのでしょうか?

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 = "印刷終了日付"
st...続きを読む

Aベストアンサー

先の回答で、「 On Error GoTo ExitMe の行をコメントにして実行すれば、エラー箇所が分かる」と書きましたが、やってみましたか?

やってみると ActiveSheets.PrintOut の行でエラーが発生しているのが分かると思います。
ActiveSheets は、”s”なしで、ActiveSheet が正しいです。

QEXCELで1ヶ月分の連続した日付をシート名+セルに表示させたい

似たような質問は他にもありましたが、希望とするものではないので新たに質問させてください。

当方MacのExcel2011を使用しています。

表題の通りなのですが、連続した日付+曜日をシート名とセルに表示をさせた、1ヶ月分のシートをつくりたいのです。

1シートづつ日付と曜日を入力するのは大変疲れるので、効率よくできれば・・・嬉しいです。

何卒宜しくご教示ください。

Aベストアンサー

日付をどのセルに入れるのかということと、1ヶ月分というのが今日から1ヶ月分なのか今月1ヶ月分なのか指定の月一ヶ月分なのか、シートタブ上の日付の表示形式はどうしたいのか、雛形となるシートが存在するのかどうか、表示のシートがあるのかどうかで細部は変わります。

雛形として存在する一つ目のシート名が今日の日付として作成されているとして、その一つ目のシートをコピーして、翌日から1ヶ月分のシートを追加作成。その際、それぞれのシートでは、一つ目のシートのアクティブなセルのセル番地と同じセル番地にシート名と同じ日付が入力されます。


Sub シート名に今日の日付を追加する()
Dim dt
dt = InputBox("対象日付をyyyy/mm/dd形式で入力してください", "yyyy/mm/dd", Date)
If Not IsDate(dt) Then
MsgBox "yyyy/mm/ddの形式で入力してください。" _
& vbCrLf & "処理を中止します。", vbCritical
Exit Sub
End If

For i = 2 To 31
dt = DateAdd("d", 1, dt)
Worksheets(1).Copy after:=Worksheets(i - 1)
With Application
Worksheets(i).Name = .Text(dt, "mm月dd日(") & .Text(dt, "aaa)")
End With
Next

Dim シート As Worksheet
Worksheets.Select
For Each シート In ActiveWindow.SelectedSheets
シート.Range(ActiveCell.Address).Value = シート.Name
Next シート
Exit Sub
End Sub

日付をどのセルに入れるのかということと、1ヶ月分というのが今日から1ヶ月分なのか今月1ヶ月分なのか指定の月一ヶ月分なのか、シートタブ上の日付の表示形式はどうしたいのか、雛形となるシートが存在するのかどうか、表示のシートがあるのかどうかで細部は変わります。

雛形として存在する一つ目のシート名が今日の日付として作成されているとして、その一つ目のシートをコピーして、翌日から1ヶ月分のシートを追加作成。その際、それぞれのシートでは、一つ目のシートのアクティブなセルのセル番地と同じセル...続きを読む

Qエクセルで日付を変えて印刷したい

エクセルにてヘッダーに日付を入力しております。

このヘッダーの日付だけを一日ずらして例えば5月18日~5月30日で内容は同じで印刷はを毎回ヘッダーの編集で印刷する以外方法はありませんでしょうか?
毎回編集しないで印刷する方法があれば教えてください。
後、印刷設定で1ページから1ページの印刷指定以外でヘッダーだけ2枚目で印刷されるのも避ける方法はありませんか?

Aベストアンサー

EXCELで印刷したい日付を入力した表を作り、WORDで文書を作って日付部分にEXCELで作った表から差し込み印刷をするのはどうでしょう?

>後、印刷設定で1ページから1ページの印刷指定以外でヘッダーだけ2枚目で印刷されるのも避ける方法はありませんか?
状況がよく解りませんが、通常はヘッダーだけが2枚目にはなりませんよ。余白の設定などがおかしいのでは?

Qエクセルのシート間で連続した日付データを作りたい

オートフィル機能をシート間の串刺しでやりたいと考えています。
現在、日付ごとに1日から31日までの31枚のシートがあります。
1枚目のシートのA1セルに1月1日と入力すると、その後30枚のシートのセルA1にそれぞれ1月2日~31日までの日付が自動で表示できるようにしたいのですが、どのようにすれば楽に処理できるのでしょうか?
なお、A2セルには曜日も表示させる予定です。
ご存じの方がいらっしゃいましたら、ぜひお知恵を拝借させて下さい。

Aベストアンサー

マクロで対応するならこんな感じでできます。
Alt+F11でVBEを起動して、「挿入」「標準モジュール」でこのコードを貼り付けで、エクセルで「ツール」「マクロ」からこのコードを実行してください。

Sub sample()
Dim i As Integer
For i = 1 To 30
Sheets(i + 1).Range("a1").Value = Sheets(i).Range("a1").Value + 1
Next i
End Sub


ちなみに曜日のほうは、一番左のシートを選択し、Shiftキーを押しながら一番右のシートを選択して作業グループにしてB1セルに「=A1」と入力してセルの書式設定でユーザー定義で「aaaa」などとしてください。

Qエクセルでの連続した日付の表示と印刷について

一枚の紙に今日の日付と納品日を記入した紙をまとめて連続して印刷したいです。

納品日は基本的に翌日なのですが土日祝日はその次の日になります。

例) 2006年3月6日(月)
納品日 3月7日(火)
     ・
     ・
     ・
   2006年3月10日(金)
納品日 3月13日(月)

差し込み印刷とかを使えばいいんでしょうか
祝日のところは手入力でもいいのですが
他のところは自動化したいです
よろしくお願いします

Aベストアンサー

ANo.2> 数式1 =WEEKDAY(A1,2)
ANo.2> 数式2 =IF(B1>5,A1+(8-B1),A1)

正しくは、
数式1=WEEKDAY(A1)
数式2=IF(B1>5,A1+(9-B1),A1+1)
と思いますが...

2つの数式をまとめて、以下の数式がいいと思います。
=IF(WEEKDAY(A1)>5,A1+(9-WEEKDAY(A1)),A1+1)
これであれば、[分析ツール]は不要です。

Q1ヶ月分の日付を一度に出す方法はありますか?

日報の用紙(A4)を30日分印刷したい時、今のところ1枚印刷しては、日付を入力しなおして、また1枚出すということをしている
のですが、地道な作業をするのは手間なので、何か設定をして、
毎回入力しなおさなくてもいい方法があれば教えていただけない
でしょうか?
これができるとかなり助かるのですが・・・
よろしくお願いします。

Aベストアンサー

単純に、ブック内に31日分のシートをコピーして
作ってしまえば簡単ですよ。

日付欄のみ、加工して下さい。
シート1の日付欄のみ手入力し、
それ以降のシートは
シート1の日付+1、
シート1の日付+2、
   ・
   ・
   ・
と、数式入力しておけば楽です。

印刷の時は、必要に応じて、シートを選択します。
例)6月であれば30日までなので、シート1のタブを
選択し、Shiftキーを押しながらシート30のタブを
クリックするだけです。
印刷ダイアログの印刷対象を、「選択したシート」と
して下さい。

Qエクセルで日誌作成&自動日付挿入

WINXP excel2000です

EXCELで日誌を作成します。
EXCELブックに日付が入っていないシートを1ヶ月分作成
各シートは、同じ書式
一番手前のシートの日付部分のセルに「2004/08/01」と入力すると、その下のシートの日付部分に対応したセルに8/2.8/3.8/4と言うように自動的に日付が挿入される。

というような関数は作成できるでしょうか?


よろしくお願いいたします。

Aベストアンサー

 まず一番最初の日付のセルに 2004/08/01 と入力し、そのセルの書式設定の表示形式タブでユーザー定義を選択します。次に種類の所の下にある欄に、yyyy/mm/dd と指定します。

 次の日のセルで =(1日を指定したセルの番地)+1 と数式を入力し、その後2日のセルの数式を月末までの日付のセルにコピーします。

 2日から月末までのセルの書式設定で最初に設定した所を m/d と変更すれば良いと思います。

Qエクセルで日付の入力で、土日祝を自動的に抜いて、営業日だけ表示したい

 経理の仕事で、営業日だけの入力を一括で表示できる方法はないでしょうか?
こんな感じです......。
 1月5日
 1月6日
 1月7日
 1月11日
つまり、土日と祭日を抜いた表示を自動一括表示したいのです。わざわざカレンダーとにらめっこしなくても、エクセルはおりこうさんだから、できてもいいのではないか?と思うのですが、ヘルプで質問しても、満足のいく回答がなかったので、何卒よろしくお願いいたします。 

Aベストアンサー

No.2です。

ちょっと補足。
祝日一覧には、本当の祝祭日に限らず営業日から省きたい任意の日付を入れても構いません。
(会社の創立記念日や夏季・冬季休暇など)
逆に振替休日などはちゃんと入れておく必要があります。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング