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

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

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

vbalastcelleyecatchデータ入力済セルの最終行番号を取得する

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

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

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

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

offsetの使い方まとめ

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

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

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

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

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

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

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

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います。

Udemy1eyecatchエクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

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

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

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

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

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

vbabgcoloreyecatchセルの背景色を2クリックで他範囲にも展開できるマクロvbasorteyecatchデータの並び替え VBA新旧のSortを実データで実証vbacellsprotecteyecatch「セルの保護」の設定VBAを最速理解vbacellspaint_gradteyecatch「グラデーションの塗りつぶし」のセルを設定するcellspaintpatterneyecatch「塗りつぶしの網掛け」VBAを最速理解vbacellspaintbackeyecatch「塗りつぶし」背景色をVBAで記述するvbacellsbordereyecatch「罫線」のVBAを最速理解vbacellsfonteyecatch「フォント」の操作を最速理解する エクセルVBAvbacellsplacementeyecatch「配置」を最速理解する エクセルVBAvbacellssyoshikieyecatch「表示形式」をVBAコード的に最速理解するVBAcellareaeyecatchセルの範囲選択と設定は14のツールで対応するvbaendpropertyeyecatchEndプロパティで上下左右の最終セルを取得vbaentirecolumneyecatchEntireColumnとColumnの使い方vbaentireroweyecatchEntireRowとRowプロパティの違いvbacolumnseyecatchColumnsプロパティの列指定で参照するvbaunioneyecatchUnionとRangeの一括選択の働きを比較vbaresizeeyecatchResizeプロパティでセル範囲をサイズ変更vbarangevscellseyecatchRange VS Cells !VBAで使えるのはどっちvbausedrangeeyecatchUsedRangeプロパティの使い方のコツvbaborder1eyecatchBordersの/位置/線種/太さ/色/と<外枠だけの罫線>の設置vbarowseyecatchRowsプロパティの働きと関連のメソッドvbadeleteeyecatchセルの編集 DeleteとClearの使い分け 削除とクリアの違いvbacurrentregioneyecatchCurrentRegionは連続データをまとめて掴むSpecialCellseyecatchSpecialCellsメソッドはセル検索し選択するvbacharactereyecatchaCharactersで文字列中の一部の文字を加工するvbafontsyseyecatchaFontプロパティで文字装飾操作をするvbajyufukueyecatchエクセルVBA 同じ項目をまとめる(重複データの整理)コード作成vbafindeyecatch001Findメソッドでの検索の方法とコード組み立てのコツvbalastcelleyecatchデータ入力済セルの最終行番号を取得するvbaoffseteyecatchOffsetプロパティは指定範囲を移動させる

「エクセルVBA最速理解」の記事一覧を開く

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

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