• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA(初心者)印刷ループについて)

EXCEL VBA初心者のための印刷ループの改善方法

このQ&Aのポイント
  • EXCEL VBA初心者の方が作成した印刷ループのVBAを改善する方法について解説します。
  • 問題点として、開始番号と終了番号が空白の場合や開始番号が終了番号より大きい場合の処理が不足しています。
  • これらの問題点を改善するためのVBAの修正方法について詳しく説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 二つの条件の内、(2)は、修正すればよいと思います。 Sub 連続印刷R()   Dim x As Variant   Dim y As Variant   Dim i As Integer   Dim t As Integer   Dim msg As String   Dim tp As Variant      On Error Resume Next   tp = ExecuteExcel4Macro("GET.DOCUMENT(50)")   On Error GoTo 0      msg = "ページの番号を入力してください"   x = Application.InputBox("先頭" & msg, Type:=2)   If x = "" Or VarType(x) = vbBoolean Then Exit Sub   x = CInt(x)   y = Application.InputBox("最終" & msg, Type:=2)   If y = "" Or VarType(y) = vbBoolean Then Exit Sub   y = CInt(y)   If x > y Then     t = y: y = x: x = t   End If   If x > tp Then x = tp '最終ページ修正   If y > tp Then y = tp '最終ページ修正      If MsgBox(x & "ページから" & y & "ページを印刷します。" & vbCr & _     "よろしいですか?(全" & tp & "ページの内)", vbInformation + vbOKCancel) = vbCancel Then     Exit Sub   End If   With Worksheets("1")     For i = x To y       .Range("B1").Value = i '変数 i を代入       .PrintOut From:=i, To:=i ', Preview:=True     Next i   End With End Sub   なお、InputBox メソッドの入力に0 はありえませんが、入れ忘れがありますから、変数で取ります。ページ数を逆に入れた場合は、入れ替えればよいですし、全ページ数の入れ間違いは、自動で修正すればよいです。また、最終的に、一度、対話形式で印刷ページをチェックすればよいです。まあ、ループは不要というよりも、ページ番号をセルに出すなら、ループはやむをえないです。

その他の回答 (2)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

ループは必要ないと思います #1さんの回答を踏まえて 修正しました Sub 連続印刷() Dim x As String Dim y As String x = Application.InputBox( _ prompt:="先頭ページの番号を入力してください") y = Application.InputBox( _ prompt:="最終ページの番号を入力してください") line: If x = "" Or y = "" Then Exit Sub If Not (IsNumeric(x) Or IsNumeric(y)) Then Exit Sub If x > y Then Exit Sub Worksheets("1").PrintOut from:=CInt(x), to:=CInt(y) End Sub 変更点 変数の宣言は、InputBoxの戻り値が文字列なので文字列(String)に変更 変数が空白なら処理中止 変数が数値でなければ処理中止 終了より開始が大きければ処理中止 ループ処理を削除し、印刷の設定で開始、終了ページを設定 その際、変数を数値化すると共に小数点以下が合った場合に切り捨てする 以上参考にしてください

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

例えばxが数値であるかどうかは  If IsNumeric(x) Then ~  で判断できます。 同様に、xが空白かどうかは x = ""、 x、yの大小比較は x < y などを条件として If 文で分岐すれば良いでしょう。 ご質問内容とは関係ないのでうよけいなおせっかいではありますが、現状で正しく値を入れたとして、予定通りの動作になっていますか? 確認してませんけれど、同じシートが何枚もプリントされるみたいだけど…

関連するQ&A