4/07/2017

Excel。マクロ005。表のセル範囲を自動取得するCurrentRegionとResize

Excel。マクロ005。表のセル範囲を自動取得するCurrentRegionとResize

<VBA:CurrentRegionとResize>

事務職の方でもVBA・マクロを知っていると幅が出来ますので、
少しずつ慣れていってほしいと思いますので、
今回も、前回に引き続き、範囲選択の方法をご紹介。

VBAに限らず、範囲選択が出来ないことには、
何も動かすことは出来ません。

前回は、RANGEを中心にご紹介しておりますが、
今回は表の選択の際に便利なCurrentRegionをご紹介します。

次のような表があります。

この表をA1:G18までを範囲選択するだけならば、
Range(A1:G18).Select

で、なんら問題は無いわけですね。
前回ご紹介した、Rangeですね。

けど、データが増えたりする場合は、
範囲選択がA1:G18と決まっているわけではありませんよね。

A1:G50かもしれない。

データが増加するたびに、
VBAを修正するのは、あまりにも効率が悪いわけですね。

だったら、手動で処理したほうが早いかもしれません。

そこで、Ctrl+*と同じように、
表を範囲選択することが出来る【CurrentRegion】が登場するわけですね。

Sub CurrentRegion()
    Range("A1").CurrentRegion.Select
End Sub
というマクロを作ってみました。

たったこれだけで、表の範囲選択が出来るのです。

意味は、A1を含む表のセル範囲を選択するという意味ですね。

注意点ですが、これは、VBAだからというわけではなくて、
空白行や空白列が変なところに入っている表だと、
そこまでしか範囲選択してくれません。

Excelの基本も大切です。

このマクロを実行すると、

表全体を範囲選択してくれますが、
見出し行はいらないというケースもありますよね。

    Range("A2").CurrentRegion.Select
とA1をA2に修正すればいいのかというとそういうわけにはいきません。

A2を含んでいる表が範囲選択されるので、結果は変わりません。

その場合は、どうしたらいいのかというと、
【Resize】を使えば、対応することが出来るのです。

Resizeは文字の通り、セルやセル範囲のサイズを変更することが出来ます。

では、次のようなVBAを作りましょう。

Sub Resize()
    '行数と列数をLong型として定義
    Dim 行数 As Long
    Dim 列数 As Long

    '行数と列数がそれぞれ何行何列でで構成されているのかを教える
    行数 = Range("A1").CurrentRegion.Rows.Count
    列数 = Range("A1").CurrentRegion.Columns.Count
   
    '見出し行を除いて範囲選択
    Range("A2").Resize(行数 - 1, 列数).Select
End Sub

実行すると、見出し行を除いて選択することが出来ましたね。

'行数と列数がそれぞれ何行何列でで構成されているのかを教える

行数 = Range("A1").CurrentRegion.Rows.Count

これは、A1を含む表を範囲選択して、
その範囲選択したデータのRow=行数を数えて、行数という箱にいれる。

ということをやっています。
列数も同じですね。

CurrentRegionは単なる範囲選択ですが、
Resizeは範囲選択を変更できますので、

Range("A2").Resize(行数 - 1, 列数).Select

というのは、A2を含む表を行数-1。列数で範囲選択する。
という意味になります。

今回はCurrentRegionResizeを紹介しました。