実現したいこと
Enter時に任意のセルに移動するVBAを記述する
前提
社内で使用する報告書のフォーマットを作成しています。
主にPC初心者が入力する機会が多い為、可能な限り入力→Enter→入力→Enter→入力→Enter...だけで完成させられるようにセルの移動を制御したいです。
発生している問題・エラーメッセージ
Excelのオプション→詳細設定でEnter時のセルの移動方向を右に設定し、入力用以外のセルはロック・ワークシートの保護をかけています。
また、下記コードにて⑥の大きなセルが何度も選択されないように⑦のある列(AA列)に入るとEnter時の移動方向の設定が右方向に変わるようにしています。
該当のソースコード
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address Like "$AA*" Then Application.MoveAfterReturnDirection = xlDown Else Application.MoveAfterReturnDirection = xlToRight End If End Sub
問題点はここからです。
⑭までセルが移動し、次にEnterを押した時は➀のセル(B4)に移動して、Enter時の移動方向を右に戻るようにしたいのですが、現状は⑤に移動してしまいます。これを➀に移動できるようにコードを記述したいです。
試したこと
こちらのサイトを参考にIf文を記述しましたが、挙動が変わりませんでした。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address Like "$AA*" Then Application.MoveAfterReturnDirection = xlDown If Target.Address = "$AA$27" Then '⑭のセル Application.Goto Reference:=Cells(4, 2), Scroll:=True ′➀のセル Application.MoveAfterReturnDirection = xlToRight End If Else Application.MoveAfterReturnDirection = xlToRight End If End Sub
どなたかVBAに詳しい方、ご教示下さい。よろしくお願い致します。
⑭のセル位置はAA27ですか?

はい、14のセルがAA27です。
1がB4、5がX4、7がAA20 です。
自分の環境で試したことのコードをコピペしてAA27が選択されたらB4に飛ばされますが⑤に飛びますか?
それと丸数字のセル以外がロックされていて選択できない状態ということですよね?

再度実行してみましたが5に飛びますね・・・
丸数字以外の部分はロック・保護で選択できない状態になっています。
今のコードだとAA27が選択されたらGotoが動作するのでAA26からEnterを押したらX4に飛んでるということですよね?

いえ、AA26が選択されているときにEnterを押す→AA27が選択される→Enterを押す→X4に飛ぶ
といった動作をします。
AA27も入力を行いたいセルなので、AA27が選択され、その後Enterを押したらB4に飛ぶようにしたいのです。
試しに「Application.Goto Reference:=Cells(4, 2), Scroll:=True」を「MsgBox ("test")」に代えてAA26からエンターを押した場合にメッセージボックスが表示されますか?

代えてみましたが、メッセージボックスは表示されませんでした。
つまり
If Target.Address = "$AA$27" Thenがtrueになっていないということですよね?
「If Target.Address Like "$AA*" Then」内に記述してAA列でEnterを押せば表示さますか?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address Like "$AA*" Then
MsgBox ("test")
Application.MoveAfterReturnDirection = xlDown
If Not Intersect(Target, Range("AA27")) Is Nothing Then
MsgBox ("test")
Application.MoveAfterReturnDirection = xlToRight
End If
Else
Application.MoveAfterReturnDirection = xlToRight
End If
End Sub
このようなコードということでしょうか。
AA列のセルに移動するたびにメッセージボックスが表示され、AA26でEnterを押すと2回メッセージボックスが表示され、B4に移動しました。
ああいえ最初のif文が機能してるか確認したかっただけです。
このコードからMsgBoxを消せば求めている動作をしてますか?

回答2件
あなたの回答
tips
プレビュー