(Excel VBA)印刷範囲指定ではAddressプロパティを使う

ExcelのVBAで、印刷範囲の指定を動的に切り替えたいのです。
最大行が毎回変わる表を印刷するので。

PageSetupのPrintAreaプロパティに値を設定します。値はA1形式です。
今回のマクロでは行番号と列番号を取得しているので、既存コードを活かしてRangeでエリア指定したいのです。

特に、Columnで値を取得できても、絶対位置の数値です。いちいちアルファベットに置き換える、などということをしなくていいようになっているはずなのです。
初歩的なことを知らない自分でした。。

結論

RangeでA1形式の値を取得するためには、Addressプロパティを使用します。

試しにイミディエイトウィンドウに値を出してみました。

' 出力テスト
Sub test001()
    With ActiveSheet
        Debug.Print .Range(.Cells(1, 1), .Cells(10, 20)).Address
    End With
End Sub
【イミディエイト出力内容】
$A$1:$T$10

普通に文字列でA1形式の場所が出ました。

書いたコード

そのまま使えることが分かったので、以下のようになりました。Cellsの値は変数にしています。

' 印刷範囲指定
With ActiveSheet
    .PageSetup.PrintArea = _
        .Range(.Cells(開始行番号, 開始列番号), .Cells(終了行番号, 終了列番号)).Address
End With

関数を埋め込むときなどにも使えますね。
そういえば、苦労して関数を埋め込んでいたような気がします。。
もっと早く知っていればよかったです ^ ^;

ちなみに

なにも指定しないと絶対参照形式になります。
相対参照形式にしたい場合は、RowAbsoluteやColumnAbsoluteにFalseを設定しましょう。

.Address(RowAbsolute:=False)

といった具合です。

コメント

タイトルとURLをコピーしました