大体でIT

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

大体でIT

Excel VBAでRangeで取得したセル範囲からアドレスを取得する方法についてご紹介します。アドレスの取得は、Addressを使えばできます。Addressを使う場面で多いのは、印刷範囲を設定する時です。具体的なVBAコードを使って、Addressの使い方について解説していきます。

はじめに

この記事では、セル範囲からアドレスを取得する方法について、ご紹介します。

アドレスの取得は、『Address』を使えばできます。

RangeとCellsを組み合わせたセル範囲も、Addressを使えばアドレスを取得することができます。

では、Addressの使い方と、Addressを使う場面を併せて、解説していきます。

この記事で紹介すること

  • セル範囲からアドレスを取得する方法
  • Addressを使う場面

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

目次

ポイントとなるVBAコード

初めに、ポイントとなるVBAコードについて記載しておきます。

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

'アドレスを取得
With ActiveSheet
    a = .Cells(1, 1).Address '$A$1
    a = .Cells(1, 1).Address(True, True) '$A$1
    a = .Cells(1, 1).Address(False, False) 'A1
    a = .Cells(1, 1).Address(True, False) 'A$1
    a = .Cells(1, 1).Address(False, True) '$A1
    a = .Range(.Cells(1, 1), .Cells(3, 3)).Address(False, False) 'A1:C3
End With

では、解説していきます。

VBAでセルのアドレスを取得(Address)

セルのアドレスを取得するには、『Address』を使います。

アドレスとは、『A1』とか『C3:E7』とかのことです。

アドレスは、印刷範囲の設定や、ワークシートイベントのTargetを指定する際に使います。

まずは、基本的な使い方について、ご説明してきます。

Addressの使い方(Cells)

Addressは次のように入力して使います。

  • Cells(1, 1).Address :"$A$1"
  • Cells(1, 1).Address(True, True) :"$A$1"
  • Cells(1, 1).Address(False, False):"A1"
  • Cells(1, 1).Address(True, False) :"A$1"
  • Cells(1, 1).Address(False, True) :"$A1"

Addressの後に、引数として、TrueもしくはFalseを入れることができます。

省略すると、(True, True)となります。

それぞれのVBAコードを実行してみます。

引数を入力しない

まずは、Addressに引数を入力しない場合でやってみます。

Sub TEST1()
    
    With ActiveSheet
        'アドレスを取得
        a = .Cells(1, 1).Address '$A$1
    End With
    
    MsgBox a
    
End Sub

実行してみます。

Addressを引数なしで実行した結果

結果は、『$A$1』となりました。

両方True

次は、両方の引数に、Trueを入れてみます。

Sub TEST2()
    
    With ActiveSheet
        'アドレスを取得
        a = .Cells(1, 1).Address(True, True) '$A$1
    End With
    
    MsgBox a
    
End Sub

実行してみます。

両方の引数に、Trueを入れて実行した結果

結果は、『$A$1』となりました、引数を省略したときのと同じ結果です。

両方False

次は、Addressの引数を、両方とも『False』にしてみます。

Sub TEST3()
    
    With ActiveSheet
        'アドレスを取得
        a = .Cells(1, 1).Address(False, False) 'A1
    End With
    
    MsgBox a
    
End Sub

実行してみます。

Addressの引数を、両方ともFalseにした結果

結果は、『A1』となりました。

縦と横の固定が外れました。

TrueとFalse

次は、1番目の引数に『True』、2番目の引数に『False』を入力してみます。

Sub TEST4()
    
    With ActiveSheet
        'アドレスを取得
        a = .Cells(1, 1).Address(True, False) 'A$1
    End With
    
    MsgBox a
    
End Sub

実行してみます。

1番目の引数にTrue、2番目の引数にFalseを入力した結果

結果は、『A$1』となりました。

『行』が固定となります。

FalseとTrue

先ほどと反対で、1番目の引数に『False』、2番目の引数に『True』を入力してみます。

