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)
といった具合です。
コメント