VBA EntireColumnとColumnの使い道と使い方

vbaentirecolumneyecatch

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

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

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

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

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

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

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

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

「EntireColumnプロパティ」の構文

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

EntireColumnの構文

  •  Rangeオブジェクト.EntireColumn

「Columnプロパティ」の構文

Columnの構文

  •  Rangeオブジェクト.Column

EntireColumnとColumnの戻り値

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

対して

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

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

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

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

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

単独のセルの場合

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

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

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

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

<strong>EntireColumnとColumnサンプル2</strong>
Sub EntireColumnとColumnサンプル2()
    Range("B3:D3").EntireColumn.Select
End Sub

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

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

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

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

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

ここは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列になります。

Columnsプロパティを使う

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

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

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

参考記事

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

vbacolumnseyecatch VBA Columnsプロパティで列を指定、選択参照する

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

Autofitメソッドを使う

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

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

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

Clearメソッドを使う

セルD3をクリアします。

EntireColumnとColumnサンプルM3

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

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

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

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

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

単独セルの場合

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  •  開始の列番号を、「.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

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

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プロパティの使い方 まとめ

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

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

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

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできます。
Udemy1eyecatch エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

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

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