会社で、コピーした日報に毎日、日付を記入して使用しているのですが、面倒なのと、コピー代よりプリンターで印刷した方が安いと言うことを聞き、何とか自動で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と関連する良く見られている質問

QAccessのクエリ。日付と顧客で売上合計をだす。

期間を指定して、顧客の売上を合計したいです。

2つのテーブルからクエリを作成しました。

tbl顧客
顧客番号
顧客名

tbl販売
販売番号
日付
顧客番号
金額

Q_売上
日付
顧客番号
顧客名
金額

∑をクリックして、金額の集計は[合計]にしています。
その他は、[グループ化]です。

日付の抽出条件は、
Between [開始] And [終了]
としています。

顧客毎に合計を出したいです。
よろしくお願い致します。

Aベストアンサー

日付の集計をグループ化ではなく、Where 条件にすれば
よろしいかと。

Qaccess2000 何日~何日の日付のデータ絞込み

こんにちは。
access2000で、日付の期間のデーターを絞り込みしたいのですが・・。
クエリーで抽出条件にどう記入すればよいでしょうか?

データーは、yyyy/mm/dd です。
2003/4/1~2004/3/31のデーターを抽出したいのですが・・。
お願いします。

それと、画面なのですが自宅は17インチ会社は15インチでフォームを作成すると、15インチに入りません・・。
自動的に画面に納まる事は出来ないでしょうか??

お願いします。

Aベストアンサー

日付フィールドは、日付/時刻型ですよね?

でしたら、

フィールド|日付
 抽出条件|Between #2003/04/01# And #2004/03/31#
 
のようにすれば、大丈夫だと思います。


> 自動的に画面に納まる事は出来ないでしょうか??
VBAで、かなり面倒なことをする必要があると思います。

自宅のPCで、画面のプロパティを使って解像度を落とした状態で
作成すればいいと思います。

Qエクセルで日付が入力されたセルの隣のセルの金額を合計するにはどうするのでしょうか。

A1、C1、E1セルにはユーザー定義(d”日”)で数字を入れると日付になります。
各、隣セルB1、D1、F1には金額が入力されています。
G1には合計が入るようになっています。
例えば、A1とE1に日付が入力された時、B1とF1の合計がG1に。
その後、C1に日付が入力されたらG1がB1、D1、F1の合計になるようにしたいです。
よろしくお願いします。

Aベストアンサー

こんばんは!
横からお邪魔します。

G1セルに
=SUM((A1>0)*B1,(C1>0)*D1,(E1>0)*F1)
ではどうでしょうか?m(_ _)m

QExcel97:ワークシートをコピーすると日付が1日若く更新される

表記のとおりです。
Excel97で、マクロ入りのある管理簿を作成しています。
提出物として、マクロがかかっていない完成版のワークシートを別に保存する時、ワークシートをコピーしてから「名前を付けて保存」するやり方をしてます。でもなぜかその時日付が1日分だけ若く更新されるのです。
その他には、コピーさせずに移動でワークシートを切り離しても同じことが起こります。でも再びそのファイルに戻すと日付もまた元に戻ります。ちなみに日付には「3/4」という表示形式が選択されています。

この現象はずっと今まで気付かなかったんですが、これまでの提出用の完成版ファイルを確認したら全てそうなっていました。念のため、違うファイルの日付がある表でワークシートのコピーをしてみたんですが、この時は大丈夫でした。
どうやら、このマクロ入りの、それもファイルの種類が「Excel97および5.0/95ブック」のファイルだけがそうなるようです。

でも、複雑なマクロが組み込まれているので、ファイル自体を再作成して改めて上バージョンで保存させるのは大変です。周りの人に聞いてみたら、「多分97のバグだろう。MicrosoftのExcelバグ対応のページを見れば何かあるかも」と教えてもらったので見たんですが、数ある中でこの現象には何が対応してるのかさっぱり分かりません。

一応先月度の提出物は、ファイルを全コピーさせ、マクロ入りのいらないワークシートを全て削除する方法で作成しました。でもワークシートの数が多いしメモリも重い物なのでやっぱり少しやりにくいですね。毎月のことだのでもっと良いやり方にしたいものです。

長くなりましたが、どなたか正しい対応の仕方、また何故このような現象が起こるのか教えて下さい。

表記のとおりです。
Excel97で、マクロ入りのある管理簿を作成しています。
提出物として、マクロがかかっていない完成版のワークシートを別に保存する時、ワークシートをコピーしてから「名前を付けて保存」するやり方をしてます。でもなぜかその時日付が1日分だけ若く更新されるのです。
その他には、コピーさせずに移動でワークシートを切り離しても同じことが起こります。でも再びそのファイルに戻すと日付もまた元に戻ります。ちなみに日付には「3/4」という表示形式が選択されています。

