マコト2017/9/32019/4/2こんにちは。侍エンジニア塾ブログTech編集部です!ExcelVBAではRange.Offsetを使い、ある範囲を基準にして別の範囲を扱うことができます。この記事では、Range.Offsetの使い方についてOffsetとはActiveCell.Offsetでアクティブセルを動かすRange.Offsetで指定したセルを動かすSelection.Offsetで選択範囲を移動する方法といった基本的な内容からRangeで指定した範囲をOffsetで変更する方法Range.Resizeで指定した範囲をOffsetする方法ValueとOffsetで相対位置に値を入力する方法など応用的な使い方についても解説していきます。Range.Offsetは、汎用性が高くとても便利です。今回は、その中でもよく使う例を挙げて解説していきます。まとめOffsetとはオフセットとは、基準となるセルから移動する行と列を指定して相対的にセルを参照することです。次の画像のようにセルB3からセルD6にオフセットするには、縦に3行、横に2列移動させます。セルD6からセルB3の逆方向ににオフセットするには縦に-3行、横に-2列移動させます。ExcelVBAでは、ある範囲を基準にして別の範囲を扱うためにRangeオブジェクトのOffsetプロパティを使用します。Rangeオブジェクト.Offset(行数、列数)このコードでは、基準となる範囲をRangeオブジェクトのオブジェクトで指定しています。オフセットする行数と列数をOffsetプロパティで指定しています。それではRange.Offsetの使い方について、次の章から例を交えつつ詳しく解説していきます。ActiveCell.Offsetでアクティブセルを動かすActiveCell.Offsetでアクティブセルを動かすためには、次のようにします。2).Activateとしています。Sub[実行前][実行後]実行後の画像からアクティブセルが1行と2列、動いていることが確認できます。このサンプルコードでは、Activateメソッドでアクティブセルをオフセットさせています。Range.Offsetで指定したセルを動かす先ほどはアクティブセルをオフセットする方法についてお伝えしました。今度は指定したセルをオフセットする方法についてサンプルコードでみていきましょう。先ほどのActiveCellの代わりに、Rangeプロパティを使ってセルを指定します。Sub[実行前][実行後]Selection.Offsetで選択範囲を移動する方法Selection.Offsetで選択範囲を移動するためには、次のようにします。3).Selectとしています。Sub[実行前][実行後]実行後の画像から選択範囲が2行と3列、動いていることが確認できます。このサンプルコードでは、Selectメソッドで選択範囲をオフセットさせています。Rangeで指定した範囲をOffsetで変更する方法Rangeで指定した範囲を選択するには、RangeオブジェクトのSelectメソッドを使用します。ここでは、Rangeで指定した範囲をSelectメソッドで選択した場合と、そこからOffsetで範囲を変更した場合を比較して解説します。次のサンプルコードでは、Rangeで指定した範囲をSelectメソッドで選択しています。Sub[実行後]実行後の画像から、指定した範囲が選択されていることが確認できます。次のサンプルコードでは、Rangeで指定した範囲をOffsetで変更しています。Sub[実行後]実行後の画像から、単純に選択した場合と比較すると指定した範囲が変更されていることが確認できます。Range.Resizeで指定した範囲をOffsetする方法Range.Resize.Offsetプロパティは例えば今アクティブな単体セルから範囲に変更して、それをオフセットする場合に使います。RangeオブジェクトのResizeプロパティでセルの範囲を変更した後で、Offsetプロパティで指定したセル間を移動します。Sub[実行前][実行後]実行前は”A1”セルがアクティブでしたが、Resizeプロパティで範囲を6行2列に変更しています。それをOffsetプロパティで1行と5列移動して、"F2:G7"が選択されています。ValueとOffsetで相対位置に値を入力する方法ValueとOffsetで相対位置に値を入力するには、次のようにします。入力する値それでは、次のサンプルコードで実際に使い方を見てみましょう。3).Valueです。元の範囲の値であるrng.Valueを入力しているため相対位置に範囲の値がコピーされています。実行後の画像から、Offsetで指定した相対位置に範囲の値がコピーされていることが確認できます。まとめいかがでしたか?今回は、Range.Offsetの使い方について解説しました。Range.Offsetでは、ある範囲を基準にして別の範囲を相対指定で扱うことができます。相対指定で扱うことで、シート上にある表の行番号や列番号を分かりやすく表現できます。Range.Offsetを使い、ある範囲を基準にして別の範囲を扱う機会があれば、この記事を思い出してください!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。マコトフリーランスのエンジニアです。最近では、プログラミング関連の記事を作成するライターとしても活動しています。趣味と業務の両方でプログラミング言語をいくつも学んできたのでその経験を活かして分かりやすい記事を作成できればと考えています。