Categories: VBA基礎

EXCEL VBA RangeオブジェクトOFFSETプロパティ(基準セルからの行・列移動・相対参照・セル範囲を移動する)

 

 

 

 

EXCEL VBA RangeオブジェクトOFFSETプロパティ(基準セルからの行・列移動・相対参照・セル範囲を移動する)

 

 

●はじめに

今回説明するのは、RangeオブジェクトのOffsetプロパティを説明いたします。Offsetプロパティは、基準となる指定したセル位置に対して、行方向・列方向の移動数を指定する事で、セルの参照位置・参照範囲を移動する事ができます。
Offsetプロパティは、セルの参照位置を何らかの計算結果で参照範囲を変更する事ができるので、覚えるととても便利な機能です。それでは、サンプルプログラムを交えて順番に説明いたします。

●【Resizeプロパティに関する内容は、下記の参照して下さい】

 

 

 

 

●書式の説明

● Offsetプロパティを利用するには、下記の通りに設定を行います。

名前データ型既定値説明(内容)
RowOffsetVariant0標準セルに対して行方向を設定します。上方向は、-(マイナス)数値・下方向は、数値を指定します。
ColumnOffsetVariant0標準セルに対して列方向を設定します。左方向は、-(マイナス)数値・右方向は、数値を指定します。

 

【使用例】
●下記の使用例は、セル(C3)を基準とするOffsetプロパティの使用例です。

'
'
Sub OffSet00() 'OFFsetの使用例(サンプル)

    Range("C3").Offset(-2, -2).Select 'セル[A1]に移動
    
    Range("C3").Offset(-1, -1).Select 'セル[B2]に移動
    
    Range("C3").Offset(1, 1).Select 'セル[D4]に移動
    
    Range("C3").Offset(2, 2).selec  'セル[E5]に移動

End Sub
'

 

【注意点】
・Offsetプロパティを使う注意点として、Offset(1)やOffset(,1)の様に、移動方向0を省略する事ができますが、他人がプログラムを見た時に、分かりずらいので、省略せずに【例】Offset(1,0)・Offset(0,1)の通りに記述しましょう。

 

 

 

 

OffSetプロパティを利用して見出しを作成

 

 

●プログラム説明 (サンプル①) 【Offsetプロパティ】

下記のサンプルプログラムは、Offsetプロパティを利用して見出しを作成します。基準となるセル(B2)を元にOffsetで「社員番号」・「氏名」・「所属」・「役職」とOffsetで列方向を加算しながらセルに転記します。

 

'
''******** AKIRA55.COM *******  https://akira55.com/offset/
'
Sub Offset01() 'Offsetを利用して見出しの作成

    With Range("B2") 'セル(B2)を基準とします。
    
        .Value = "社員番号"    'B2に「社員番号」を代入
        .Offset(0, 1).Value = "氏名"  'C2「氏名」を代入
        .Offset(0, 2).Value = "所属"  'D2「所属」を代入
        .Offset(0, 3).Value = "役職"  'E2「役職」を代入
    
    End With

    Range("B2:E2").Interior.ColorIndex = 6  'Offsetプロパティで文字列を代入したセルに背景色を付けます。
       
End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、セル(B2)を」基準に見出しが作成されました。
(画面クリックして拡大)

 

 

 

 

 

Offsetを利用して複数の見出しの作成  (指定した位置に見出しを作成)

 

 

●プログラム説明 (サンプル②)

下記のサンプルプログラムは、Offsetを利用して指定した位置に見出しを作成するサンプルプログラムです。

【プログラム実行条件】
・A列の【見出し位置】A2~A5に見出し位置をセル番号で指定します。
・B列に【見出し】B2~B5に見出し名称を指定します。
・A列・B列ともに、最大4件まで

 

'
''******** AKIRA55.COM *******  https://akira55.com/offset/
'
Sub Offset02()  'Offsetを利用して複数の見出しの作成(同じ見出しの作成)

    Dim Ichi As Range
    Dim I As Long

    For Each Ichi In Range("A2:A5") '表示する見出し位置(セル番号)を順番に読み取る

        With Range(Ichi) 'セル位置をセットして基準とします。
                  
            For I = 0 To 3  'Offsetでの列移動および見出し名を順番に繰り返します。
                .Offset(0, I).Value = Cells(I + 2, "B")  'Offsetを使って表題を転記します。
                .Offset(0, I).Interior.ColorIndex = 8    '表題の背景色を塗りつぶします。
            Next I

        End With

    Next Ichi
    
End Sub
'

 

●実行前~実行後 ※プログラム実行後、見出しを表示する位置をA列から読み取り・見出し内容をB列から取得して、指定したセル位置に見出しが表示されました。
(画面クリックして拡大)

 

 

 

 

Offsetを利用して一意のデータを作成してデータを転記します。

 

 

●プログラム説明 (サンプル③)

下記のサンプルプログラムは、Offsetを利用してEXCELシート上に、2つの混在するデータがあります。この混在するデータを一意のデータに纏めます。データを纏める際に、Offsetを利用してデータを転記します。

【プログラム説明】
①一つのワークシートに人事データAと人事データBがあります。
②この2つの人事データを人事データAを元に人事データBにあって人事データAに無いものを人事データAの最終行に追加します。


【プログラム実行条件】
・A列~D列の範囲に人事データAを作成
・F列~I列の廃位に人事データBを作成

 

'
''******** AKIRA55.COM *******  https://akira55.com/offset/
'
Sub offset03()      'Offsetを利用して一意のデータを作成する。(一つのデータに纏める)
    

    Dim Syain As Range
    Dim I, lRow As Long
    
    lRow = Cells(Rows.Count, "F").End(xlUp).Row 'F列の最終行を取得
    
    For I = 2 To lRow 'F列の最終行(社員番号)まで繰り返す。
    
    Set Syain = Range("A:A").Find(Range("F" & I))  'A列の社員番号(全体)とF列の社員番号1件を重複するか確認します。
        
        If Syain Is Nothing Then  'A列側の社員番号に登録されていないデータは、登録します。
                With Cells(Rows.Count, "A").End(xlUp)  'A列の最終行をOffsetの基準としてセット
                
                    .Offset(1, 0) = Cells(I, "F")  'F列の社員番号を転記
                    .Offset(1, 1) = Cells(I, "G")  'G列の氏名を転記
                    .Offset(1, 2) = Cells(I, "H")  'H列のメールアドレスを転記
                    .Offset(1, 3) = Cells(I, "I")  'I列の出身地を転記
                
                End With
        End If
    
    Next I

End Sub
'

 

 

●実行前~実行後 ※プログラムの実行後、A列から始まる「人事データA」の社員番号を元に、「人事データB」にあって、「人事データA」に無い社員番号を見つけ出し、「人事データA」に転記されました。
(画面クリックして拡大)

 

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA