エクセルVBAのEntireColumnとColumnプロパティです。
列全体の範囲指定、列・最終列番号の取得コードやHidden、Autofit、Clearの使い方も説明します。
こんにちは じゅんぱ店長 (@junpa33) です。
今回は、ワークシートのセル操作で列に関するプロパティの、「EntireColumnプロパティ」と「Columnプロパティ」についてです。
ほかに「Columnsプロパティ」がありますが、別記事で説明していますので、そちらと対比でご覧ください。
- セルの範囲選択
- Range VS Cells !VBAで使えるのはどっち
- セルの範囲選択と設定は14のツールで対応する
- Rowsプロパティの働きと関連のメソッド
- Columnsプロパティでセルの列を指定する
- EntireRowとRowプロパティの違い
- EntireColumnとColumnの使い方
- Offsetプロパティは指定範囲を移動させる
- Resizeプロパティでセル範囲をサイズ変更
- CurrentRegionは連続データをまとめて掴む
- UnionとRangeの一括選択の働きを比較
- SpecialCellsメソッドはセル検索し選択する
- UsedRangeプロパティの使い方のコツ
- Endプロパティで上下左右の最終セルを取得
- データ入力済セルの最終行番号を取得する
コンテンツ
EntireColumnプロパティとColumnプロパティの違い

機能的には全く違うEntireColumnプロパティとColumnプロパティです。
ですので用途的にも大きく違いますので、使い分けの必要があるというわけではありません。
EntireColumnとColumnの記述方法(構文)
「EntireColumnプロパティ」の構文
記述方法的には似たような記述方法になっています。
Rangeオブジェクト.EntireColumn
「Columnプロパティ」の構文
Rangeオブジェクト.Column
EntireColumnとColumnの戻り値
EntireColumnプロパティは戻り値として、参照のセルを含む列全体を表すRangeオブジェクトを返します。
対して
Rowプロパティは戻り値として参照のセルの列番号を表す整数を返します。
Rangeオブジェクトを返すEntireColumnプロパティは、その後に関連のプロパティやメソッドで返ってきたオブジェ口に対して、何を導くかを指示することが必要です。
EntireColumnプロパティの使い道と使い方

EntireColumnプロパティは、列全体について働きかけオブジェクトとして返します。
指定したセルがある列全体を取得する
単独のセルの場合
基本の形です。セルB3がある列(すでにB列と分かっていますが)を選択、範囲取得します。
Sub EntireColumnとColumnサンプル1()
Range("B3").EntireColumn.Select
End Sub

複数の連続したセルの場合
これも準基本的なケースです。セルB3からセルD3の連続したセル範囲にあるセルの列を範囲取得します。
Sub EntireColumnとColumnサンプル2()
Range("B3:D3").EntireColumn.Select
End Sub

複数の連続しないセルの場合
少し難しくなって、バラバラに指定したセルの列を同時に範囲取得します。
セルB3からセルC3、セルE2、セルG1を同時にRangeオブジェクトとして指定しています。
Sub EntireColumnとColumnサンプル3()
Range("B3:C3,E2,G1").EntireColumn.Select
End Sub

セル範囲の内での列の指定、列を取得する
ここはEntireColumnプロパティでは結構、肝になる部分です。
結論を先に言います。
EntireColumnでは、セル範囲内だけでの列の範囲選択は出来ません。
この場合は、
Columnsプロパティを使う必要があります。(Columnではありません。)
セルB3からセルG15の範囲内でD列(絶対参照でセルD3からD15)の範囲選択を試みます。
EntireColumnプロパティを使う
予定通りというか・・・やっぱり不可でした。
Sub EntireColumnとColumnサンプル4()
Range("B3:G15").Range("C3").EntireColumn.Select
End Sub
セル範囲内でのセル位置は相対参照となりますので、絶対参照D列を指定したい時は今回の相対位置はC列になります。

Columnsプロパティを使う
予定通り目的が達成できました。
Sub EntireColumnとColumnサンプル5()
Range("B3:G15").Columns(3).Select
End Sub

セル範囲内でのセル位置は相対参照となりますので、絶対参照D列を指定したい時は今回の相対位置は3列目になります。
関連のメソッド Autofit、Hidden、Clearを使う
Autofitメソッドを使う
セルのデータ幅に合わせて列幅を自動調整します。
Sub EntireColumnとColumnサンプルM1()
Range("B3:F3").EntireColumn.AutoFit
End Sub

Hiddenメソッドを使う
セルD3を非表示にします。表示します。
Sub EntireColumnとColumnサンプルM2_1()
Range("D3").EntireColumn.Hidden = True
End Sub
Sub EntireColumnとColumnサンプルM2_2()
Range("D3").EntireColumn.Hidden = False
End Sub


Clearメソッドを使う
セルD3をクリアします。
Sub EntireColumnとColumnサンプルM3()
Range("D3").EntireColumn.Clear
End Sub

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

Columnプロパティは戻り値として数値を返します。
指定したセルがある列番号を取得する
「Rangeオブジェクト.Column」による列番号取得では、セル範囲の開始セルの列の列番号を返してきます。
単独セルの場合
Sub EntireColumnとColumnサンプル6()
Range("B3").Select
MsgBox Range("B3").Column
End Sub

RangeオブジェクトでセルB3を指定しました。列番号「2」が返りました。
複数の連続したセルの場合
Sub EntireColumnとColumnサンプル7()
Range("B3:D3").Select
MsgBox Range("B3:D3").Column
End Sub

複数の連続しないセルの場合
Sub EntireColumnとColumnサンプル8()
Range("B3:C3,E2,G1").Select
MsgBox Range("B3:C3,E2,G1").Column
End Sub

データのある最終列を知る
データが入っているセルの最終列(最右列)を知ることが出来ます。
エクセルVBAで最終行取得と同様に公式的コードです。
「.End(xlToLeft) でワークシートの最右端の列から左方向」に、初めてデータのあるセルの列番号を返します。
それぞれの行によってデータが入っているセルの列番号が異なる場合は、「先頭の見出し行」を基準にするのが良いでしょう。
Sub EntireColumnとColumnサンプル9()
Range("B3:G13").Select
MsgBox Cells(13, Columns.Count).End(xlToLeft).Column
End Sub

セル範囲内での列の列番号を取得する
セル範囲の開始列番号と終了列番号を取得するには、
- 開始の列番号を、「.Column」で取得し
- 終了の列番号を、総列数「.Columns.Count」により、「開始列番号+総列数-1」で取得することが出来ます。
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

説明用にコードを書きましたが、もう少しすっきりと記述するとこのようになります。
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を独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

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