Offsetプロパティは指定範囲を移動させる

vbaoffseteyecatch

エクセルVBAで、Offsetの使い方についてです。

Offsetはセルや選択範囲を移動するプロパティです。

簡単なコードでセルを移動させていくことが出来ますので、是非使い慣れておきましょう。

こんにちは、じゅんぱ店長(@junpa33)です。

エクセルVBAで、セルやセルの選択範囲を移動させるのにOffsetプロパティがあります。

今回の「VBA最速で理解」は、この便利な「Offsetプロパティ」の使い方について説明します。

エクセルVBA Offsetの使い方。セルや選択範囲を移動する

vbaoffsetp018

「 Offset 」は「あるセル範囲を基準に、相対的に移動して別のセル範囲を選択します。」ということです。

「相対的に移動??」何かわかりにくいです。

つまり分かりやすく言うと、「Offset は、セルやセル範囲を移動させます。移動量は行方向に〇コ、列方向に〇コ、です。」になります。

Range オブジェクト.Offset(行方向移動量,列方向移動量)

それでは例題と共に説明していきます。

一つのセルの移動

一つのセルを決めて「Offset」で移動させてみます。

「Activecell」のデフォルト位置を「セルD4」とします。

vbaoffset001

Offset 行方向への移動

例題1

行方向にセルを移動させます。

VBA
Sub offsetテスト1()

 ActiveCell.Offset(3, 0).Select

End Sub

実行結果

行のプラス方向に3つ移動しました。

vbaoffset002
VBA
Sub offsetテスト2()

 ActiveCell.Offset(-3, 0).Select

End Sub

実行結果

行のマイナス方向に3つ移動しました。

vbaoffset003

Offset 列方向への移動

例題2

列方向にセルを移動させます。

VBA
Sub offsetテスト3()

 ActiveCell.Offset(0, 3).Select

End Sub

実行結果

列のプラス方向に3つ移動しました。

vbaoffset004
VBA
Sub offsetテスト4()

 ActiveCell.Offset(0, -3).Select

End Sub

実行結果

列のマイナス方向に3つ移動しました。

vbaoffset005

Offset 行・列方向への移動

例題3

行・列両方向にセルを移動させます。

VBA
Sub offsetテスト5()

 ActiveCell.Offset(3, 3).Select

End Sub

実行結果

行・列両方向へプラス方向に3移動しました。

vbaoffset006
VBA
Sub offsetテスト6()

 ActiveCell.Offset(-3, -3).Select

End Sub

実行結果

行・列両方向へマイナス方向に3移動しました。

vbaoffset007

セル範囲の移動

セルの範囲選択を行い、それを移動させてみます。

「セル範囲」のデフォルト位置を「セルF8からセルH10」とします。

vbaoffset008

Offset 行方向への移動

例題4

行方向に選択範囲を移動させます。

VBA
Sub offsetテスト7()

 Range("F8:H10").Select
 Selection.Offset(5, 0).Select

End Sub

実行結果

選択範囲が、行のプラス方向に5つ移動しました。

vbaoffset009
VBA
Sub offsetテスト8()

 Range("F8:H10").Select
 Selection.Offset(-5, 0).Select

End Sub

実行結果

選択範囲が、行のマイナス方向に5つ移動しました。

vbaoffset010

Offset 列方向への移動

例題5

列方向に選択範囲を移動させます。

VBA
Sub offsetテスト9()

 Range("F8:H10").Select
 Selection.Offset(0, 5).Select

End Sub

実行結果

選択範囲が、列のプラス方向に5つ移動しました。

vbaoffset011
VBA
Sub offsetテスト10()

 Range("F8:H10").Select
 Selection.Offset(0, -5).Select

End Sub

実行結果

選択範囲が、列のマイナス方向に5つ移動しました。

vbaoffset012

Offset 行・列方向への移動

例題6

行・列両方向に選択範囲を移動させます。

VBA
Sub offsetテスト11()

 Range("F8:H10").Select
 Selection.Offset(5, 5).Select

End Sub

実行結果

選択範囲が、行・列両方向へプラス方向に5移動しました。

vbaoffset013
VBA
Sub offsetテスト12()

 Range("F8:H10").Select
 Selection.Offset(-5, -5).Select

End Sub

実行結果

選択範囲が、行・列両方向へマイナス方向に5移動しました。

vbaoffset014

Offset 実際に設置する時の1例

「Offset」を実際のコードの中でどのように使えるかを考えます。

1例として、その時のデータをコピーして違う場所に累積保存していく場合を考えます。

例題7

E列に置かれているデータをA列にコピーします。
A列にコピーされたデータは、このVBAコードを実行する毎に蓄積されていきます。
E列にあるデータはその都度、数量や値が変化します。

VBA
Sub offsetテスト14()

Dim C As Range
Dim ERow As Long, ARow As Long
'A列とE列の行数を調べます
    ARow = Cells(Rows.Count, 1).End(xlUp).Row
    ERow = Cells(Rows.Count, 5).End(xlUp).Row

'セルA1とセルE1の条件設定    
    If Range("A1") = "" Then ARow = 0
    If Range("E1") = "" Then Exit Sub

'アクティブセルを選択します
    Range("A" & ARow + 1).Select

'OffsetでA列の行を1段づつ下げる
    For Each C In Range("E1:E" & ERow)
        ActiveCell.Value = C.Value
        ActiveCell.Offset(1).Select
    Next C

End Sub

最初に起動した時

vbaoffset015

2回目以降

vbaoffset017
vbalastcelleyecatch データ入力済セルの最終行番号を取得する vbadoloopeyecatch VBA 回数不定のループ処理はDo LoopとFor Each vbanameeyecatch 新規作成ブックとシート。アクティブ状態でやっておくこと

offsetの使い方まとめ

vbaoffsetp019

「 offset 」を「 ActiveCell 」と組み合わせ、それをループコードの中で展開して、

移動量指定でセルを動かしてみてください。

上手く使って、コードの簡潔化につなげてください。

アクティブセルと組み合われる場合は、その時どこにフォーカスがあるのかは十分注意してください。

大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方
初めてのVBAの勉強、構えなくても気軽に始められる。
vbastudy020a
vbastudy021a

電子書籍版「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる

(著者)大村あつし
(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)

学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min