[[20150702153925]] 『入力行に応じて、印刷するシートを増やしたい』(ハムヲ) ページの最後に飛ぶ

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

 

『入力行に応じて、印刷するシートを増やしたい』(ハムヲ)

はじめて質問をさせていただきます。
至らない部分があるかもしれませんが、お許しください。

sheet1で入力フォームを作成しており、1行から20行まで変動で入力をします。

1行から5行まで入力→sheet2を印刷
1行から10行まで入力→sheet1とsheet2を印刷
1行から15行まで入力→sheet1とsheet2とsheet3を印刷
1行から20行まで入力→sheet1とsheet2とsheet3とsheet4を印刷

上記のとおりに印刷を行いたいのですが、どのようにしたらよいでしょうか?

< 使用 Excel:Excel2010、使用 OS:unknown >


 VBAになりますが。

 Sub Test()
    Dim v As Variant

    With Sheets("Sheet1").UsedRange

        Select Case .Rows.Count
            Case 1 To 5
                v = Array("Sheet1")
            Case 6 To 10
                v = Array("Sheet1", "Sheet2")
            Case 11 To 15
                v = Array("Sheet1", "Sheet2", "Sheet3")
            Case Else
                v = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")
        End Select

        Sheets(v).PrintOut

    End With

 End Sub

(β) 2015/07/02(木) 20:22


βさま
お返事ありがとうございます。
テストで実行したところ、きちんと出力できました。
ところが、実際のシートに当てはめてみたところ

 Sheets(v).PrintOut

この部分でエラーがでてしまいました…。

入力して判断するセルはB1〜B20になります。
入力状況により、1行目と3行目を入力する場合もあり空欄の行が発生することもあります。
この場合は判断する部分をシートではなく、セルで判断しなくてはならなくてはいけないのでしょうか。
教えてばかりで申し訳ありません。
どうぞよろしくお願いいたします。

(ハムヲ) 2015/07/03(金) 14:15


 途中に空欄がでてもOKです。
 1行目と3行目に入力があり、2行目が空欄の場合も、マクロで取得する行数は3になりますので。

 ただし、B1:B20の範囲以外に値(適用とか備考)があった場合、それらも含めての行数になりますので
 シートレイアウトによっては、具合が悪いこともあるでしょうね。

 なので、確実な B1:B20 のみをチェックして判断するように書き替えることは可能ですが

 >>実際のシートに当てはめてみたところ  Sheets(v).PrintOut この部分でエラーがでてしまいました…。

 ここが気になります。なんというエラーでしたか?

(β) 2015/07/03(金) 14:25


 もしかして、エラー 9 インデックスエラー でしたか?
 そうであれば、私がコードで使っている "Sheet1" や "Sheet2" は 「シート名」です。
 実際のブックのシート名が、それらとは異なるなら、指定シートがないよ ということで
 インデックスエラーになりますけど?

(β) 2015/07/03(金) 16:41


 エラーは気になりますが、以下。

 Sub Test2()
    Dim v As Variant

    With Sheets("Sheet1").UsedRange

        Select Case .Range("B21").End(xlUp).Row     'B1:B20"の中の最終データ入力行
            Case 1 To 5
                v = Array("Sheet1")
            Case 6 To 10
                v = Array("Sheet1", "Sheet2")
            Case 11 To 15
                v = Array("Sheet1", "Sheet2", "Sheet3")
            Case Else
                v = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")
        End Select

        Sheets(v).PrintOut

    End With

 End Sub

(β) 2015/07/03(金) 16:51


βさま

お返事ありがとうございます。
シート名を変更し、再度実行したところうまくできました。
ですが、出力が大量になりました…。
出力の作業を何度も繰り返しているようです。
指定しているシートの他にもたくさんのシートが存在するからでしょうか…?
それとも引用している値がよくないのでしょうか…?
土曜日、日曜日は確認することができないため
月曜日に改めて教えていただいたもので作業したいとおもいます。
確認でき次第、またこちらに書かせていただきます。
(ハムヲ) 2015/07/03(金) 18:20


 >>出力の作業を何度も繰り返しているようです。 

 それは、ありえないですが、もしかして、このコードの中身を シートモジュールの Changeイベントあたりに書いたとか?

(β) 2015/07/03(金) 18:24


コメント返信:

[ 一覧(最新更新順) ]


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