Sub TEST5()
    
    With ActiveSheet
        'アドレスを取得
        a = .Cells(1, 1).Address(False, True) '$A1
    End With
    
    MsgBox a
    
End Sub

実行してみます。

1番目の引数にFalse、2番目の引数にTrueを入力した結果

結果は、『$A1』となりました。

『列』が固定となっています。

覚え方としては、Cellsと同じで、Address(行, 列)で、Trueを入れたところが固定、という感じ覚えられます。

Rangeのセル範囲からアドレスを取得

Rangeで取得したセル範囲も、Addressを使えば、アドレスを取得することができます。

やってみます。

Sub TEST6()
    
    With ActiveSheet
        'アドレスを取得
        a = .Range(.Cells(1, 1), .Cells(3, 3)).Address(False, False) 'A1:C3
    End With
    
    MsgBox a
    
End Sub

実行してみます。

セル範囲のアドレスを取得

RangeとCellsを組み合わせた範囲をAddressで取得

結果は、『"A1:C3"』となりました。

選択してみるとわかりやすいので、選択してみます。

Sub TEST7()
    
    With ActiveSheet
        'セル範囲を選択
        a = .Range(.Cells(1, 1), .Cells(3, 3)).Select 'A1:C3
    End With
    
End Sub

選択します。

取得したセル範囲

RangeとCellsで組み合わせた範囲を選択

先ほどのアドレス『"A1:C3"』と一致しています。

正しくアドレスを取得できていることがわかります。

Addressを使う場面

Addressを使う場面について、2つ紹介します。

印刷範囲を設定する場合と、セル範囲のアルファベットを取得する場合です。

印刷範囲の設定

印刷範囲を設定する際には、印刷範囲の設定にアドレスを入力する必要があります。

ここで、Addressの出番です。

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

『"A1:C3"』を印刷範囲として、設定してみます。

Sub TEST8()
    
    With ActiveSheet
        'A1:C3を印刷範囲に設定
        .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(3, 3)).Address
    End With
    
End Sub

実行してみます。

Addressを使って印刷範囲を設定

印刷範囲を設定した結果

印刷範囲をアドレスで指定して、設定することができました。

アドレスのアルファベットだけを取得

もう一つは、アドレスからアルファベットだけを取得する。というものです。

Rangeとかだと、アルファベットを使いますので、使う機会があるかもです。

Addressを使って、アドレスからアルファベットだけを取得するVBAコードです。

Sub TEST9()
    
    'アドレスを取得
    a = ActiveSheet.Cells(1, 5).Address(True, False) 'E3
    
    '$で文字列を分けて、アルファベットだけを取得する
    b = Split(a, "$")(0) 'E
    
    MsgBox b
    
End Sub

実行してみます。

アドレスのアルファベットだけを取得

AddressとSplitを使ってアルファベットだけを取得した結果

結果は、『E』となりました。

5列目なので、『E』で正解ですね。

アルファベットが取得できれば、取得した列のセルを選択することができます。

アルファベット『E』を取得して、『E3』を選択してみます。

Sub TEST10()
    
    'アドレスを取得
    a = ActiveSheet.Cells(1, 5).Address(True, False) 'E3
    
    '$で文字列を分けて、アルファベットだけを取得する
    b = Split(a, "$")(0) 'E
    
    'E3を選択
    ActiveSheet.Range(b & 3).Select
    
End Sub

実行してみます。

取得したアルファベットを使って同列のセルを選択

アルファベットを取得して同じ列のセルを選択した結果

『E3』のセルを選択できました。

こういうセル選択もありですかね。

おわりに

この記事では、Rangeで取得したセル範囲からアドレスを取得する方法について、ご紹介しました。

セル範囲は、『Address』で取得できて、『A1』の形式で取得されます。

取得したアドレスは、印刷範囲の設定に使えます。

アドレスからアルファベットを取得することもできます。

アルファベットを取得できれば、Rangeを使って同じ列のセル範囲を取得することができます。

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

関連する記事から探す

カテゴリから探す

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

アーカイブから探す