7/06/2017

Excel。マクロ009。見出し行・見出し列と合計を除いて範囲選択をするには【Offset&Resize】

Excel。マクロ009。見出し行・見出し列と合計を除いて範囲選択をするには

<VBA>

事務職でも、少しExcel VBAを知っていると、
確かに作業効率は改善されるようですが、
難しいと感じている人も多いようです。

とはいえ、少しずつでいいので、慣れていくといいですね。

ということで、
今回は、
見出しと合計値を除いて範囲選択する
というケースをご紹介していきます。

次の表があります。

このような表を使いまわす場合というのは、
現場で結構ありまして、見出し行や見出し列を除いて、
範囲選択するというのは、表自体が小さい場合には、
それほど、面倒ではないのですが、表が大きい場合は、
範囲選択自体が結構面倒だったりします。

それでは、早速作っていく事にしましょう。

Sub 見出し以外選択()
    Dim セル範囲 As Range
    Set セル範囲 = Range("a2").CurrentRegion
    セル範囲.Offset(1, 1).Resize(セル範囲.Rows.Count - 2, セル範囲.Columns.Count - 2).Select
End Sub

これで、範囲選択をしてくれますので、実行して確認してみましょう。

見出し行と見出し列と合計を除いて範囲選択することが出来ましたね。

このぐらいの表ならば、
別にマクロを作る必要がないとは思いますが、一瞬で範囲選択してくれましたね。

VBAも確認しておきましょう。
Dim セル範囲 As Range
これは、Range型で「セル範囲」という変数を用意しました。

Set セル範囲 = Range("a2").CurrentRegion
その「セル範囲」には、
A2から連続する表となる範囲がセットされました。

セル範囲.Offset(1, 1).Resize(セル範囲.Rows.Count - 2, セル範囲.Columns.Count - 2).Select

そのA2からはじまる「セル範囲」の表を、
1行1列ずらしたところから、
全体の行数から-2した行数の全体の列数から-2した列数を、
範囲選択(Select)しましょう。

ということなので、
データを入力するところのみ範囲選択することが出来たわけです。

Offsetは、OFFSET関数を知っていれば、理解しやすいかと思われます。

関数を使ってバキバキやっている人は、プログラムは知らなくても、
イメージしやすい事がありますので、
関数もマクロも知っていて無駄はあまりないのかもしれませんね。

ところで、実務だと、範囲選択するだけでなくて、
削除するなんてこともありますので、
範囲選択したところを削除したい場合には、
最後のSelectをClearに変えるだけで、データを削除することが出来ますよ。

Sub 見出し以外選択()
Dim セル範囲 As Range
Set セル範囲 = Range("a2").CurrentRegion
セル範囲.Offset(1, 1).Resize(セル範囲.Rows.Count - 2, セル範囲.Columns.Count - 2).Clear
End Sub

では、改めて実行してみましょう。

このように、データを削除して空白にすることが出来ましたね。

まぁ入力するだけなら、範囲選択されているだけで、
あとは入力するだけなのですが、ケースバイケースで、
削除出来ることも知っているといいですよね。