EntireColumnとColumnの使い方

vbaentirecolumneyecatch

エクセルVBAのEntireColumnとColumnプロパティです。
列全体の範囲指定、列・最終列番号の取得コードやHidden、Autofit、Clearの使い方も説明します。

こんにちは じゅんぱ店長 (@junpa33) です。

今回は、ワークシートのセル操作で列に関するプロパティの、「EntireColumnプロパティ」と「Columnプロパティ」についてです。

ほかに「Columnsプロパティ」がありますが、別記事で説明していますので、そちらと対比でご覧ください。

EntireColumnプロパティとColumnプロパティの違い

vbaentirecolumn011

機能的には全く違うEntireColumnプロパティとColumnプロパティです。

ですので用途的にも大きく違いますので、使い分けの必要があるというわけではありません。

EntireColumnとColumnの記述方法(構文)

「EntireColumnプロパティ」の構文

記述方法的には似たような記述方法になっています。

EntireColumnの構文

Rangeオブジェクト.EntireColumn

「Columnプロパティ」の構文

Columnの構文

Rangeオブジェクト.Column

EntireColumnとColumnの戻り値

EntireColumnプロパティは戻り値として、参照のセルを含む列全体を表すRangeオブジェクトを返します。

対して

Rowプロパティは戻り値として参照のセルの列番号を表す整数を返します。

Rangeオブジェクトを返すEntireColumnプロパティは、その後に関連のプロパティやメソッドで返ってきたオブジェ口に対して、何を導くかを指示することが必要です。

EntireColumnプロパティの使い道と使い方

vbaentirecolumn013

EntireColumnプロパティは、列全体について働きかけオブジェクトとして返します。

指定したセルがある列全体を取得する

単独のセルの場合

基本の形です。セルB3がある列(すでにB列と分かっていますが)を選択、範囲取得します。

EntireColumnとColumnサンプル1
Sub EntireColumnとColumnサンプル1()
    Range("B3").EntireColumn.Select
End Sub
vbaentirecolumn001

複数の連続したセルの場合

これも準基本的なケースです。セルB3からセルD3の連続したセル範囲にあるセルの列を範囲取得します。

EntireColumnとColumnサンプル2
Sub EntireColumnとColumnサンプル2()
    Range("B3:D3").EntireColumn.Select
End Sub
vbaentirecolumn002

複数の連続しないセルの場合

少し難しくなって、バラバラに指定したセルの列を同時に範囲取得します。

セルB3からセルC3、セルE2、セルG1を同時にRangeオブジェクトとして指定しています。

EntireColumnとColumnサンプル3
Sub EntireColumnとColumnサンプル3()
    Range("B3:C3,E2,G1").EntireColumn.Select
End Sub
vbaentirecolumn003

セル範囲の内での列の指定、列を取得する

ここはEntireColumnプロパティでは結構、肝になる部分です。

結論を先に言います。

EntireColumnでは、セル範囲内だけでの列の範囲選択は出来ません。

この場合は、

Columnsプロパティを使う必要があります。(Columnではありません。)

セルB3からセルG15の範囲内でD列(絶対参照でセルD3からD15)の範囲選択を試みます。

EntireColumnプロパティを使う

予定通りというか・・・やっぱり不可でした。

EntireColumnとColumnサンプル4
Sub EntireColumnとColumnサンプル4()
    Range("B3:G15").Range("C3").EntireColumn.Select
End Sub

セル範囲内でのセル位置は相対参照となりますので、絶対参照D列を指定したい時は今回の相対位置はC列になります。

vbaentirecolumn004

Columnsプロパティを使う

予定通り目的が達成できました。

EntireColumnとColumnサンプル5
Sub EntireColumnとColumnサンプル5()
    Range("B3:G15").Columns(3).Select
End Sub
vbaentirecolumn005

セル範囲内でのセル位置は相対参照となりますので、絶対参照D列を指定したい時は今回の相対位置は3列目になります。

参考記事

Columnsプロパティについてはこの記事を参考にしてください。

vbacolumnseyecatch Columnsプロパティでセルの列を指定する

関連のメソッド Autofit、Hidden、Clearを使う

Autofitメソッドを使う

