目標
ExcelVBAのDffsetプロパティを理解して操作できる
ExcelVBAではプロパティを知るとかなり多くの処理を自動で行わせることができます。加えて、VBAのプログラミング学習では変数や制御構造を学ぶ前にいろいろな設定を経験すると制御構造や様々なデータ構造の学習に入ったときに、オブジェクトやプロパティについて悩まなくてもよくなるので学習効率が良くなります。
ExcelVBAでよく使う「9つのプロパティ」
プロパティ(アルファベット順) |
ActiveSheet |
ActiveCell |
Cells |
End |
Offset ※今回の記事で扱うプロパティです。 |
Range |
Sheets |
Value |
Worksheets |
Offsetプロパティの概要と利用方法
Offsetプロパティとは
Offsetプロパティはエクセルシートの任意のセルから相対的なセルの位置を指定するためのプロパティです。
Offsetプロパティの利用方法
オブジェクト.Offset(縦方向の移動数,横方向の移動数)
Offsetは起点とするオブジェクトからの縦と横の移動数を指定することができます。起点をセルC3とした場合、下の表のようになります。
記述例
上に1つ、左に1つセルを移動する場合は「Range(“C3”).Offset(-1,-1).Select」
A | B | C | D | E | F | |
1 | ||||||
2 | Offset(-1,-1) | Offset(-1,0) | Offset(-1,1) | |||
3 | Offset(0,-1) | 起点 | Offset(0,1) | |||
4 | Offset(1,-1) | Offset(1,0) | Offset(1,1) | |||
5 |
Offsetプロパティの記述例
Offsetプロパティは色々な場面で使われます。Endプロパティの記事で紹介した【データテーブに新しいレコードを追加するプロシージャでEndプロパティが利用されるパターン】でも利用しました。
Endプロパティの記事で紹介した記述例
Sub AddRecord()
Dim LN As Integer
Worksheets("Sheet4").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Select
LN = ActiveCell.Row
Cells(LN, 2).Value = "29"
Cells(LN, 3).Value = "電気代"
Cells(LN, 4).NumberFormatLocal = "\##,###"
Cells(LN, 4).Value = ""
Cells(LN, 5).NumberFormatLocal = "\##,###"
Cells(LN, 5).Value = "6237"
Cells(LN, 6).FormulaR1C1 = "=R[-1]C + RC[-2] - RC[-1]"
End Sub
For文と併せて書いた例(これまで使用してきた家計簿表で残高が30000を切ったらところの文字を赤にするプログラム)
Sub practiceOffset()
Worksheets("Sheet4").Select
Dim ln As Integer
Dim i As Integer
ln = WorksheetFunction.Count(Range(Cells(1, 6), Cells(Rows.Count, 6)))
ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Select
For i = 1 To ln
If ActiveCell.Value <= 30000 Then
ActiveCell.Font.Color = vbRed
End If
ActiveCell.Offset(-1).Select
Next
End Sub
プログラムの解釈
RowsやRow、CountについてはEndプロパティ(2)の記事を参考にしてくだい。
ln = WorksheetFunction.Count(Range(Cells(1, 6), Cells(Rows.Count, 6)))
では、「WorksheetFunction」を利用してExcelのワークシート関数「Count関数」を呼び出し、ワークシートSheet4のセルF1からセルF1048576まで範囲で値の存在するセルの個数を数えています。Count関数で取得した数は「ln」という名前で再利用できるようにしています。(変数の利用)
※WorksheetFunctionオブジェクトはExcelのワークシート関数のコンテナです。このオブジェクトを利用するには「Application オブジェクトの WorksheetFunction プロパティ」を利用します。
記述方法:Application. WorksheetFunction.ワークシート関数
※「Application」は省略できます。
For i = 1 To ln
If ActiveCell.Value <= 30000 Then
ActiveCell.Font.Color = vbRed
End If
ActiveCell.Offset(-1).Select
Next
「For文」は繰り返し処理を行わせる文で「For~Next」の中に書かれたプログラムを条件の成立、または不成立の間、反復処理します。サンプルプロシージャでは「For~Next」の中に「If文」と「ActiveCell.Offset(-1).Select」を記述しています。
「If文」は条件分岐で条件の成立・不成立によって処理を選択させます。サンプルプロシージャの条件は「アクティブセルの値が30000以下」で、この条件が成立するとき、「If文」のブロックが処理されます。
※ ブロックとは処理のまとまりのことで「For文」では「For~Next」の中に書かれたプログラム、「If文」では「If~End If」の中に書かれたプログラムとなります。
実行結果
今回は以上となります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。