| ○基本 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 |