TOP > VBA基本講座 > [Offsetプロパティ] 

○基本
B2から見てOffset(行方向,列方向)*上と左は負の数
 Offset(-1,-1) Offset(-1,0) Offset(-1,1)
 Offset(0,-1)   B2   Offset(0,1)
 Offset(1,-1) Offset(1,0) Offset(1,1)

○使用例
Sub オフセット1()
Range("A1").End(xlDown).Select 'A列下方向の終端を選択する
 'Selection.Offset(1,0).Select または
Selection.Offset(1).Select '下に1つオフセットで、入力セル選択
End Sub

Sub オフセット2() '上と同じ結果
Range("A65536").End(xlUp).Select 'A列上方向の終端
Selection.Offset(1).Select '下に1つオフセット
End Sub
Sub オフセット3()
Range("A1").End(xlToLeft).Select '1行目左方向の終端
Selection.Offset(, 1).Select '右に1つオフセット
End Sub

Sub オフセット4()
値 = ActiveCell.Offset(, 1).Value’アクティブセルから1つ右の値
End Sub

Sub オフセット5()
Cells(.Row + 1, .Column).Activate ’下に1つ移動
'Cells(.Row, .Column + 1).Activate '右に1つ移動
'Range("A" & .Row + 1).Activate '下に1つ移動
End Sub

Private Sub CommandButton1_Click()
'ボタンを押す毎に、ActiveCellを下に移動する場合
'(CommandButton1のClickに記述します)
ActiveCell.Offset(1,0 ).Activate 
End Sub

○応用例
住所録を電話番号で検索、TextBox2にその行を表示
 シート2に該当行を転記するマクロを作ります
[1]A列にID、B列に名前、C列住所、D列電話番号が
入力されているシートを準備
[2]UserForm1にCommandButton1とTextBox1、TextBox2を配置
TextBox1は電話番号が入力できる大きさ
TextBox2は複数行(4行)が表示できる大きさで

[3]UserForm1を表示するプロシージャ(マクロ)を作る
Sub myformshow()
UserForm1.Show
End Sub

[4]UserForm1のInitializeイベント時(表示される直前)に
 必要な設定をする。
(UserFormのInitializeに記述します)
Private Sub UserForm_Initialize()
TextBox1.MultiLine = True '複数行表示を可にする
TextBox1.SetFocus ’入力するので、TextBox1にフォーカス取得
End Sub

[5]TextBox1に電話番号を入力して、CommandButton1を押したと
きのプロシージャをつくる
(CommandButton1のClickに記述します)
Private Sub CommandButton1_Click()
Dim myFindNo As String
Dim myCells As Object
With Worksheets(1)
maxRow = .Range("D65536").End(xlUp).Row '最下行を取得
 '電話番号は文字列扱いにする
.Columns("D:D").NumberFormatLocal = "@"
'検索したい電話番号はTextBox1に入力しておく
myFindNo = TextBox1.Value 
Set myCells = .Range("D2:" & "D" & maxRow). _
Find(myFindNo, LookAt:=xlWhole) 'D列(電話番号)を検索
End With
If myCells <> "" Then '見つかったとき
'そのセルをアクティブにする(その行を表示するので)
myCells.Activate 
With ActiveCell
'TextBox2に複数行で表示(ID、名前、住所、電話番号)
TextBox2.Value = .Offset(0, -3) & Chr(13) & _
.Offset(0, -2) & Chr(13) & .Offset(0, -1) _
& Chr(13) & myFindNo
End With
With Worksheets(2) 'シート2に転記のオマケ
maxRow2 = .Range("A1").CurrentRegion.Rows.Count + 1 '入力行
.Columns("D:D").NumberFormatLocal = "@" '文字列扱い
.Cells(maxRow2, 1).Value = ActiveCell.Offset(0, -3).Value
.Cells(maxRow2, 2).Value = ActiveCell.Offset(0, -2)
.Cells(maxRow2, 3).Value = ActiveCell.Offset(0, -1)
.Cells(maxRow2, 4).Value = myFindNo
End With
Else
MsgBox "見つかりませんでした"
End If
End Sub

TOP