[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『その週のメンバー一覧を印刷したい』(kaoru)
毎月のシートが12ヵ月分あります。
表は1日1表で縦に一月10〜最大25日分程度の表が縦にならんでいます。 最初の行のB列に日付が入っており、その行を含めて1表30行です 日付を参照しながら1週間分のA列からE列を横に印刷したいのです。 可能であれば、今週、来週と指定できれば嬉しいのですが 可能でしょうか? 説明が下手ですいません。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
半角数字で1月〜12月のシートがあり、シートのB列の表の日付は 今年の日付がある前提です。
Sub Sample() Dim 開始日, 終了日, 印刷日 開始日 = CDate(InputBox("開始日を入力してください。", , Format(Date, "YYYY/MM/DD"))) 終了日 = CDate(InputBox("終了日を入力してください。", , Format(DateAdd("D", 6, 開始日), "YYYY/MM/DD")))
Dim 印刷シート As Worksheet Dim シート名 As String Dim 印刷済み As Boolean Dim 行 As Long For 印刷日 = 開始日 To 終了日 シート名 = Month(印刷日) & "月" On Error Resume Next Set 印刷シート = Worksheets(シート名) On Error GoTo 0
If 印刷シート Is Nothing Then If MsgBox("[" & シート名 & "] シートがありません。" & vbNewLine & "印刷を続けますか?", vbYesNo) = vbNo Then Exit Sub End If
印刷済み = False For 行 = 1 To 印刷シート.Cells(Rows.Count, "B").End(xlUp).Row If IsDate(Cells(行, "B").Value) = True Then If CDate(Cells(行, "B").Value) = 印刷日 Then With 印刷シート .PageSetup.PrintArea = Cells(行, "A").Resize(30, 5).AddressLocal '// 印刷範囲指定 .PageSetup.Orientation = xlLandscape '// 用紙方向指定 .PrintPreview '// 印刷(プレビュー): 問題なければ .PrintPreview を .PrintOut に変更 End With 印刷済み = True Exit For End If End If Next If 印刷済み = False Then If MsgBox("[" & Format(印刷日, "YYYY/MM/DD") & "] の表がありません", vbYesNo) = vbNo Then Exit Sub End If Next End Sub
マクロの印刷設定の調整は、下記が参考になるかと思います。 http://www.atmarkit.co.jp/ait/articles/1403/25/news038.html http://www.asahi-net.or.jp/~zn3y-ngi/YNxv20011.html
(Mook) 2015/03/09(月) 17:32
ありがとうございます。 マクロ、きちんと動いているようです。 しかし、ご想像の通り、残りは印刷設定です。 できればA4横1枚に全体を縮小して印刷したいのですが 教えて頂いたサイトを見なおして 何とか頑張ってみます。 (そもそも可能なのかなぁ…) 頑張りまーす (kaoru) 2015/03/10(火) 05:17
途中経過ですが… .PageSetup.Zoom = 80 .PageSetup.PaperSize = xlPaperA3 などやってみましたが、 1週分を横に並べて1週を1ページにしたいのですが 1日分1ページが変更できません えぇーと… もう少し、解読してみます (kaoru) 2015/03/10(火) 06:25
> できればA4横1枚に全体を縮小して印刷したいのですが 拡大率は縦横や1ページフィットなどもあるので、そのあたりが使えると思います。
> 1週分を横に並べて1週を1ページにしたいのですが やりたい操作は手動でやろうとした場合、どのような操作になるのでしょうか。
複数の表を横に並べてというと、現在のシート構成ではできないので、印刷用のシートを 用意して、そこにコピーしてから印刷というように、作業の変更が必要な気がします。 (Mook) 2015/03/10(火) 07:57
ながくなってしまいますが、4月6日の週を 「印刷用シート」に手動でコピーし、A3横で 横幅を紙幅に合わせて印刷した場合の物です Sub Macro1() Range("A62:C91").Select Selection.Copy Sheets("印刷用シート").Select ActiveSheet.Paste Sheets("4月").Select Range("A92:C121").Select Application.CutCopyMode = False Selection.Copy Sheets("印刷用シート").Select Range("D1").Select ActiveSheet.Paste Sheets("4月").Select Range("A122:C151").Select Application.CutCopyMode = False Selection.Copy Sheets("印刷用シート").Select Range("G1").Select ActiveSheet.Paste Sheets("4月").Select Range("A152:C211").Select Application.CutCopyMode = False Selection.Copy Sheets("印刷用シート").Select Range("J1").Select ActiveSheet.Paste Application.CutCopyMode = False Application.PrintCommunication = False With ActiveSheet.PageSetup .PrintTitleRows = "" .PrintTitleColumns = "" End With Application.PrintCommunication = True ActiveSheet.PageSetup.PrintArea = "" Application.PrintCommunication = False With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0.7) .RightMargin = Application.InchesToPoints(0.7) .TopMargin = Application.InchesToPoints(0.75) .BottomMargin = Application.InchesToPoints(0.75) .HeaderMargin = Application.InchesToPoints(0.3) .FooterMargin = Application.InchesToPoints(0.3) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .CenterHorizontally = False .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA3 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 100 .PrintErrors = xlPrintErrorsDisplayed .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = False .ScaleWithDocHeaderFooter = True .AlignMarginsHeaderFooter = True .EvenPage.LeftHeader.Text = "" .EvenPage.CenterHeader.Text = "" .EvenPage.RightHeader.Text = "" .EvenPage.LeftFooter.Text = "" .EvenPage.CenterFooter.Text = "" .EvenPage.RightFooter.Text = "" .FirstPage.LeftHeader.Text = "" .FirstPage.CenterHeader.Text = "" .FirstPage.RightHeader.Text = "" .FirstPage.LeftFooter.Text = "" .FirstPage.CenterFooter.Text = "" .FirstPage.RightFooter.Text = "" End With Application.PrintCommunication = True ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False End Sub よろしくお願いします。 (kaoru) 2015/03/10(火) 13:21
まぁわかるといえばわかるのですが、言葉でも説明が欲しいでしょうか。 一週間といっていますが、マクロは4日分のようなので、そこはコード上は定数にしました。
一応のサンプルですので、細かい調整は試行錯誤してみてください。 大丈夫とは思いますが、標準モジュールに置く前提です。
Option Explicit
'//------------------------------------------ Const 印刷シート名 = "印刷シート" '//【設定】 Const 印刷日数 = 6 '//【設定】 印刷シートのデータ数
'//------------------------------------------ Const データ列数 = 3 '//【設定】 Const データ行数 = 30 '//【設定】
'//------------------------------------------ Sub 期間印刷() '//------------------------------------------ Dim 開始日 As Date 開始日 = CDate(InputBox("開始日を入力してください。", , Format(Date + ((9 - Weekday(Date)) Mod 7), "YYYY/MM/DD")))
Dim 終了日 As Date 終了日 = CDate(Format(DateAdd("D", 印刷日数 - 1, 開始日), "YYYY/MM/DD"))
If MsgBox(Format(開始日, "YYYY/MM/DD(aaa)") & "〜" & Format(終了日, "YYYY/MM/DD(aaa)") & " を印刷しますか?", vbYesNo) = vbNo Then Exit Sub
Dim 印刷日 As Date Dim 位置 As Long
位置 = 1 For 印刷日 = 開始日 To 終了日 If データ設定(印刷日, 位置) = False Then Exit Sub Next
If 位置 = 1 Then MsgBox "印刷するデータがありません" Exit Sub End If
印刷実行 End Sub
'//------------------------------------------ Function データ設定(対象日 As Date, ByRef 印刷位置 As Long) As Boolean '//------------------------------------------ '// 印刷開始位置は A1 を決め打ち '//------------------------------------------ Dim データシート名 As String Dim データWS As Worksheet
Dim 印刷WS As Worksheet Set 印刷WS = Worksheets(印刷シート名)
データシート名 = Month(対象日) & "月" On Error Resume Next Set データWS = Worksheets(データシート名) On Error GoTo 0
If データWS Is Nothing Then If MsgBox("[" & データシート名 & "] シートがありません。" & vbNewLine & "印刷を続けますか?", vbYesNo) = vbNo Then データ設定 = False Else データ設定 = True End If Exit Function End If
Dim 行 As Long For 行 = 1 To データWS.Cells(Rows.Count, "B").End(xlUp).Row If IsDate(データWS.Cells(行, "B").Value) = True Then If CDate(データWS.Cells(行, "B").Value) = 対象日 Then If 印刷位置 = 1 Then 印刷WS.Range("A1").Resize(データ行数, データ列数 * 印刷日数).ClearContents End If
データWS.Cells(行, "A").Resize(データ行数, データ列数).Copy 印刷WS.Range("A1").Offset(0, (印刷位置 - 1) * データ列数).Resize(データ行数, データ列数) 印刷位置 = 印刷位置 + 1 データ設定 = True Exit Function End If End If Next
If MsgBox("[" & Format(対象日, "YYYY/MM/DD(aaa)") & "] の表がありません" & vbNewLine & "印刷を続けますか?", vbYesNo, vbYesNo) = vbNo Then データ設定 = False Else データ設定 = True End If End Function
'//------------------------------------------ Private Sub 印刷実行() '//------------------------------------------ Const 等倍印刷 = False '//【設定】True ・・・ 等倍 / False ・・・ 1ページ印刷
Dim 印刷WS As Worksheet Set 印刷WS = Worksheets(印刷シート名)
'// 印刷設定 Application.PrintCommunication = False '// EXCEL 2010 以降のみ With 印刷WS.PageSetup .PrintArea = Range("A1").Resize(データ行数, データ列数 * 印刷日数).AddressLocal .LeftMargin = Application.InchesToPoints(0.7) .RightMargin = Application.InchesToPoints(0.7) .TopMargin = Application.InchesToPoints(0.75) .BottomMargin = Application.InchesToPoints(0.75) .HeaderMargin = Application.InchesToPoints(0.3) .FooterMargin = Application.InchesToPoints(0.3)
.PrintComments = xlPrintNoComments .Orientation = xlLandscape '// 印刷用紙 横指定 .PaperSize = xlPaperA3 '// A3 ?
If 等倍印刷 = True Then .Zoom = 100 Else '// 全体を1ページに印刷 .FitToPagesTall = 1 .FitToPagesWide = 1 End If
.PrintErrors = xlPrintErrorsDisplayed .ScaleWithDocHeaderFooter = True .AlignMarginsHeaderFooter = True End With Application.PrintCommunication = True
印刷WS.PrintPreview ' 印刷WS.PrintOut Copies:=1 '// 印刷実行 End Sub
(Mook) 2015/03/10(火) 15:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.