01-VBA

ExcelVBAのOffsetプロパティ | 現役エンジニア&プログラミングスクール講師

目標

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」

ABCDEF
1
2Offset(-1,-1)Offset(-1,0)Offset(-1,1)
3  Offset(0,-1)起点 Offset(0,1)     
4Offset(1,-1)Offset(1,0)Offset(1,1)
5

移動数が「0」の場合は省略できる

Offset(3) 縦方向に3つ分の移動

Offset(,4) 横方向に4つ分の移動

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)の記事を参考にしてくだい。

ExcelVBAのEndプロパティ(2)| 現役エンジニア&プログラミングスクール講師ExcelVBAのEndプロパティの使い方について説明しています...

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」の中に書かれたプログラムとなります。

実行結果

今回は以上となります。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

ダイアログボックス|Excel VBA (Part.3)【InputBox+AutoFilter】編 | 現役エンジニア&プログラミングスクール講師

2022年12月4日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

演算子|Excel VBA (Part.5)【論理演算子】| 現役エンジニア&プログラミングスクール講師

2022年10月29日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

VBScriptを利用したVBAプロシージャの呼び出し(Part.1)| 現役エンジニア&プログラミングスクール講師

2023年2月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

印刷機能|Excel VBA (Part.1)【PageSetupプロパティ/PrintPreviewメソッド/PrintOutメソッド】編 | 現役エンジニア&プログラミングスクール講師

2022年12月5日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の「オブジェクト活用」(Part.2)【セル活用編】| 現役エンジニア&プログラミングスクール講師

2022年12月15日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site