[[20161102121445]] 『VBA 印刷範囲の追加について』(はむ太朗) ページの最後に飛ぶ

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

 

『VBA 印刷範囲の追加について』(はむ太朗)

お世話になっております。

Excel10で印刷範囲を設定するマクロを組んでいるのですが
例えば
ActiveSheet.PageSetup.PrintArea = Range("A5").Value
といった具合に セルA5 に印刷範囲を設定する為の値があったすると
そのA5の値が255文字を超えるとエラーが出ます。

そこで、A5の値を255文字に抑えるべく
A5、A6、A7に分けて、それらを“&”で結びつけても
ActiveSheet.PageSetup.PrintArea = Range("A5").Value & Range("A6").Value & Range("A7").Value
やはり結果が255文字を超えるとのことでエラーとなります。

さらに単純な発想で、
ActiveSheet.PageSetup.PrintArea = Range("A5").Value
ActiveSheet.PageSetup.PrintArea = Range("A6").Value
ActiveSheet.PageSetup.PrintArea = Range("A7").Value
とすると、A7の値の分しか印刷範囲が設定されません。

Excelの機能として、ページレイアウト>印刷範囲>には、
 ・印刷範囲の設定
 ・印刷範囲のクリア
 ・印刷範囲の追加
とあり、この「印刷範囲の追加」を使って手作業で範囲追加をすると
確かに追加されてます。

この手作業を“マクロ記録”で見れば糸口が見つかるかと思って試すも

Sub Macro2()

    ActiveSheet.PageSetup.PrintArea = _
        "$B$2:$F$16,$G$2:$J$21"
    ActiveSheet.PageSetup.PrintArea = _
        "$B$2:$F$16,$G$2:$J$21,$B$22:$E$30,$G$28:$H$34"
End Sub

となっており実際は、エリアが増えてるだけで、追加部分のみの追加ではない事が分かりました。

今は、対象シートを分割して印刷範囲の値の最大が255文字に納まる様に対応する方法をとってますが、
マクロで「追加範囲のみを追加する方法」もしくは「255文字を超える場合の打開策」はあるのでしょうか。
ちなみに個別の印刷範囲は、一定の行幅(行数)・列幅(列数)ではなく、
バラバラです。

ご教示の程、よろしくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


過去の例。[[20121120115412]]

文字長が1セルの最大である255文字までのようなので、$ を削って文字列を短くする、とかではいかがでしょうか?
(???) 2016/11/02(水) 12:52


PrintAreaを指定すると、名前定義に "Print_Area" として記録されます。こちらは自動的にシート名と$付きになりますが、256文字以上になっても構わないようです。

ちなみに、範囲の追加は以下のような感じでどうでしょうか。追加して255文字を超える場合は、同じようにエラーになりますが。

 Sub test()
    PageSetup.PrintArea = "A11:A12"
    Debug.Print PageSetup.PrintArea

    PageSetup.PrintArea = Replace(PageSetup.PrintArea, "$", "") & ",B13:B14"
    Debug.Print PageSetup.PrintArea
 End Sub
(???) 2016/11/02(水) 13:37

 こんなのではどうか?
 A5セル、A6セル、A7セルに255文字以下でセル範囲を記述。

 Sub a()
    Dim W_RANGE As Range

    Set W_RANGE = Range(Range("A5"))
    Set W_RANGE = Union(W_RANGE, Range(Range("A6")))
    Set W_RANGE = Union(W_RANGE, Range(Range("A7")))
    W_RANGE.Name = "Print_Area"
 End Sub

 追記
 以下のページを参考

http://hakoniwahaniwa.hatenablog.com/entry/2015/06/19/160454

(ねむねむ) 2016/11/02(水) 13:41


>例えば
>ActiveSheet.PageSetup.PrintArea = Range("A5").Value
>といった具合に セルA5 に印刷範囲を設定する為の値があったすると
>そのA5の値が255文字を超えるとエラーが出ます。

> ActiveSheet.PageSetup.PrintArea = _
> "$B$2:$F$16,$G$2:$J$21,$B$22:$E$30,$G$28:$H$34"

あーれー。。。
話し戻しちゃうかも知れないですけど、、、、

A5セルに長々とアドレス文字を手入力するんですか?
それともマクロで文字列を作って入力?

>ちなみに個別の印刷範囲は、一定の行幅(行数)・列幅(列数)ではなく、
>バラバラです。
形や位置はバラバラでも、個々のセル範囲は決まってるんですよね?
で、どれを印刷するかをA5に書いて指定するのかな?

とりあえず、マクロでやるなら、印刷範囲の設定をする必要はないかも?

Sub test()

    Range("$B$2:$F$16").PrintPreview
    Range("$G$2:$J$21").PrintPreview
End Sub

印刷範囲の設定に拘らなくても、
印刷する、各セル範囲を特定できれば、
マクロで作業を自動化するので、
順次、別々に印刷はできますよね〜〜。。。
どんなもんでしょ?

(まっつわん) 2016/11/02(水) 16:17


???さん、ねむねむさん、まっつわんさん ご返答ありがとうございます。

返事が遅くなり申し訳ございません。
$を削っても255文字を超える為、
ねむねむさんの方法を参考に、
初心者の為、名前定義の理解から始めて、
いろいろ試行錯誤を繰り返し、
やっと…、基本となるシートにある、印刷範囲となる値が入っている セルA5、A6、A7を
他のシートの印刷範囲に反映することが出来ました。

実際は印刷範囲の値を255文字以下に分割しても、8つ構成(値のセルが8個)になるのですが、
8つ構成のうち印刷範囲が指定されないケースがある為、
IF関数も組込みながらなんとか設定することが出来ました。

悩んでいたことが解決でき、Excelのシートもコンパクトにまとまり、
とても助かりました。本当にありがとうございました。
(はむ太朗) 2016/11/02(水) 18:27


コメント返信:

[ 一覧(最新更新順) ]


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