[[20120824090810]] 『差し込み印刷の範囲の書き方の省略』(龍) ページの最後に飛ぶ

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

 

『差し込み印刷の範囲の書き方の省略』(龍)

お世話になります。
差し込み印刷で、差し込みの範囲を指定しているのですが、
1個の注文書は、15行差し込むところがあり、列も、B列からI列くらいあるため、
下記のようにセル一個づつ記載をしているとコードが膨大になってしまいます。
下の記載を上手く省略して書くような方法はありますでしょうか?
注文書の差し込みをする行は、下記の通り、15行を1セットとしております。
ご確認をお願いします。

※後半の部分<r.Offset(0, 1).Value>は、差し込み用データの専門シートがあり、
そこのデータを注文書シートに差し込んでいます。

Worksheets("注文書").Range("B20").Value = r.Offset(0, 1).Value
Worksheets("注文書").Range("B21").Value = r.Offset(1, 1).Value
Worksheets("注文書").Range("B22").Value = r.Offset(2, 1).Value
Worksheets("注文書").Range("B23").Value = r.Offset(3, 1).Value
Worksheets("注文書").Range("B24").Value = r.Offset(4, 1).Value
Worksheets("注文書").Range("B25").Value = r.Offset(5, 1).Value
Worksheets("注文書").Range("B26").Value = r.Offset(6, 1).Value
Worksheets("注文書").Range("B27").Value = r.Offset(7, 1).Value
Worksheets("注文書").Range("B28").Value = r.Offset(8, 1).Value
Worksheets("注文書").Range("B29").Value = r.Offset(9, 1).Value
Worksheets("注文書").Range("B30").Value = r.Offset(10, 1).Value
Worksheets("注文書").Range("B31").Value = r.Offset(11, 1).Value
Worksheets("注文書").Range("B32").Value = r.Offset(12, 1).Value
Worksheets("注文書").Range("B33").Value = r.Offset(13, 1).Value
Worksheets("注文書").Range("B34").Value = r.Offset(14, 1).Value

EXCEL2010
windows7


 試してないのでうまく動くかわかりませんが・・・

 For i = 20 To 34
    Worksheets("注文書").Cells(i, 2).Value = r.Offset(i - 20, 1).Value
 Next

 (se_9)

ご提示のコードに限れば、次のようにまとめることが出来ます。
Range("B20:B34").Value = r.Offset(0, 1).Resize(15, 1).Value

(みやほりん)


se_9様 みやほりん様
ありがとうございます。
みやほりん様の下記、コードで試してみました。
ところ、上手く行きました。
2枚目以降も下記の通り上手くいきましたが、一つ疑問が出てきました。
1枚目だけは、Resize(15,で上手くいきましたが、2枚目以降は、29、44、59でうまくいっています。
1枚目も、普通に考えれば、0から14で15行ですから、Resize(14・・だと思い、
14に置き換えてみましたが、NAのエラー表示が出てしまいました。

Range("B20:B34").Value = r.Offset(0, 1).Resize(15, 1).Value
Range("B54:B68").Value = r.Offset(15, 1).Resize(29, 1).Value
Range("B88:B102").Value = r.Offset(30, 1).Resize(44, 1).Value
Range("B122:B136").Value = r.Offset(45, 1).Resize(59, 1).Value



>0から14で15行ですから、Resize(14・・だと思い、
15行だから、 Resize(15・・でしょう。
RangeObject.Resize(15, 1) は「RangeObjectを15行1列のサイズで再取得する」
ということですから。
Resize(0, 0)なんていうのはできません。
この点、Offsetプロパティや配列の開始値と混同してるような気がします。

>2枚目以降は、29、44、59でうまくいっています。
結果オーライなんですが、転記先よりも転記元のセル範囲が大きくなるように
最初から書いておくのは、なんとなく落ち着かない雰囲気のコードです。
(みやほりん)


コメント返信:

[ 一覧(最新更新順) ]


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