この現象はず...続きを読む

Aベストアンサー

こんばんは!

>「1904」を外せば多分、元ファイルの日付のまま
>コピーされるんでしょうけど、そうすると元ファイル
>じたいの日付表示がおかしくなってしまうのなら、
>どうしようもありません。

「1904」を外すと既に入力された日付自体がコピー先と
同様に4年と1日ずれますので以下の方法で補正します。

・「1904」を外す
・適当なセルに1462と入力しそれをコピー
・日付の入っているセル範囲を選択
・右クリック 形式を選択して貼り付け [値]と[加算]をチェック
・OK
---------------
数値の 1462 は1900/1/1 と 1904/1/1 の経過日数
です(1904/1/1-1900/1/1+1)

試しに 新しいシートで[1904]にチェックした状態で
2001/1/1 と入力して[1904]のチェックを外し同作業を
行ってみて下さい!納得されると思います。

不便な機能と思われるかもしれませんが確かMAC版との
互換を保つためにあると聞いたことがあります。
あとこれを使うと時間のマイナス値も扱えるようになる
のですが、承知しての使い分けを行わないと、ご承知の
通り、不便を伴います。

こんばんは!

>「1904」を外せば多分、元ファイルの日付のまま
>コピーされるんでしょうけど、そうすると元ファイル
>じたいの日付表示がおかしくなってしまうのなら、
>どうしようもありません。

「1904」を外すと既に入力された日付自体がコピー先と
同様に4年と1日ずれますので以下の方法で補正します。

・「1904」を外す
・適当なセルに1462と入力しそれをコピー
・日付の入っているセル範囲を選択
・右クリック 形式を選択して貼り付け [値]と[加算]をチェック
・OK
-------...続きを読む

Q抽出結果で、合計と最新日付を得るには?

----A-----B-----C---
1 07/01 商品A 1,000
2 07/02 商品A 2,000
3 07/02 商品B 3,000
4 07/03 商品A 4,000
---------------------
のように、日付・品名・金額の列があり、
「商品A」の合計金額と、その合計した明細の最新日付を
出したいのですが、どうすればいいのでしょうか?

Aベストアンサー

合計は、
=SUMIF(B1:B4,"商品A",C1:C4)

最新日付は、
=MAX(IF(B1:B4="商品A",A1:A4))
と入力してから、CtrlキーとShiftキーを押しながらEnter

Q差込印刷の日付がどうしても・・・・

困っています。教えてくださいっ!!

エクセルデータ:平成20年3月6日(金)(ユーザー定義で設定)
差込
ワード:3/6/2008
と、変換されてしまいます。

他の片の質問にあったように、フィールドコードをワード上で変更(alt+F9→スイッチ:¥@)を入力してみたのですが、何も変わりません。

どうして??でしょうか。

*コンバーターを使用しても同じでした・・・。

スイッチの入力は直接ワードテキスト上で行うのですか?
それとも、スイッチ入力ってどこかのタブを開くのでしょうか。

初心者レベルですが、よろしくお願い致します。

Aベストアンサー

過去の 同様なQA を参考に

http://oshiete1.goo.ne.jp/qa863354.html

Q日付をキーにその日付から前と後をそれぞれ金額を合計する方法が知りたいで

日付をキーにその日付から前と後をそれぞれ金額を合計する方法が知りたいです。
SUMIFかSUMPRODUCTあたりの関数を使えばいいかなと思うのですが、いい方法が思いつきません。
よろしくお願いいたします。

Aベストアンサー

ちょっと、完璧にイメージできてないですが画像の上部にある日付の右にその日付未満(以下)と以上(それより新しい日付)の合計でいいんでしょうか?

日付をシリアル値と思えばSUMIFで条件式に不等式を入れれば可能です。

A1に軸となる日付が入ると仮定して

軸となる日付以前の日付
=SUMIF(日付データのある範囲,"<="&a1,金額のある範囲)

軸となる日付以降の日付
=SUMIF(日付データのある範囲,">"&a1,金額のある範囲)

どちらに軸となる日付を入れるかは不等号の=をどちらに入れるかです。

SUMPRODUCTでも出来ると思うけど、重くなりそうなので省略します。
きっと、別の方が答えてくれるでしょう。

QAccess2003の日付と印刷

Access2003を3日前に初めて個人情報を管理するデータを作成しているのですが、
日付を2003/12/01と入力したら次の欄に自動的に2004/11/30と一年後の日付を出力するにはどうすればよいでしょうか?
あとフォームでレコードを検索し、表示されたレコードのページ(1ページ)のみを印刷したいのですが、
フォームに印刷タブを作成しクリックするとレポートで作成した印刷プレビューにとぶまでは作成できたのですが、
レコードに入力したデータ前ページすべてが印刷されてしまいます。
選択したレコードのみを印刷するにはどうすればいいでしょうか?
始めたばかりの初心者でくだらない質問かもしれませんが、どなたかご教授お願いします。

