大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、印刷範囲を変数で設定する方法について、解説していきます。変数の設定は、PrintAreaとAddressを使えば、簡単に入力することができます。印刷範囲を、簡単に設定する方法についても、併せてご紹介していきます。

はじめに

この記事では、印刷範囲を、変数で設定する方法について、ご紹介します。

印刷範囲を変数で設定するには、『PageSetUp.PrinatArea』を『Address』を使って設定するとできます。

UsedRangeや、CurrentRegion、Endを使った、簡単な印刷範囲の設定方法についても、説明します。

では、印刷範囲の設定について、解説していきます。

この記事で紹介すること

  • 印刷範囲を変数で設定する方法

目次から見たい項目へ移動すると便利ですよ。

目次

ポイントとなるVBAコード

初めに、印刷範囲の設定について、ポイントとなるVBAコードについて、まとめておきます。

VBAコードだけ確認したい場合に、ご活用ください。

'印刷範囲を設定
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

実行してみます。

アドレスを使って印刷範囲を設定

Addressを使って、指定したセル範囲を印刷範囲に設定した結果

セル範囲『"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がうまくいかない場合

次は、UsedRangeで、印刷範囲の設定がうまくいかない場合を、やってみます。

6行目で、行の高さを変更しました。

行の高さを変更

使った表

6行目の、行の高さが変更されています。

この表で、UsedRangeを使って、使用しているセル範囲を印刷範囲に設定してみます。

Sub TEST5()
    
    With ActiveSheet
        '使用しているセル範囲を、印刷範囲に設定
        .PageSetup.PrintArea = .UsedRange.Address
    End With
    
End Sub

VBAコードは先ほどと同じです。

実行してみます。

印刷範囲を設定(失敗)

UsedRangeを使って、印刷範囲を設定した場合

印刷範囲が、高さを変えた行のセル範囲まで、設定しています。

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で印刷範囲を設定した場合に、うまくいかない場合をやってみます。

CurrentRegionは、空白セルに弱いです。

空白行を含む表を使って、試してみます

空白行を追加

空白行を含む表

VBAコードは先ほどと一緒です。

Sub TEST7()
    
    With ActiveSheet
        '表全体を、印刷範囲に設定
        .PageSetup.PrintArea = .Range("A1").CurrentRegion.Address
    End With
    
End Sub

実行してみます。

印刷範囲を設定(失敗)

CurretRegionを使って、空白行を含む表全体を印刷範囲に設定した結果

空白行の前までしか、印刷範囲が設定されていません。

空白行があると、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

では、実行してみます。

印刷範囲を設定

Endを使って表全体を印刷範囲にした結果

表全体を、印刷範囲に設定することができました。

もう少し複雑な表で試してみる

もう少し複雑な表で、印刷範囲を設定してみます。

例えば、次のような表です。

少し複雑な表

少し複雑な表を作成

最終行と最終列が、簡単にはわからないです。

書式の変更もして、空白の行も入れました。

表全体を印刷範囲に設定する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

最終行と、最終列をループして検索しています。

では、実行してみます。

印刷範囲を設定

少し複雑な表で、表全体を印刷範囲に設定した結果

表全体を、印刷範囲に設定できました。

印刷範囲、奥深いです。

おわりに

この記事では、印刷範囲を、変数で設定する方法について、ご紹介しました。

印刷範囲の設定は、『PageSetUp.PrintArea』を使います。

印刷範囲は、『A1:D4』のように入力する必要があるため、『Address』を使うと設定が簡単になります。

Addressを使えば、Cellsを使うことができますので、変数の入力が簡単になります。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す