'印刷範囲を設定
ActiveSheet.PageSetup.PrintArea = "A1:D4"
'Addresを使って印刷範囲を設定
With ActiveSheet
.PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(4, 4)).Address
End With
'変数で印刷範囲を設定
With ActiveSheet
a = 4
b = 4
.PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(a, b)).Address
End With
では、解説していきます。
VBAで印刷範囲を変数で設定する
VBAで、印刷範囲を変数で設定する方法について、ご紹介します。
印刷範囲の設定
まずは、印刷範囲を設定する方法について説明します。
VBA関数の、『PageSetup.PrintArea』を使います。
例えば、セル範囲『"A1:D4"』を印刷範囲に設定したい場合は、次のように入力します。
Sub TEST1()
'印刷範囲を設定
ActiveSheet.PageSetup.PrintArea = "A1:D4"
End Sub
実行してみます。
印刷範囲を設定
セル範囲『"A1:D4"』を、印刷範囲に設定できました。
ただ、『"A1:D4"』と入力するのは、少し面倒ですし、変数が入力しづらいです。
こんな時に使える関数が、Addressです。
変数で設定する
印刷範囲を、RangeとCellsを使って変数で設定する方法を、ご紹介します。
設定する方法は、Addressを使うと便利です。
アドレスの使い方は、こんな感じで入力します。
『アドレス = Cells(1, 1).Address』
アドレスには、『$A$1』が入力されます。
このAddressを使えば、簡単に変数を入力することができます。
例えば、Addressを使って、セル範囲『"A1:D4"』を、印刷範囲に設定してみます。
Sub TEST2()
With ActiveSheet
'アドレスを取得
a = .Range(.Cells(1, 1), .Cells(4, 4)).Address 'A1:D4'印刷範囲を設定
.PageSetup.PrintArea = a
End With
End Sub
実行してみます。
アドレスを使って印刷範囲を設定
セル範囲『"A1:D4"』を印刷範囲に設定できました。
セル範囲をRangeとCellsで表現できれば、変数を入力しやすくなります。
次のよう感じで、Cellsの中に変数を入れて、印刷範囲を設定することができます。
Sub TEST3()
With ActiveSheet
a = 4
b = 4
'アドレスを取得
c = .Range(.Cells(1, 1), .Cells(a, b)).Address 'A1:D4'印刷範囲を設定
.PageSetup.PrintArea = c
End With
End Sub
実行してみます。
変数を使って印刷範囲を設定
先ほどと同じように、セル範囲『"A1:D4"』を印刷範囲に設定できました。
VBAで印刷範囲をUsedRangeで設定
印刷範囲を、UsedRangeで設定する方法をご紹介します。
UsedRangeは、ワークシートで使われているセル範囲を、一発で取得できる便利なVBA関数です。
こんな感じで入力して使います。
『アドレス = ActiveSheet.UsedRange.Address』
これで、使われているセル範囲のアドレスを、取得することができます。
ただし、書式の変更や、行の高さ変更なども認識してしまうのが、弱点です。
ちょっとやってみます。
UsedRangeで設定した場合
まずは、UsedRangeで印刷範囲を設定して、成功した場合です。
次の表を用意しました。
使う表
使用している表の範囲で、印刷範囲を設定してみます。
Sub TEST4()
With ActiveSheet
'使用しているセル範囲を、印刷範囲に設定
.PageSetup.PrintArea = .UsedRange.Address
End With
End Sub
実行してみます。
印刷範囲を設定(成功)
表の範囲を、印刷範囲に設定することができました。
これは、成功したパターンです。
UsedRangeがうまくいかない場合
次は、UsedRangeで、印刷範囲の設定がうまくいかない場合を、やってみます。
6行目で、行の高さを変更しました。
行の高さを変更
6行目の、行の高さが変更されています。
この表で、UsedRangeを使って、使用しているセル範囲を印刷範囲に設定してみます。
Sub TEST5()
With ActiveSheet
'使用しているセル範囲を、印刷範囲に設定
.PageSetup.PrintArea = .UsedRange.Address
End With
End Sub
VBAコードは先ほどと同じです。
実行してみます。
印刷範囲を設定(失敗)
印刷範囲が、高さを変えた行のセル範囲まで、設定しています。
UsedRangeは、便利ですけども、書式の変更などに弱いです。
VBAで印刷範囲をCurrentRegionで設定
次は、印刷範囲をCurrentRegionで設定する方法について、ご紹介します。
CurrentRegionで設定した場合
CurrentRegionは、同じ表と認識するセル範囲を取得することができます。
次のように設定します。
『アドレス = Range("A1").CurrentRegion.Address』
これで、同じ表のセル範囲を取得することができます。
CurrentRegionを使って、印刷範囲を設定してみます。
次の表を使います。
使った表
CurretRegionを使って、表全体を印刷範囲として、設定するVBAコードです。
Sub TEST6()
With ActiveSheet
'表全体を、印刷範囲に設定
.PageSetup.PrintArea = .Range("A1").CurrentRegion.Address
End With
End Sub
では、実行してみます。
印刷範囲を設定(成功)
表全体を、印刷範囲に設定できました。
これが、成功する例です。
次に、失敗する例をご紹介します。
CurrentRegionでうまくいかない場合
CurrentRegionで印刷範囲を設定した場合に、うまくいかない場合をやってみます。
CurrentRegionは、空白セルに弱いです。
空白行を含む表を使って、試してみます
空白行を追加
VBAコードは先ほどと一緒です。
Sub TEST7()
With ActiveSheet
'表全体を、印刷範囲に設定
.PageSetup.PrintArea = .Range("A1").CurrentRegion.Address
End With
End Sub
実行してみます。
印刷範囲を設定(失敗)
空白行の前までしか、印刷範囲が設定されていません。
空白行があると、CurrentRegionでは、うまく印刷範囲を設定することができません。
VBAでEndを使って印刷範囲を設定する
書式の変更や、空白行がある場合には、Endを使って印刷範囲を設定する方法が、使えます。
やってみます。
Endを使って印刷範囲を設定
Endを使えば、最終行や最終列を取得することができます。
最終行:Cells(Rows.Count, "A").End(xlUp).Row
最終列:Cells(1, Columns.Count).End(xltoLeft).Column
これを使って、印刷範囲を設定します。
次の表で、印刷範囲を設定してみます。
行の高さ変更、空白行を追加した表
行の高さを変更して、空白行を入れました。
Endを使って、表全体を印刷範囲とするVBAコードは次のようになります
Sub TEST8()
With ActiveSheet
'最終行を取得する
a = .Cells(Rows.Count, "A").End(xlUp).Row
'最終列を取得する
b = .Cells(1, Columns.Count).End(xlToLeft).Column
'アドレスを取得する
c = .Range(.Cells(1, 1), .Cells(a, b)).Address
'印刷範囲を設定
.PageSetup.PrintArea = c
End With
End Sub
では、実行してみます。
印刷範囲を設定
表全体を、印刷範囲に設定することができました。
もう少し複雑な表で試してみる
もう少し複雑な表で、印刷範囲を設定してみます。
例えば、次のような表です。
少し複雑な表
最終行と最終列が、簡単にはわからないです。
書式の変更もして、空白の行も入れました。
表全体を印刷範囲に設定するVBAコードです。
Sub TEST9()
Dim LastRow, LastCol
LastRow = 0
LastCol = 0
With ActiveSheet
For i = 1 To 100
'最終行を取得
a = .Cells(Rows.Count, i).End(xlUp).Row
'各列で、最大の最終行を取得
If LastRow < a Then LastRow = a
Next
For i = 1 To 100
'最終列を取得
a = .Cells(i, Columns.Count).End(xlToLeft).Column
'各行で、最大の最終列を取得
If LastCol < a Then LastCol = a
Next
'アドレスを取得
b = .Range(.Cells(1, 1), .Cells(LastRow, LastCol)).Address
'印刷範囲を設定
.PageSetup.PrintArea = b
End With
End Sub