大体でIT
大体でIT
Excel VBAでRangeやCellsのセル範囲を移動する方法についてご紹介します。使うVBA関数は、『Offset』です。Offsetを使えば、簡単に、表のデータから値のみを取得することができます。
この記事では、RangeやCellsのセル範囲を移動する方法についてご紹介します。
Offsetの使いどころとしては、『表のデータから値のみを取得する』場合です。
表は基本的に、見出しがありますので、CurrentRegionで取得すると簡単ですけども、見出しがついてきちゃいます。
Offsetを使えば、見出しなしで、値のみを取得できますので、便利です。
では、セル範囲を移動する『Offset』について、解説してきます。
- Offsetを使ってセル範囲を移動する
- 表のデータから値のみを取得する
初めに、ポイントとなるVBAコードについて、ご紹介します。
VBAコードだけ確認したい場合に、ご活用ください。
Cells(1, 1).Offset(2, 3).Select 'Cellsを2行と3列だけ移動する
Range("A1").Offset(2, 3).Select 'Rangeをを2行と3列だけ移動する
RangeやCellsの範囲を移動するには、『Offset』を使います。
Offsetの使い方を、具体的なVBAコードを交えて、解説していきます。
『Range("A1").Offset(行, 列)』
行や列には、移動させたい、行数と列数を入力します。
Offsetを使うイメージは、次のような感じです。
Offsetのイメージ
セルA1から、Offsetで、2行3列だけ移動させています。
では、実際に『Offset』を使って、VBAコードを書いてみましょう。
Cellsのセル範囲を移動
セルA1を、Offsetを使って、2行3列だけ移動して、セルを選択してみます。
『.Offset(2, 3)』というように、入力します。
Sub TEST1()
'Cellsを2行と3列だけ移動
Cells(1, 1).Offset(2, 3).Select
End Sub
セルA1を、2行と3列移動させると、セルD3となりますので、Offsetでうまく移動ができました。
Offsetには、マイナスの値も入力することができます。
Offsetにマイナスの値を入力してみる
セルD3を、Offsetを使って、2行戻して、3列戻してみます。
『.Offset(-2, -3)』というように、入力します。
Sub TEST2()
'Cellsを2行と3列だけ戻る
Cells(3, 4).Offset(-2, -3).Select
End Sub
Offsetに、マイナスの値を入力すれば、セル範囲を戻すことができます。
Rangeのセル範囲を、Offsetを使って移動してみます。
どちらかというと、OffsetはRangeと一緒に使う方が多いです。
Range("A1:B2")のセル範囲を、2行と3列だけ移動して、選択してみます。
Sub TEST3()
'Rangeを2行と3列だけ移動する
Range("A1:B2").Offset(2, 3).Select
End Sub
Rangeのセル範囲を移動
結果は、Range("D3:E4")の範囲が選択されました。
Range("A1:B2")を2行と3列だけ移動すると、Range("D3:E4")となりますので、Offsetでうまく移動できています。
セル範囲を移動させるだけ、なんてあまり使わないと思います。
次に、Offsetを使った実用的な列をご紹介していきます。
Offsetは、表のデータを取得する際に、活躍してくれます。
なので、CurrentRegionなどで表のデータを取得すると、見出しまで取得しちゃいます。
こんなときに、Offsetを使うと、表のデータから、値の部分だけを取得することができます。
作ってみた表のデータ
取得だとわかりづらいので、まずは、セル範囲を選択からやってみます。
値のみを選択
表のデータから、値のみを選択するVBAコードです。
Sub TEST4()
'表の値だけを選択
With Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Offset(1, 0).Select
End With
End Sub
- 表全体を取得
- 1行だけ小さくする
- 1行だけ下に移動する
選択できるということは、表の値だけのセル範囲を取得できているので、値を取得することも、もちろんできます。
CurrentRegionで表全体を取得
まずは、CurrentRegionで、表全体を取得します。
CurrentRegionは、同じ表と認識できるセル範囲を、一発で取得してくれるVBA関数です。
Sub TEST5()
'表の範囲を設定
Range("A1").CurrentRegion.Select
End Sub
「.CurrentRegion」の使い方について、詳
CurrentRegionを使えば、表を全て選択することができます。便利な関数です。
Resizeで1行だけ小さくする
次は、「.Resize」で「1行だけ」小さくします。
「.Resize」は、セル範囲の大きさを、変更するVBA関数となります。
- .Resize(2, 3):セル範囲を、2行3列にする
- .Resize(1):セル範囲を、1行にする
- .Resize(,2):セル範囲を、2列にする
「.Resize」の使い方について、詳細はこちらにまとめています。
Sub TEST6()
'セル範囲を1行減らす
With Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Select
End With
End Sub
Offsetで1行だけ下に移動
あとは、『Offset』で1行だけ下に移動すると、表の値だけを選択することができます。
Sub TEST7()
'表の値だけを選択
With Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Offset(1, 0).Select
End With
End Sub
1行だけ下に移動して、値のみを選択することができました。
では、表の値のみを選択できましたので、次は、値のみを取得してみます。
表のデータから値のみを取得
Sub TEST8()
Dim A
'表の値だけを選択
With Range("A1").CurrentRegion
A = .Resize(.Rows.Count - 1).Offset(1, 0)
End With
End Sub
配列になっているので、ちょっと見ずらいですけども、ちゃんと値のみ取得できています。
こんな感じで、Offsetは、表のデータから値を取得するときに、活躍します。
この記事では、セル範囲を移動させる『Offset』について、解説しました。
Offsetは、CellsでもRangeでも使えます。
どちらかというと、Rangeと組み合わせて、値を取得するのに使われるのが多いです。
Offsetを使うメリットは、表のデータから値のみを取得したい、という場合に便利なことですね。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。