[[20210915115814]] 『日数分のシート印刷』(aki) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日数分のシート印刷』(aki)

こんにちは、よろしくお願いします。
印刷についてご教示いただきたく参りました。

 DATE/1/2/3・・・28/29/30/31/name/rank/number
とシートが35枚あります。
1〜31は月の日付を意味しており、その他には必要なデータが入っております。

 やりたいことは
例えば9月なら1〜30までを選択して印刷、10月なら1〜31までを選択して印刷したいです。
今までは、ベタたのですが月に関わらず31枚印刷し

 Sub まとめ印刷()

    Sheets(Array("1", "2",〜 "31")).Select

 End Sub

 Sub 1枚ずつ印刷()

    Sheets("1").Select
    ActiveWindow.SelectedSheets.PrintOut
    Sheets("2").Select
   ActiveWindow.SelectedSheets.PrintOut
 〜
    Sheets("31").Select
   ActiveWindow.SelectedSheets.PrintOut

 End Sub

 でやっておりましたが、もっとスムーズにできればと思いまして、、、
まとめ印刷では、プリンターの設定で両面印刷になってしまうので、1枚ずつ印刷をやりたいと思っております。ご教示よろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


印刷するとき、何月なのかはどのようにわかるのですか。
翌月分を印刷するのでしょうか?
(わからん) 2021/09/15(水) 12:16

わからんさま
早急にありがとうございます。
情報提供不足で申しわけありません。

 DATEのシートに希望月を入力する場所があります。(DATEのc11です)
基本的には、DATE(year(c11),month(c11)+1,1)となっており翌月を印刷する形です。

(aki) 2021/09/15(水) 12:32


エラー処理等は別ですが、基本的には1日から月末日までをループ処理すればいいのでは?
    Sub さんぷる()
        Dim 日付 As Date
        Dim i As Long

        日付 = InputBox("年月日?")

        For i = 1 To Day(DateAdd("m", 1, Format(日付, "yyyy/mm/01")) - 1)
            Worksheets(i & "").PrintOut
        Next i
    End Sub

(もこな2) 2021/09/15(水) 12:46


すでに回答がついていますが、C11の月を印刷ということならこんな感じで。

 Sub シート印刷()
    Dim d As Long
    For d = 1 To Day(WorksheetFunction.EoMonth(Range("C11"), 0))
        Worksheets("" & d).PrintOut
    Next
 End Sub

(わからん) 2021/09/15(水) 13:02


こんばんは
もこな2さま
わからんさま ありがとうございます。

 小生プリンターの環境がないので
各々

    Sub さんぷる()
        Dim 日付 As Date
        Dim i As Long
        日付 = InputBox("年月日?")
        For i = 1 To Day(DateAdd("m", 1, Format(日付, "yyyy/mm/01")) - 1)
            Worksheets(i & "").PrintPreview
        Next i
    End Sub

 Sub シート印刷()
    Dim d As Long
    For d = 1 To Day(WorksheetFunction.EoMonth(Range("C11"), 0))
        Worksheets("" & d).PrintPreview
    Next
 End Sub

 で実施しましたがどちらともエラーになってしまいました。
さんぷるでは、2021年10月1日、2021/10/01、20211001と入力しましたがNGでした。
改めて勉強し検証します。お忙しいところありがとうございます。
(aki) 2021/09/15(水) 19:32

>どちらともエラーになってしまいました。
どこでどのようなエラーが出ましたか?

また、エラーが発生したとき「i」には何が格納されていましたか?
さらに、アクティブブックにその名前のシートは、間違いなく存在していましたか?

(もこな2) 2021/09/15(水) 20:02


もこな2さまありがとうございます。

 実行エラー9が表示されまして、iには1が格納されてました。
また、シート名は半角で1と入力してあり、シートも存在しております。
連絡ありがとうございます。自分でも探ります。
(aki) 2021/09/15(水) 21:58

もこな2さまありがとうございます。2

 インデックスが有効範囲にありません。実行エラー9が表示されました。
iには1が格納されてました。
また、シート名は半角で1と入力してあり、シートも存在しております。
連絡ありがとうございます。自分でも探ります。
2度書きしてすみません。
(aki) 2021/09/15(水) 22:00

こんばんは
もこな2さま

    Sub さんぷる()
        Dim 日付 As Date
        Dim i As Long
        日付 = InputBox("年月日?")
        For i = 1 To Day(DateAdd("m", 2, Format(日付, "yyyy/mm/01")) - 1)
            Worksheets(i).PrintPreview
        Next i
    End Sub

 Sub シート印刷()
    Dim d As Long
    For d = 2 To Day(WorksheetFunction.EoMonth(Range("C11")-1, 0))
        Worksheets(d).PrintPreview
    Next
 End Sub

 で動きました。ありがとうございます。
後日プリンタ環境で試して見たいと思います。
ご教示ありがとうございます。
(aki) 2021/09/15(水) 22:13

謎ですね。

これで動くとのことですが、別の月でも試してみてください。

 Sub シート印刷()
    Dim d As Long
    For d = 2 To Day(WorksheetFunction.EoMonth(Range("C11")-1, 0))
        Worksheets(d).PrintPreview
    Next
 End Sub

C11セルが「2021/9/1」だとしたら、dは2〜31になるのでいいですが、
C11セルが「2021/10/1」だとしたら、dは2〜30になるので29日までしか印刷されません。

修正するなら、こうですかね。

    For d = 2 To Day(WorksheetFunction.EoMonth(Range("C11"), 0)) + 1

(わからん) 2021/09/16(木) 08:59


編集がかぶりましたがそのまま。

■1
話がよくみえないです。
"どこで"エラーが出るのかも重要な話ですが、「実行時エラー9 インデックスが有効範囲にありません」ならば、対象のシートが存在しないというのが一番怪しいところです。

よって、エラーが出ると仰ってるものと動いたと仰っているものの違いは、当月を対象にするか翌月を対象にするかの違いでしかないようなので、「i」や「d」が1の時に「実行時エラー9 インデックスが有効範囲にありません」が出るのであれば、対象を翌月にしたところでエラーは解消しなさそうですが・・

■2
↓について、少々わかりにくいですが、例えば【2021年10月】を対象にしたいときは、セルになんと入力するのですか?

 DATEのシートに希望月を入力する場所があります。(DATEのc11です)
基本的には、DATE(year(c11),month(c11)+1,1)となっており翌月を印刷する形です。

もしも、「2021/10/1」のように対象月の【日付】を入力するということであれば↓のようなアプローチも有効だとおもいます。

    Sub 別案()
        Dim Mydate As Date

        With Worksheets("DATE").Range("C11")
            For Mydate = DateSerial(Year(.Value), Month(.Value), 1) To DateSerial(Year(.Value), Month(.Value) + 1, 0)
                Worksheets(Format(Mydate, "d")).PrintPreview
            Next
        End With
    End Sub

(もこな2 ) 2021/09/16(木) 09:01


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.