Columnsプロパティの列指定で参照する

vbacolumnseyecatch

エクセルVBAでColumnsというプロパティがあります。
読み方はカラムズですが、列を選択することが出来ます。
複数列や変数利用、最終列取得など記述技術も必要です

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

以前に、「 Rowsプロパティ」の説明をしました。Rowsはワークシート上の「行」に関わるプロパティでしたが、

今回は、「Columnsプロパティ」つまり「列」に関わるプロパティについてです。

Excel VBAを独習しているときに、「Columns」は、比較的それなりに多く出現してきます。

「Columnsプロパティ」と出てきた時に「ウン ?ウン?」どう読めばいい?

「コルムン!?」・・・ローマ字読みでは今回はちょっとハズレです。

読み方としては「カラムズ」と読みます。

文字表記の感じからは、列の複数形なので ” 列たち、列の集まり ” というイメージですが・・・。

それでは「 Columns」というプロパティについて話していきます。

Columnsプロパティで列を選択し参照する

Columnsプロパティの使い方を初めから(記述方法から)説明していきます。

Columnsプロパティの記述方法

Columnsの構文

  • 1列だけを選択する場合 ・・・  
    Columns ( 列番号 ) または Columns ( ” 列名 ” )

  • 複数列を選択する場合 ・・・・ 
    Columns ( ” 列名:列名 ” )

ご注意を!!

1列だけの指定の場合と複数列の指定の場合では、Columnsの参照値の記述方法が異なります。

Columnsプロパティの範囲選択の例題

Columnsプロパティで可能な範囲選択を例題を入れて説明します。

1列だけを範囲選択する

3列目だけを選択します。参照値(数値)で表記します。

Columnsサンプル1_1
Sub Columnsサンプル1()
    Columns(3).Select
End Sub

または、列名で表記した場合です。ダブルクォーテーションで囲まないとエラーになります。

Columnsサンプル1_2
Sub Columnsサンプル1_2()
    Columns("C").Select
End Sub

連続した複数列を範囲選択する

C列、D列、E列を選択します。

素直にColumnsで複数列指定する

始まりの列名と終わりの列名の間にコロン(:)を挟みます。

Columnsサンプル2_1
Sub Columnsサンプル2()
    Columns("C:E").Select
End Sub

指定範囲を拡大した形で範囲選択をする

Columnsプロパティでは1列だけ範囲指定して、それをResizeプロパティで3列に拡張します。

Columnsサンプル2_2
Sub Columnsサンプル2_2()
    Columns(3).Resize(, 3).Select
End Sub

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

連続しない複数列を範囲選択する

Columnsプロパティ単体では、連続しない複数列を範囲選択することは出来ません。

Unionメソッドを使って、Columnsでのそれぞれの指定範囲を結合していきます。

Unionメソッドを使って、Columnsでのそれぞれの指定範囲を結合していきます。

Columnsサンプル3
Sub Columnsサンプル3()
    Union(Columns(1), Columns("C:E"), Columns("H:I")).Select
End Sub

MEMO

Unionメソッドについてはこの記事を参考にしてください。

Columnsプロパティの参照を変数にしたい

列の指定範囲を変化させる必要がある時、Columnsプロパティの列参照の値を変数化させなければいけません。

上の説明の通り、

1列のみの指定の場合なら、参照値は整数値で対応できますので、変数化は可能です。

複数列の指定の場合だと、参照はアルファベット表記になりますので、変数化は非常に難しくなります

注意

変数化対応させるためには、コード記述上、参照を数値で表示する必要があるということです。

連続した複数列を変数化対応させる

C列、D列、E列の範囲指定を参照を数値で表現する。

Rangeプロパティを利用する方法

Rangeプロパティ内の参照は、始点と終点ですので列数の変化に柔軟に対応させることが出来ます。

Columnsサンプル4_1
Sub Columnsサンプル4_1()
    Range(Columns(3), Columns(5)).Select
End Sub

MEMO

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

Resizeプロパティを利用する方法

Columnsサンプル2_2のコードになります。

起点となる列が決まれば、後は総列数が分かればOKです。VBAコード表記的には一番スマートになります。

Columnsサンプル4_2
Sub Columnsサンプル2_2()
    Columns(3).Resize(, 3).Select
End Sub

Unionメソッドを利用する方法

Unionメソッドを使ってColumnsプロパティだけで結合させる場合は、列数分「Columns」の表記が必要になります。

Columnsサンプル4_3
Sub Columnsサンプル4_3()
    Union(Columns(3), Columns(4), Columns(5)).Select
End Sub

EntireColumnプロパティを利用する方法

もはや、Columnsプロパティを利用していませんが、EntireColumnプロパティを使って指定することも出来ます。

Columnsサンプル4_4
Sub Columnsサンプル4_4()
    Range(Cells(1, 3), Cells(1, 5)).EntireColumn.Select
End Sub

ColumnsプロパティはRangeオブジェクトを返す

Columnsプロパティは、Rowsプロパティと同じくRangeオブジェクトを返しますので、

関連プロパティとして、「Selectプロパティ」や「Valueプロパティ」だけでなく色々なプロパティを使うことが出来ます。

関連記事

類似のプロパティを紹介します

「Columns」とスペルが表示がよく似たプロパティとして、「Column」と「EntireColumn」があります。

それぞれ「Columnプロパティ」と「EntireColumnプロパティ」と言います。

主な働きとしては、

  • 「Columnプロパティ」は「Columnsプロパティ」と つるんで 連携して,列番号を取得する働きをします。
  • 「EntireColumnプロパティ」は、「”Entire”は”全体”という意味」が示す通り、指定したセルが存在する列について、その列全体を範囲選択する働きをします。

それぞれ「Columnプロパティ」と「EntireColumnプロパティ」については、詳細は別記事で紹介します。

Columnsプロパティで範囲選択する まとめ

ColumnsプロパティはエクセルVBAの中でも重要なプロパティになりますので、記述方法や機能についてはしっかり覚えておくことが大切です。

セルの参照方法がRangeプロパティ同様にアルファベット表記が必要になりますが、プログラムコード作成上で表記方法が ” 上手くない ” ということが(ちょくちょく)発生します。

その場合、コード記述においては、関連の周辺知識で乗り切らなければいけませんので、その周辺知識も含めて学習に心掛けておきましょう。

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできます。

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

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

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