質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

6061閲覧

特定のセルでEnterを押すと、指定したセルに移動させたい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2023/07/14 04:46

編集2023/07/14 06:20

実現したいこと

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に詳しい方、ご教示下さい。よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bebebe_

2023/07/14 05:00

⑭のセル位置はAA27ですか?
退会済みユーザー

退会済みユーザー

2023/07/14 05:04

はい、14のセルがAA27です。 1がB4、5がX4、7がAA20 です。
bebebe_

2023/07/14 05:37 編集

自分の環境で試したことのコードをコピペしてAA27が選択されたらB4に飛ばされますが⑤に飛びますか? それと丸数字のセル以外がロックされていて選択できない状態ということですよね?
退会済みユーザー

退会済みユーザー

2023/07/14 05:44

再度実行してみましたが5に飛びますね・・・ 丸数字以外の部分はロック・保護で選択できない状態になっています。
bebebe_

2023/07/14 05:55

今のコードだとAA27が選択されたらGotoが動作するのでAA26からEnterを押したらX4に飛んでるということですよね?
退会済みユーザー

退会済みユーザー

2023/07/14 06:11

いえ、AA26が選択されているときにEnterを押す→AA27が選択される→Enterを押す→X4に飛ぶ といった動作をします。 AA27も入力を行いたいセルなので、AA27が選択され、その後Enterを押したらB4に飛ぶようにしたいのです。
bebebe_

2023/07/14 06:18

試しに「Application.Goto Reference:=Cells(4, 2), Scroll:=True」を「MsgBox ("test")」に代えてAA26からエンターを押した場合にメッセージボックスが表示されますか?
退会済みユーザー

退会済みユーザー

2023/07/14 06:23

代えてみましたが、メッセージボックスは表示されませんでした。 つまり If Target.Address = "$AA$27" Thenがtrueになっていないということですよね?
bebebe_

2023/07/14 06:26

「If Target.Address Like "$AA*" Then」内に記述してAA列でEnterを押せば表示さますか?
退会済みユーザー

退会済みユーザー

2023/07/14 06:35

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に移動しました。
bebebe_

2023/07/14 06:45

ああいえ最初のif文が機能してるか確認したかっただけです。 このコードからMsgBoxを消せば求めている動作をしてますか?
guest

回答2

0

If Target.Address = "$AA$27" Then

AA27セルがAA27・AB27・AC27の結合セルであったため上記のIF文に入れなかったのが、X4セルに移動してしまっていた原因。
また、トリガーにAA27を指定するとAA27が選択された時点でB4セルに飛んでしまうので、空白セルになっていたAA31をトリガーに変更。

以上を踏まえ、下記が最終コードとなりました。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.MoveAfterReturnDirection = xlToRight If Target.Address Like "$AA*" Then If Intersect(Range("$AA$31"), Target) Is Nothing Then Application.MoveAfterReturnDirection = xlDown Else Application.Goto Reference:=Cells(4, 2) End If End If End Sub

投稿2023/07/14 07:25

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

結合セルだからでは。Addressは"AA27"ではなく"AA27:AC27"になっている可能性が高いと思います
こう変更してみてください。

VBA

1 2 If Target.Address Like "$AA*" Then 3 'AA27じゃないときは下に 4 If Intersect(Range("AA27"),Target) Is Nothing Then 5 Application.MoveAfterReturnDirection = xlDown 6 else 7   Application.Goto Reference:=Cells(4, 2), Scroll:=True ′➀のセル 8  Application.MoveAfterReturnDirection = xlToRight 9 end if 10End If

試してないので誤作動が起こるかもしれませんが(AA27が飛ばされるかも?)、コメント欄で記述しにくかったので回答枠使わせていただきました。

投稿2023/07/14 06:41

pig_vba

総合スコア808

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/07/14 06:47

仰る通り、AA列はAA~ACの結合セルです! AA26でEnterを押すとにB4に飛んでしまいますね。
pig_vba

2023/07/14 06:50

では少々回りくどい手段ですが、あえてAA28セルをロック解除(セル選択できるように)して、AA28がアクティブになったときに飛ばす、というのはどうでしょうか。 AA28自体はクリックはできますがクリックしてもB4に飛ぶ、といった挙動になると思うので入力は回避できると思います。
退会済みユーザー

退会済みユーザー

2023/07/14 07:02

AA28は計算式の入っているセルのためロックを外すのはまずいかなと思いましたので、AA31が余白用のセルになっていたのでこちらをロック解除。 If Intersect(Range("AA31"), Target) Is Nothing ThenにしたところAA27を入力・EnterでB4セルに飛ぶようになり、期待通りの挙動になりました! 大変ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問