プロが教える店舗&オフィスのセキュリティ対策術

似たような質問があり、請求書バージョンなど見て理解しようとしたのですが、どうしても出来ませんでした。 エクセルで、日付だけを変えて、日誌を1ヶ月分連続自動印刷させたいです。 シート1のA列に3月1日から3月31日までの日付を入力。 B列には、印刷をしたい日付の横に「1」を入力。(月曜日~土曜日)
シート2には、日誌のテンプレートがあり、そこの日付部分に、シート1の指定された日付(月曜日から土曜日)を連動させ、印刷ボタンを作成して、印刷ボタンを押すと連続印刷できるようにしたいです。
教えていただけると幸いです。よろしくお願いします。


教えていただけると幸いです。

質問者からの補足コメント

  • 回答を下さった皆様、ありがとうございます。
    言葉足らずで申し訳ありません。マクロやVBAは、簡単なものであれば、日常業務で使用しておりました。今回、もっと知識を深めたいと思い、VBAをもっと勉強したいと考えております。 ご丁寧に教えて下さり感謝致します。ありがとうございました。

      補足日時:2020/02/19 08:09
  • ご回答下さった皆様
    凄く大変なVBAのコードを教えてくださった方
    また、ご丁寧に教えてくださった方
    内容を熟読してから、改めてお礼させて頂きたいと思います。 知識不足の私の為に、ありがとうございます。皆さんのご回答、大変勉強になります。

      補足日時:2020/02/19 12:06

A 回答 (4件)

No.3 補足



① 毎月翌月分を印刷されるのだろうとして「InputBox」に翌月がデフォルトでセットされます。
② 月だけで考えると12月の翌月が今年の1月になってしまうので、今月より前になった時は翌年にするようにしています。(先月以前はセットできません)
③ A列に表示される日付には曜日も表示しました。(修正時の参考になるかと…)
    • good
    • 3

以下の様な物はいかがですか?


※「Const 日付シート名 As String = "Sheet1"」「Const 日付シート名 As String = "Sheet2"」「Const 日付個所 As String = "A1"」は修正して下さい。
※「日付セット」マクロを実行後必要ならば B列を修正してその後「印刷処理」マクロを実行して下さい。

Option Explicit

Const 日付シート名 As String = "Sheet1" ' 環境に合わせて下さい
Const 印刷シート名 As String = "Sheet2" ' 環境に合わせて下さい

Sub 日付セット()

Dim 対象月 As String
Dim 年月日 As String
Dim 開始日 As Date
Dim 日付 As Date
Dim 行 As Long

 Sheets(日付シート名).Select
 対象月 = Format(DateAdd("m", 1, Date), "m") ' 翌月をデフォルトにセット
 対象月 = InputBox(prompt:="対象の月を指定して下さい", Default:=対象月)
 対象月 = StrConv(対象月, vbNarrow) ' 全角文字で入力した時の対応
 年月日 = Year(Date) & "/" & 対象月 & "/1"
 If IsDate(年月日) Then
  開始日 = DateValue(年月日)
 Else
  If 対象月 = "" Then
   MsgBox ("キャンセルしました")
  Else
   MsgBox ("「" & 対象月 & "」は月として指定出来ません")
  End If
  Exit Sub
 End If
 If 開始日 < DateValue(Year(Date) & "/" & Month(Date) & "/1") Then
  開始日 = DateAdd("yyyy", 1, 開始日)
 End If
 Cells.ClearContents
 Range("A1:A31").NumberFormatLocal = "yyyy/mm/dd (aaa)"
 Do
  日付 = 開始日 + 行
  行 = 行 + 1
  Cells(行, 1).Value = 日付
  If Weekday(日付, vbMonday) <= 5 Then
   Cells(行, 2).Value = 1
  End If
 Loop Until Day(開始日 + 行) = 1
 Cells.EntireColumn.AutoFit
 Cells.HorizontalAlignment = xlCenter
 Range("B1").Select

End Sub

Sub 印刷処理()

Const 日付個所 As String = "A1" ' 環境に合わせて下さい
Dim 行 As Long

 Sheets(印刷シート名).Select
 For 行 = 1 To Sheets(日付シート名).Cells(Rows.Count, 2).End(xlUp).Row
  If Sheets(日付シート名).Cells(行, 2).Value = 1 Then
   Range(日付個所).Value = Sheets(日付シート名).Cells(行, 1).Value
   ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  End If
 Next

End Sub
    • good
    • 3