Aベストアンサー

>日付を2003/12/01と入力したら次の欄に自動的に2004/11/30と一年後の日付を出力するにはどうすればよいでしょうか?

VBAを使います。
日付の入力後のイベントで(AfterUpdateあたりで)
次項目に一年後の一日前の日付をセットする命令を入れてあげます。

日付の計算はDateAdd関数です。
あとは調べてみて下さい。

>選択したレコードのみを印刷するにはどうすればいいでしょうか?

プレビューするボタンはウイザードで作っていると仮定します。
ボタンのクリックイベントに

stDocName = "レポート名"
DoCmd.OpenReport stDocName, acPreview

こんな感じで書かれていますね。

この「DoCmd.OpenReport stDocName, acPreview」のところに抽出条件が付けられます。

DoCmd.OpenReport stDocName, acPreview,,"キー項目 = 'キーの値'"

こんな感じです。
いろいろ実験してみて下さい。

>日付を2003/12/01と入力したら次の欄に自動的に2004/11/30と一年後の日付を出力するにはどうすればよいでしょうか?

VBAを使います。
日付の入力後のイベントで(AfterUpdateあたりで)
次項目に一年後の一日前の日付をセットする命令を入れてあげます。

日付の計算はDateAdd関数です。
あとは調べてみて下さい。

>選択したレコードのみを印刷するにはどうすればいいでしょうか?

プレビューするボタンはウイザードで作っていると仮定します。
ボタンのクリックイベントに

stDocName = "レ...続きを読む

Qエクセル 最新日付以外のデータを合計する

下表があるとしまして、
氏名日付買上金額
鈴木5月5日10
鈴木5月6日60
鈴木5月7日100
鈴木5月9日400
田中5月4日100
田中5月7日200
山田5月1日600
山田5月2日200
山田5月3日300
1970
氏名毎に、最新日付以外の合計を計算したいのです。
この場合、鈴木さんが170 田中さんが100 山田さんが800の合計1070がそれぞれの氏名の最新以外データの合計となりますが、これらを自動的に計算できないでしょうか?
よろしくおねがいします。

Aベストアンサー

こんにちは。

以下の方法でできます。
大きく分けて2ステップです。
データはあらかじめ日付順でソートされているものとします。


1)作業列を作る

最新データの場合のみ買上金額にかかわらず0を返し、
それ以外の場合は買上金額そのままを返す式を、
別な列に入力します。

たとえば例で言えばA~C列に氏名、日付、買上金額ですので、
D列を作業列としましょう。
D1セルに「買上金額2」などと見出しをつけてください。

D2セルに次の式を入力します。
 =IF(A2=A3,C2,0)
そしてこの式をすべての行にコピーします。
すると、最新データの行のみ、0となり、
それ以外の行は、買上金額が表示されます。


2)集計機能で名寄せして集計する

下準備ができたらいよいよ集計です。
リスト内にカーソルを置いた状態で、

 データ-集計

で、集計の設定画面が開きます。
ここで、
 「グループの基準」 を 「氏名」
 「集計の方法」 を 「合計」
を指定します。

そして、
 「集計するフィールド」では、
 「買上金額2」のフィールドにのみ、
チェックがつくようにします。

そして、OKを押せば自動的に集計されます。

こんにちは。

以下の方法でできます。
大きく分けて2ステップです。
データはあらかじめ日付順でソートされているものとします。


1)作業列を作る

最新データの場合のみ買上金額にかかわらず0を返し、
それ以外の場合は買上金額そのままを返す式を、
別な列に入力します。

たとえば例で言えばA~C列に氏名、日付、買上金額ですので、
D列を作業列としましょう。
D1セルに「買上金額2」などと見出しをつけてください。

D2セルに次の式を入力します。
 =IF(A2=A3,C2,0)
そしてこの式を...続きを読む

Q月曜日の日付のみ表示

いろいろと検索をかけて調べたのですが、
第○月曜日とかの表示の仕方は分かったのですが、
応用をきかせることが出来ずわかりません。
Excel2000で2004年の月曜日と金曜日のみ日付の表示方法を教えてください。
関数で出来ましたら、教えてください。
宜しくお願いします。

Aベストアンサー

月・金のみ表示ということであれば、
A列に日付を入れるとして
A1に「1/2」(※金曜日)
A2に「1/5」(※月曜日)
A3に「=A1+7」
A4に「=A2+7」
と入力し、A3:A4を選択した後、下にドラッグしてコピー
というやり方ではいかがでしょうか。


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

人気Q&Aランキング

おすすめ情報