単に、Changeイベントでもよいのですが、実際に、数値を入れるとか入れないとか、というのは、ユーザーの問題ですから、以下のマクロは、「Enter」に反応するように作られています。
つまり、入れない場合でも、Enterを入れれば、セルの移動が出来るようにしてありますが、結構、大掛かりなものになってしまいます。
別に、細かい設定を説明したりするつもりがありませんので、よろしかったら、お試しください。
標準モジュールの一番上に、ユーザー設定の場所がありますから、そこに書き込んでくれれば、ご希望どおりになりますが、キーは、必ず、「,(カンマ)」で区切らないといけません。
指定以外の場所にセルポインタがある場合は、Enter を入れれば、最初の場所(例A1)に戻ります。
'--------------------------------------------------
'ThisWorkbookへ
Option Explicit
Private Sub Workbook_Activate()
Dim myKey As String
On Error Resume Next
myKey = Mid$(MYKEYS, 1, InStr(MYKEYS, ",") - 1)
Application.Goto Worksheets(MYSHEET).Range(myKey)
'別のブックから、このブックへ来た場合
Call SetKeys
End Sub
Private Sub Workbook_Deactivate()
'別のブックを作業している時
Call SetOffKeys
End Sub
Private Sub Workbook_Open()
Dim myKey As String
'開けたとき
On Error Resume Next
myKey = Mid$(MYKEYS, 1, InStr(MYKEYS, ",") - 1)
Application.Goto Worksheets(MYSHEET).Range(myKey)
Call SetKeys
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'閉じる前
Call SetOffKeys
End Sub
'--------------------------------------------------
'=================================================
'標準モジュール
'-------------------------------------------------
Option Explicit
'===================================
'キーの設定(ユーザー設定)
Public Const MYKEYS As String = "A1,A5,C1"
Public Const MYSHEET As String = "Sheet1"
'===================================
Private myKeyAr As Variant 'キーを格納する配列変数
Sub SetKeys()
'設定用
Application.OnKey "~", "ReturnDirectrion2Cell"
Application.OnKey "{Enter}", "ReturnDirectrion2Cell"
End Sub
Sub SetOffKeys()
'解除用
Application.OnKey "~"
Application.OnKey "{Enter}"
End Sub
Private Sub ReturnDirectrion2Cell()
Dim i As Long
Dim myAdd As String
Dim NextAdd As String
'変数の確保をチェック
If IsArray(myKeyAr) = False Then
myKeyAr = Split(MYKEYS, ",")
End If
'除外条件
If ActiveSheet.Name <> MYSHEET Then
ActiveCell.Offset(1).Select
Exit Sub
End If
myAdd = ActiveCell.Address(0, 0)
For i = LBound(myKeyAr) To UBound(myKeyAr)
If StrComp(myKeyAr(i), myAdd) = 0 Then
If i < UBound(myKeyAr) Then
NextAdd = myKeyAr(i + 1)
Exit For
Else
NextAdd = myKeyAr(0)
End If
End If
Next i
If NextAdd <> "" Then
Range(NextAdd).Select
Else
Range(myKeyAr(0)).Select
End If
End Sub
お礼
詳しくありがとうございます。 試してみます。