こんばんは、先の回答にもあるように、行いたい事は、処理の自動化なのでマクロで処理する必要があります。


ご質問の中に、マクロやVBAと言ったキーワードがないので、りんご315さんにその知識があるか不明です。

しかし、初めからプログラムを考えられる人はいませんし、コードを書ける人もいません。このような事がきっかけになる事も
少なくないと思います。
もし、マクロをご存知がなく、挑戦してみようと言う事であれば、手助けをいたします。

マクロやVBAの導入などに興味がなければ、下記は読み飛ばしてください。

基本的に導入方法を知らなくては始まりません。

< Excelマクロ導入方法 >で検索してみてください。

記録方法は、< Excelマクロの自動記録 >で検索してざっくり学習しましょう。

実際に実験します。
記録ボタンを押してシートを選択、セルを選択、何かを入力を何回か行い、記録終了

何やら、VBEに記録される事を確認します。(内容は、ざっくりこの操作が、これかな位で)
ここまでで、1時間くらいでしょうか。
深く理解する為には時間がかかります。しかし、深く知る必要は、必要がある時にすれば良いと思います。
つまり、やり方や内容が分からなくなったら、また立ち返り学習すれば良いと思います。

単純な作業の繰り返しであれば、さほどマクロの知識がなくても記録機能を活用して合理化できます。

さて、ご質問のマクロは、単純作業と言うわけではありません。しかし、難しさで言えば、初級のレベルで十分実現できると思います。

記録方法が分かったら、今回の作業を実際に記録してみましょう。
ご質問にあるB列の1を判断し指定した日付を・・は、自動記録では実行が困難なので、単純に1枚だけ印刷する作業を記録します。

手順
日誌のテンプレートのシートを表示しておきます。
マクロの記録
シート1 を選択 > 印刷したい日付(A列)セルを選択 > Ctrl+C(又は右クリックからコピー) > 日誌のテンプレートのシートを選択 >
そこの日付部分セルを選択 > ペースト Enterを押す (又は右クリックから貼り付け又は形式を選んで値貼り付け)>印刷
シート1 を選択 > 次に印刷したい日付(A列)セルを選択 >・・・ペースト Enterを押す >印刷 2回やったら記録終了

上記を実際に記録するとこんな感じ
<仮定>
日誌のテンプレートシートのC4が日付入力セル
シート1のA4セルある日付をコピーして印刷、次にA10セルの日付をコピーして印刷。

Sub Macro1()
'
' Macro1 Macro
'

'
Sheets("シート1").Select
Range("A4").Select
Selection.Copy
Sheets("日誌のテンプレート").Select
Range("C4").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Sheets("シート1").Select
Range("A10").Select
Selection.Copy
Sheets("日誌のテンプレート").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End Sub

私は、Msdnみたいなサイトなら環境情報や検証コードの提示を求めたりしますが、
このサイトでは、幼稚園、小学生(VBA初心者に)に高校生レベルの質問をしなさいとは言いませんので、
もしチャレンジする気があれば、実際に記録したマクロを補足に上げてください。(私も考える事を放棄した質問には気が向かなければ回答しませんので)
条件で実行する部分などをアドバイスいたします。(時間的タイミングが合えば)

冒頭に検索して学習してくださいとしました。これは、最低限覚えて頂く為のものです。

私的な考えですが、スクリプト系で質問サイトに投稿されているその殆どは、学習の為投稿しているとは、思っていません。
なぜなら、問題の解決が目的だから、
学習目的であれば、基礎的な知識がある場合、調べた方が早いですし、自ずと実験、検証が必要になるので、関連学習も出来るからです。
    • good
    • 3

マクロで処理することになりますね。



マクロについて分からないのであれば、一つずつ手作業で印刷を行うようにしましょう。

だれかに代わりにマクロを作ってもらっても、仕様…条件…が変わった時に自分で直せないだろ?
それにここは「代わりに作ってください」と作成代行する場所じゃないんだ。
自力で解決できるようにするためのアドバイスをする場所です。

「マクロで印刷する日付を見つけるアルゴリズムが分かりません」
など、分からない点を具体的に聞かれれば、相応な回答が返ってきますよ。

・・・
それでも、一通りのマクロを書いて示す人はいますけどね。
    • good
    • 2
この回答へのお礼

ありがとうございます。自分で調べて、実際にエクセルをマクロでいじってみたのですが、行き詰まってしまい、質問してしまいました。自分で知識を深めたいと思います。ありがとうございました。

お礼日時:2020/02/19 08:13

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

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


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