• ベストアンサー

EXCELで選択した番号のものだけ印刷する

Sheet(1)に一覧表形式で伝票の内容を作成してします。 A列    B列  C列 伝票番号  科目  支払金額 Sheet(2)にSheet(1)の内容を伝票形式で印刷する為の印刷形式を作成しました。RANGE("A1")に入力された伝票番号に従って印刷します。VLOOKUPで参照しています。 Sheet(3)には、Sheet(2)で印刷する為の伝票番号入力セルと、印刷内容確認の為の表示部分と印刷のボタンを作りました。 現状は伝票番号を1個入力し、印刷ボタンを押すと言う作業を繰り返しています。例えば任意の1個~10個まとめて入力し一括印刷する方法を教えて下さい。 要するに伝票1枚の印刷の時もあれば10枚の時もあるという事です。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

#1,2のmshr1962です。 If文で除外すればOKです。 Sub Macro1() Dim X As Integer For X = 4 To 13 If Worksheets("Sheet(3)").Range("B" & X) <> "" Then Worksheets("Sheet(1)").Range("A1") = Worksheets("Sheet(3)").Range("B" & X) '印刷のマクロ End If Next End Sub

dan50
質問者

お礼

再度のご指導ありがとうございました。 完璧です。すべてうまくいきました。 そうかここで If...Then で判別させれば良かったのかと関心しました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

もう既に答えが出てしまってから言うのもと思いますが 良ければ、(1)-(4)の補足と私案(5)の批評をお願いします。 (1)Sheet1が「一覧表形式で伝票の内容」の原本ですよね。これは判ります。伝票は通常は1回伝票を印刷すると 仕事は済むと思います。どこの行まで伝票印刷が済んだと言うのはどうするのでしょうか。 (2)Sheet2は伝票イメージそのものですね。 そして、伝票番号でもって、科目、支払金額をVLOOKUP で参照するもわかります。伝票番号の指定は、Sheet3ですか。普通はSheet2に伝票番号を入れ、他の項目をVLOOKUP で参照し、印刷するを繰り返すかなと思いましたが。 (3)は伝票番号の指定とその伝票番号のSheet1の科目 と支払金額をSheet2と同じ者を出しているのですか。 意味ありますかね。Sheet2で見えているのでは。 (4)>例えば任意の1個~10個まとめて入力し一括印刷する方法を教えて下さい。 Sheet1における印刷対象行数が可変でありたいのは判ります。これは手でXXからYYまでと、どこかに入力するのですか。 あるいはXX行から最終行までとXXだけを指定するのですか。 (5)ビジネスでエクセルを使うときは、VBAを使わないと 出来ないに近い事を私は何度も回答で述べています。 (記録や演算表を作るのは出来ますが) (6)私の提案 Sheet1に印刷済みサインの列を作る。印刷したら1を立てる。印刷日付で併用も可か。 Sheet2は今のまま。 Sheet3は廃止。 VBAで印刷未済みの行に付いて、最下行まで印刷する。 必要なら、XX行からYY行までを指定する仕組みにする。 内容は、骨子は For i=開始行 to 最終行(またはYY) Sheet2の項目セル=Sheet1の項目セル 伝票上の他項目を繰り返し(記述を何行か並べるだけ) Sheet1印刷済みサイン1 範囲.PrintOut Next i

dan50
質問者

補足

当初はSheet(1)の伝票一覧表の内容をSheet(3)で伝票内容を確認したうえで印刷処理をしたいと考えたので、Range("A1")に伝票番号を手動入力し、確認のうえ印刷マクロを使用していました。 ところが伝票枚数が多くなり、同時に一々内容を確認する必要も無くなって来ましたので、例えば10枚まとめて印刷するとか、時には1枚だけ印刷するとかと言った事が可能であれば行いたい。 但し、ブランクのものは印刷しない。 従って、ご指摘の通りSheet(3)を廃止し、Sheet(2)へ統合出来ると思います。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

#1のMshr1962です。同じシートで確認したのでシート名を変更し忘れてました。すみません。 Sub Macro1() Dim X As Integer For X = 4 To 13 Worksheets("Sheet(1)").Range("A1") = Worksheets("Sheet(3)").Range("B" & X) 印刷のマクロ Next End Sub 追記、前のままでエラーはしませんが、Xを変数宣言していなかったので記述を追加してます。

dan50
質問者

補足

ありがとうございます。 早速試して見ました。 伝票10枚すべてが印刷出来ました。 ところで、Sheet(3)のセルB4~B13には常に10個の番号が入力されるとは限りません。 1個の時もあれば5個の時もあります。 その場合、セルB4~B13の一部にブランクが生じます。 ブランクの場合Sheet(2)印刷で#N/Aの表示のまま印刷がなされます。 ブランクの部分の伝票は印刷しないと言った方法がとれるのでしょうか?

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

Sheet(3)に10個所の入力セルを用意する。 例 B4~B13 マクロの内容 Sub Macro1() For X = 4 To 13 Worksheets("Sheet1").Range("A1") = Worksheets("Sheet1").Range("B" & X) 印刷のマクロ Next End Sub 上記の様にFor ..To.. NextかDo Loopでセルの変更してください。

関連するQ&A

専門家に質問してみよう