[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
文字長が1セルの最大である255文字までのようなので、$ を削って文字列を短くする、とかではいかがでしょうか?
(???) 2016/11/02(水) 12:52
ちなみに、範囲の追加は以下のような感じでどうでしょうか。追加して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 = _
> "$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.