Offsetプロパティの使い方。セルや選択範囲を移動するVBAコード

vbaoffseteyecatch

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

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

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

 

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

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

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

 

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

 

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

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

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

 

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

 

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

 

 

一つのセルの移動

 

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

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

vbaoffset001

 

Offset 行方向への移動

例題1

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

行方向1コード
Sub offsetテスト1()

ActiveCell.Offset(3, 0).Select

End Sub

実行結果

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

vbaoffset002

 

行方向2コード
Sub offsetテスト2()

ActiveCell.Offset(-3, 0).Select

End Sub

実行結果

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

vbaoffset003

 

 

Offset 列方向への移動

例題2

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

列方向1コード

Sub offsetテスト3()

ActiveCell.Offset(0, 3).Select

End Sub

実行結果

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

vbaoffset004

 

列方向2コード
Sub offsetテスト4()

ActiveCell.Offset(0, -3).Select

End Sub

実行結果

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

vbaoffset005

 

 

Offset 行・列方向への移動

例題3

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

行・列1コード
Sub offsetテスト5()

ActiveCell.Offset(3, 3).Select

End Sub

実行結果

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

vbaoffset006

 

行・列2コード
Sub offsetテスト6()

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

End Sub

実行結果

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

vbaoffset007

 

 

セル範囲の移動

 

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

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

vbaoffset008

 

Offset 行方向への移動

例題4

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

行方向3コード
Sub offsetテスト7()

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

End Sub

実行結果

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

vbaoffset009

 

行方向4コード
Sub offsetテスト8()

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

End Sub

実行結果

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

vbaoffset010

 

 

Offset 列方向への移動

例題5

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

列方向3コード
Sub offsetテスト9()

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

End Sub

実行結果

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

vbaoffset011

 

列方向4コード
Sub offsetテスト10()

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

End Sub

実行結果

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

vbaoffset012

 

 

Offset 行・列方向への移動

例題6

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

行・列3コード
Sub offsetテスト11()

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

End Sub

実行結果

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

vbaoffset013

 

行・列4コード
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列にあるデータはその都度、数量や値が変化します。

実例コード
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

最初に起動したとき 2回目以降
vbaoffset015 vbaoffset017

 

MEMO

入力セルの最終行を取得する方法についてはこちらの記事を参考にしてください。

エクセルVBA データ入力済セルの最終行番号を取得する方法

「For Each」の使い方についてはこちらの記事を参考にしてください。

VBA 回数不定のループ処理はDo LoopとFor Each

「Activecell」を使った例題はこちらの記事も参考になります。

VBA 新規作成ブックとシート。アクティブ状態でやっておくこと

 

offsetの使い方まとめ

 

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

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

 

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

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

 

エクセルVBAの学習のためのツールの参考記事

 

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習で良質な参考書を7冊選ぶ。良書との出会いは大切です

 

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います。
エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

 

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

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

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

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

 

このサイトでよく使うVBAのコードのトピックを纏めています。

「VBA最速理解」の記事一覧を開く

 

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

 

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