重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

はじめてのVBAで本を読んでも使い方がわからないので教えてほしいのですが
シート1にこのような表を作成して
  A    B   
1山田   500
2伊藤 20000
3佐藤    50



シート2に
   A   B    C
1    請求書

3 山田
4 500円

というような請求書を印刷していくVBAを作りたいのですが人数については10人から300人とその時々で変化するのでデータがないときは
印刷もそこで終わりという風にしたいのですが、、、
よろしくお願いします。
エクセル2003 XPです。

A 回答 (3件)

Sub PrOutTest ()


Dim Ir as Long
with worksheets("シート2")
for Ir = 1 to worksheets("シート1").cells(65000, 1).end(xlup).row
.cells(3, 1).Value = worksheets("シート1").cells(Ir, 1)
.cells(4, 1).Value = worksheets("シート1").cells(Ir, 2)
.PrintOut
next Ir
end with
end sub

4行目後半のworksheets("シート1").cells(65000, 1).end(xlup).row
でシート1の入力されている最終行を求めています。
for to next で 1行目から最終行まで同じ処理を繰り返しています。
最終行の処理が終わるとマクロを終了します。

手元にエクセルがないので確認していませんが、コピーしていただければたぶん動くと思います。
シート1が"sheet1"であれば訂正してください。
    • good
    • 0
この回答へのお礼

ありがとうございます
助かりました参考にさせていただきます。

お礼日時:2007/09/26 22:38

No1 です。


セルA4に"円"がついてました。6行目を

.cells(4, 1).Value = worksheets("シート1").cells(Ir, 2).Value & "円"

と訂正いたします。
    • good
    • 0

印刷するループの中で


if cells(i,1)="" then exit sub
のように終了条件を入れてあげればデータがないところで終了させることができます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!