[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロで印刷設定』(SHINJI)
お世話になります
1シートに1週間分の予定表が入っています 1日5列で1番上(3行目)の2列目に日付(m月d日(aaa))が 5日分横にならんでいます。(1日は70列程度) 毎日、翌日分の印刷を行っておりますが これをマクロで行いたいのですが可能でしょうか。 「翌日」を検索し1日分の印刷をしたいのです。 金曜日は月曜を印刷、土日に印刷することはありません。 祭日があることを考え、印刷日をメッセージボックスで 確認してから実行したいのです。 あれこれ贅沢で申し訳ありませんが、よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
一日分の印刷というのは、どうやっているのでしょうか。 現在の一日分の印刷をマクロの記録にとって、提示でないでしょうか。 (Mook) 2015/02/08(日) 13:52
ありがとうございます。 1日分でA4 2枚になるように改ページプレビューで 設定してあり、毎日 金曜は1-2、火曜は3-4ページと 手動で印刷しています。下は金曜に翌月曜を印刷する時のものです。 Sub Macro1() ' Macro1 Macro ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _ :=True, IgnorePrintAreas:=False End Sub よろしくお願いします。 (SHINJI) 2015/02/08(日) 14:10
印刷するシートはいつも同じシートなのですか? そうであれば、曜日に応じて印刷するページを変更するだけでもできるのでしょうか。 (Mook) 2015/02/08(日) 17:11
お手数をおかけします。説明が足りず申し訳ありません。 シートは1週1シートで、シート名はその週の月曜の日付となっています。 (今週なら「2月9日」) 最初のシートに「先週」「今週」「来週」のハイパーリンクを張り 各シートにも「先週」「来週」のハイパーリンクを張り機能させています。 毎日「翌日」の表を印刷しているのですが、PC操作苦手なスタッフがおり 印刷のページ指定が難しいとのことで、マクロでなんとか…と思った次第です。 あれこれ検索していたら、丁度MOOKさんが書き込んだマクロ Sub Sample() '// 対象のファイル Dim printFiles printFiles = Array( _ "C:\Data\printFile1.xlsx", _ "C:\Data\printFile2.xlsx", _ "C:\Data\printFile3.xlsx", _ "C:\Data\printFile4.xlsx", _ "C:\Data\printFile5.xlsx")
'// 印刷するシートの日付 Dim dt As Date dt = Date + 1 '// 仮に明日を設定 If Weekday(dt) = vbSaturday Then dt = dt + 2 '// 土曜だったら月曜に If Weekday(dt) = vbSunday Then dt = dt + 1 '// 日曜だったら月曜に
'// この日でいい? dt = CDate(InputBox("印刷日を指定してください。", "印刷日付確認", Format(dt, "yyyy/mm/dd")))
'// シート名 Dim tWsName tWsName = Format(dt, " m""月""d""日""(aaa)")
Dim pFile Dim ws As Worksheet '// 各ファイルの処理 For Each pFile In printFiles '// ファイルを開いて With Workbooks.Open(pFile) '// 各シートを順番に処理 For Each ws In .Worksheets '// シート名が一致したら印刷 If Trim(StrConv(ws.Name, vbNarrow)) = tWsName Then ws.PrintOut Copies:=3 Next '// ファイルを閉じる .Close False End With Next End Sub
に当たりました。 これは、明日の日付名のシート全体を印刷するので 検索対象をセルにして…とか考えていたのですが それにしても、その後の印刷範囲指定をどうすしたら… と考えていたところでした。 少し自分でも考えてみます。 (SHINJI) 2015/02/08(日) 17:35
だいたいこの手の話で問題になるのはシート名や日付の書式に関することが多い気がします。 シート名は手入力で入れているでしょうか。 日付の数字は全角、半角、スペースが混在したりしていないでしょうか。
>設定してあり、毎日 金曜は1-2、火曜は3-4ページと は 設定してあり、毎日 月曜分は1-2、火曜分は3-4ページと ということでしょうか。祝日は考慮していないですが、提示された条件でのサンプルです。
Sub Sample() '// 印刷するシートの日付 Dim prDate As Date Select Case Weekday(Date) Case vbFriday prDate = Date + 3 '// 金曜は月曜を設定 Case vbSaturday prDate = Date + 2 '// 土曜は月曜を設定 Case Else prDate = Date + 1 '// その他は翌日を設定 End Select '// この日でいい? prDate = CDate(InputBox("印刷日を指定してください。", "印刷日付確認", Format(prDate, "yyyy/mm/dd")))
If Weekday(prDate) = vbSaturday Or Weekday(prDate) = vbSunday Then MsgBox "土日は印刷できません" & vbNewLine _ & Format(prDate, "m""月""d""日""(aaa)") Exit Sub End If
'// その週の月曜 Dim wsDate As Date wsDate = prDate - ((prDate - 2) Mod 7)
'// シート名 Dim wsName wsName = Format(wsDate, "m""月""d""日""")
On Error Resume Next Dim prWS As Worksheet Set prWS = ThisWorkbook.Worksheets(wsName) On Error GoTo 0
If prWS Is Nothing Then MsgBox "指定日付のシートがありません。" & vbNewLine _ & "印刷日:" & Format(prDate, "m""月""d""日""") & vbNewLine _ & "シート:" & wsName Exit Sub End If
Dim startPage As Long '// 開始ページの計算 startPage = ((prDate - 2) Mod 7) * 2 + 1 prWS.PrintOut From:=startPage, To:=startPage + 1, Copies:=1, Collate:=True, IgnorePrintAreas:=False End Sub (Mook) 2015/02/08(日) 20:18
何から何まで全てうまく印刷できました。 本当にありがとうございました。 親切に説明を書いて頂き、全体的な流れは分かりました (細かい部分はこれから勉強します (^_^;))が、 最後の startPage = ((prDate - 2) Mod 7) * 2 + 1 prWS.PrintOut From:=startPage, To:=startPage + 1, Copies:=1, Collate:=True, IgnorePrintAreas:=False この部分の意味が難しくてわからないのですが… どのようになっているのでしょうか? お手数をおかけします。 (時間ある時で結構です) (SHINJI) 2015/02/08(日) 21:16
そうですね。 そこはちょっとわかりずらい書き方でした。
Mod はExcel 関数でも剰余なので数式で、 =Mod(Date() - 2, 7 ) * 2 + 1 とすれば、確認できると思いますが、別の関数を使って StartPage = Weekday(Date, vbMonday) * 2 - 1 としても同じです。
Weekday は開始曜日(第二引数)に応じて 1 〜 7 を返す関数です。 剰余は結果が 0 〜 6 になるので、調整が +1 と -1 で異なります。
A列に日付、B列に下記式を入れてみたら曜日に応じた開始ページになるのがわかるかと 思います。 B1 =Mod(A1 - 2, 7 ) * 2 + 1 (Mook) 2015/02/09(月) 07:47
丁寧な説明ありがとうございました。 Dim startPage As Long startPage = ((prDate - 2) Mod 7) * 2 + 1 ここで、印刷の最初のページを設定していたのですね! そして、その下で2ページ目を指定していたんですね。 見ただけでは、全くわかりませんでした… (^_^;) 本当に色々お世話になりました。 (takaz) 2015/02/09(月) 12:47
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.