目標
ExcelVBAのActiveCellプロパティを理解して操作できる
ExcelVBAではプロパティを知るとかなり多くの処理を自動で行わせることができます。加えて、VBAのプログラミング学習では変数や制御構造を学ぶ前にいろいろな設定を経験すると制御構造や様々なデータ構造の学習に入ったときに、オブジェクトやプロパティについて悩まなくてもよくなるので学習効率が良くなります。
ExcelVBAでよく使う「9つのプロパティ」
プロパティ(アルファベット順) |
ActiveSheet |
ActiveCell ※今回の記事で扱うプロパティです。 |
Cells |
End |
Offset (※今回の記事で少し登場します。詳しい説明は別の記事で。) |
Range |
Sheets |
Value |
Worksheets |
ActiveCelllプロパティの概要と利用方法
ActiveCellプロパティとは
ActiveCellプロパティとはApplicationオブジェクト、Windowオブジェクトのプロパティです。
- ApplicationオブジェクトはExcelというアプリケーショのオブジェクト。
- WindowオブジェクトはExcelを開いたときのウィンドウのオブジェクト。
いずれにしてもExcelを操作するためのオブジェクトとなります。
ActiveCellプロパティを利用すると現在アクティブになっているセルに対して操作を行うことが可能になります。
ActiveCellの利用パターン
❶特定のひとつのセルを選択しておく。
ActiveCellプロパティの利用では直前にセルをひとつ選択する操作が入ります。
Range(“B3”).Select
❷ ActiveCelllプロパティを利用してアクティブセルを操作する。
下はアクティブセルの操作例
A.アクティブセルをひとつ下へ移動させる方法。
ActiveCell.Offset(1).Select
B.アクティブセルを基準にして連続しているセルを全選択する方法。
ActiveCell.CurrentRegion.Select
「A.アクティブセルをひとつ下へ移動させる方法。」
この操作はOffsetプロパティで実現できます。
Offsetは現在位置からの距離を利用して任意のセルを指定するものです。
Offset(上下方向、左右方向)入力します。
例えば「1つ下、2つ右」に移動したい場合は
Offset(1,2)となります。
今回は左右方向の移動は無しということで省略した記述になっています。
「B.アクティブセルを基準にして連続しているセルを全選択する方法。」
Excelのセルは隣接するセルに「値がある」か「空である」か、を識別しています。例えば、下キャプチャのようなデータを入力した表は、値が入ったもの同士で接しているので、それらのセル群は1つグループとして捉えられます。
※一部のセルが空となっていても、空となっているセルと同じ行、または列のどこかが値の入ったセル同士で隣接している場合は、その行、または列について、表の一部と判断されます。
この機能により、表の中の値が入力されているセルをアクティブにして「Ctrl+A(全選択)」と表を全選択することができます。
一覧表内のいづれかのセルを選択して「Ctrl+A(全選択)」を行います。
まずはC6を選択します。
C6を選択
「Ctrl+A(全選択)」
一覧表の全選択が行えました。
そしてこの表の全選択(「Ctrl+A(全選択)」)と同じ動きを行ってくれるのがCurrentRegionプロパティとなります。
サンプルプロシージャ
Option Explicit
Sub practiceAC()
Worksheets("sheet4").Range("B3").Select
ActiveCell.Offset(1).Select
If ActiveCell.Value <> "" Then
ActiveCell.CurrentRegion.Select
End If
End Sub
If や <>については別の機会に記事にしますが、ここでは
「もしアクティブセルの中身が空でなかったら、ActiveCell.CurrentRegion.Select を行う」という意味となります。
実行結果
もしも、B4(今回はOffset(1)でB4をアクティブにしている)が空だった場合
Worksheets(“sheet4”).Range(“B3”).Select
ActiveCell.Offset(1).Select
の二行はプログラムとして動いているが、Ifステートメント内は条件に合わないので全選択の動作はかからなくなっています。
ActiveCellプロパティはアクティブセルに対して様々な設定を行うのにとても便利なプロパティです。ActiveSheetやActiveCellはプロシージャ内でシート名やセル番地を直接利用しないのでプログラムを上手に構成することによって柔軟な処理を行わせることが可能になります。
今回は以上です。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。