セルのデータ幅に合わせて列幅を自動調整します。

EntireColumnとColumnサンプルM1
Sub EntireColumnとColumnサンプルM1()
    Range("B3:F3").EntireColumn.AutoFit
End Sub
vbaentirecolumn0m1

Hiddenメソッドを使う

セルD3を非表示にします。表示します。

EntireColumnとColumnサンプルM2_1
Sub EntireColumnとColumnサンプルM2_1()
    Range("D3").EntireColumn.Hidden = True
End Sub
EntireColumnとColumnサンプルM2_2
Sub EntireColumnとColumnサンプルM2_2()
    Range("D3").EntireColumn.Hidden = False
End Sub
vbaentirecolumn0m2_1
vbaentirecolumn0m2_2

Clearメソッドを使う

セルD3をクリアします。

EntireColumnとColumnサンプルM3

Sub EntireColumnとColumnサンプルM3()
    Range("D3").EntireColumn.Clear
End Sub
vbaentirecolumn0m3

Columnプロパティの使い道と使い方

vbaentirecolumn012

Columnプロパティは戻り値として数値を返します。

指定したセルがある列番号を取得する

「Rangeオブジェクト.Column」による列番号取得では、セル範囲の開始セルの列の列番号を返してきます。

単独セルの場合

EntireColumnとColumnサンプル6
Sub EntireColumnとColumnサンプル6()
    Range("B3").Select
    MsgBox Range("B3").Column
End Sub
vbaentirecolumn006

RangeオブジェクトでセルB3を指定しました。列番号「2」が返りました。

複数の連続したセルの場合

EntireColumnとColumnサンプル7
Sub EntireColumnとColumnサンプル7()
    Range("B3:D3").Select
    MsgBox Range("B3:D3").Column
End Sub
vbaentirecolumn007

複数の連続しないセルの場合

EntireColumnとColumnサンプル8
Sub EntireColumnとColumnサンプル8()
    Range("B3:C3,E2,G1").Select
    MsgBox Range("B3:C3,E2,G1").Column
End Sub
vbaentirecolumn008

データのある最終列を知る

データが入っているセルの最終列(最右列)を知ることが出来ます。

エクセルVBAで最終行取得と同様に公式的コードです。

「.End(xlToLeft) でワークシートの最右端の列から左方向」に、初めてデータのあるセルの列番号を返します。

それぞれの行によってデータが入っているセルの列番号が異なる場合は、「先頭の見出し行」を基準にするのが良いでしょう。

EntireColumnとColumnサンプル9
Sub EntireColumnとColumnサンプル9()
    Range("B3:G13").Select
    MsgBox Cells(13, Columns.Count).End(xlToLeft).Column
End Sub
vbaentirecolumn010

セル範囲内での列の列番号を取得する

セル範囲の開始列番号と終了列番号を取得するには、

  • 開始の列番号を、「.Column」で取得し
  • 終了の列番号を、総列数「.Columns.Count」により、「開始列番号+総列数-1」で取得することが出来ます
EntireColumnとColumnサンプル10
Sub EntireColumnとColumnサンプル10()
    Dim StC, EdC As Long
        Range("B3:G13").Select
        StC = Range("B3:G13").Column
        EdC = Range("B3:G13").Columns.Count
        MsgBox "開始列は" & StC & " : 総列数は" & EdC
End Sub
vbaentirecolumn009

説明用にコードを書きましたが、もう少しすっきりと記述するとこのようになります。

EntireColumnとColumnサンプル10_1
Sub EntireColumnとColumnサンプル10_1()
    Dim StC, EdC As Long
        With Range("B3:G13")
            .Select
            StC = .Column
            EdC = .Columns.Count
        End With
        MsgBox "開始列は" & StC & " : 総列数は" & EdC
End Sub

EntireColumnとColumnプロパティの使い方 まとめ

vbaentirecolumn014

EntireColumnプロパティとColumnプロパティの使い方を説明してきました。

特に、EntireColumnプロパティについては、Columnsプロパティとの機能の違いや記述の違いを押さえておきましょう。

Columnプロパティはシンプルに使い方が分かれば大丈夫でしょう。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min