• 締切済み

エクセルのデータを定型用紙に印刷 

エクセルのデータシートの各行(1件づつ)を 一枚づつ定型の見積り書に印刷しようと思います。 sheet1が定型の見積書 sheet2がデータシートです。 sheet1のセル(12,3)にsheet2のセル(2,4),(3,4),(4,4) を印刷するには Sub 見積書印刷() Dim i As Long With Worksheets("sheet1") For i = 2 To 4 .Cells(12, 3).Value = Worksheets("sheet2").Cells(i, 4) .PrintOut Next i End With End Sub で、 できました。 データがsheet2でなく他のBOOKのsheetの場合 どのような式になるか 教えていただけませんか、お願いします。

みんなの回答

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.5

>印刷は終了しましたが、ブック材料は閉じていません。 >then exit sub がマズイのでしょうが >どう直したらよいか教えていただけませんか。 #4でも書いていますが、 >Workbooks("C:\Documents and Settings\Toshiba\My Documents\材料.xls").Close’←処理後、ブックを閉じる必要がある場合 これを書いてください。 >Workbooks.Open "C:\Documents and Settings\Toshiba\My Documents\材料.xls" は Worksheets("sheet1")とは関係ないので、 「With Worksheets("sheet1")」より前に書いて下さい。 >If Workbooks("材料").Worksheets("sheet1").Cells(i, 1) = "" Then Exit Sub >.Cells(12, 3).Value = Workbooks("材料").Worksheets("sheet1").Cells(i, 4) >.PrintOut ・・(中略)・・ >Workbooks("C:\Documents and Settings\Toshiba\My Documents\材料.xls").Close この条件では「ブック『材料』のシート『sheet1』のセル(i, 1)が空だった場合、【Subステートメントを終わらせる。(「その後に書かれている処理を実行しないで『End Sub』する」っと考えても構いません。)】という意味です。 ですので、もしブック『材料』のシート『sheet1』のセル(i, 1)が空だった場合は「その後に書かれている処理を実行せずにステートメントを終了させます。」 これのせいでブック材料を閉じる処理を実行する前にステートメントから抜けてしまうんです。 この場合の適当な書き方としては Sub 見積書印刷() Dim i As Long With Worksheets("sheet1") Workbooks.Open "C:\Documents and Settings\Toshiba\My Documents\材料.xls" For i = 2 To 4 If Workbooks("材料.xls").Worksheets("sheet1").Cells(i, 1) = "" Then Workbooks("C:\Documents and Settings\Toshiba\My Documents\材料.xls").Close  '←先にブックを閉じる。 Exit Sub  '←次にステートメントを抜ける .Cells(12, 3).Value = Workbooks("材料.xls").Worksheets("sheet1").Cells(i, 4) .PrintOut Next i End With Workbooks("C:\Documents and Settings\Toshiba\My Documents\材料.xls").Close  '←必ずしもif文に引っかからない場合はこちらにも書きます。 End Sub

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.4

>With Worksheets("sheet1") >For i = 2 To 4 >Workbooks.Open "C:\Documents and Settings\Toshiba\My Documents\材料.xls" >.Cells(12, 3).Value = Workbooks("材料").Worksheets>("sheet1").Cells(i, 4) .PrintOut >Next i >End With これだとエラーの原因になるのでやめたほうがいいです。(場合によっては正常に動作しないのでは?) ブックを開くのは一回で良いはずなのに、ループ回数分開く処理を走らせています。 これはエラーの原因になったり、正常動作でもマクロが非常に重くなったりします。(Open等の動作は重くなる原因の一つです。) Workbooks.Open "C:\Documents and Settings\Toshiba\My Documents\材料.xls"’←開く処理は一回で良い With Worksheets("sheet1") For i = 2 To 4 .Cells(12, 3).Value = Workbooks("材料.xls").Worksheets("sheet1").Cells(i, 4).PrintOut'すみません。私も拡張子のことをすっかり忘れていました。 Next i End With Workbooks("C:\Documents and Settings\Toshiba\My Documents\材料.xls").Close’←処理後、ブックを閉じる必要がある場合

sasakaiyo
質問者

お礼

再度ありがとうございます。 データが無いところで終了させるため If Workbooks("材料").Worksheets("sheet1").Cells(i, 1) = "" Then Exit Sub を入れてみました。 印刷は終了しましたが、ブック材料は閉じていません。 then exit sub がマズイのでしょうが どう直したらよいか教えていただけませんか。 Sub 見積書印刷() Dim i As Long With Worksheets("sheet1") Workbooks.Open "C:\Documents and Settings\Toshiba\My Documents\材料.xls" For i = 2 To 4 If Workbooks("材料").Worksheets("sheet1").Cells(i, 1) = "" Then Exit Sub .Cells(12, 3).Value = Workbooks("材料").Worksheets("sheet1").Cells(i, 4) .PrintOut Next i End With Workbooks("C:\Documents and Settings\Toshiba\My Documents\材料.xls").Close End Sub

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.3

拡張子はちゃんとつけるのが良いと思う >.Cells(12, 3).Value = Workbooks("材料").Worksheets("sheet1").Cells(i, 4) "材料.xls"

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.2

#1です。 他に上手いやり方があるかもしれませんが、 Workbooks.Open "C:\WorkbookName.xls" でアドレス指定してブックを開いてからでないとダメだと思います。 それでもエラーが出る場合は、そのブック・指定シート共にアクティブにしてから >.Cells(12, 3).Value = Workbooks("材料").Worksheets("sheet1").Cells(i, 4) これを実行してみてください。

sasakaiyo
質問者

お礼

ありがとうございます。 Workbooks.Open "C:\Documents and Settings\Toshiba\My Documents\材料.xls" で解決しました。 みようみまねで作っているもので・・・ 大変助かりました。 Sub 見積書印刷() Dim i As Long With Worksheets("sheet1") For i = 2 To 4 Workbooks.Open "C:\Documents and Settings\Toshiba\My Documents\材料.xls" .Cells(12, 3).Value = Workbooks("材料").Worksheets("sheet1").Cells(i, 4) .PrintOut Next i End With End Sub

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.1

>.Cells(12, 3).Value = Worksheets("sheet2").Cells(i, 4) これの >Worksheets("sheet2").Cells(i, 4) をWorkbooks("BookName").Worksheets("SheetName").Cells(Address) で出来ると思います。

sasakaiyo
質問者

お礼

ありがとうございます。 インデックスが有効範囲にありません。とのエラーメッセージ になりました。 .Cells(12, 3).Value = Workbooks("材料").Worksheets("sheet1").Cells(i, 4) どこがいけないのでしょうか?

専門家に質問してみよう