『セルに入力後、次の入力セルへ移動するには』(ざっくばらん)
お願いします。
A1セルに値を入力後、改行すると次のB5セルに移動する方法を調べたら次のようなプログラムを知りました。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ExitHandler
' 例: A1セルで入力後にEnterを押したらB5へ移動
If Not Intersect(Target, Me.Range("e4")) Is Nothing Then
Application.EnableEvents = False
Me.Range("e6").Select
End If
ExitHandler:
Application.EnableEvents = True
End Sub
上記のプログラムで移動することはできたのですが、
更にB5セルに入力した後、C10セルへ移動させたい場合はどのように
プログラムすればよいのでしょうかよろしくお願いします。
< 使用 Excel:unknown、使用 OS:unknown >
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ExitHandler
If Target.CountLarge > 1 Then Exit Sub
Application.EnableEvents = False
If Not Intersect(Target, Range("A1")) Is Nothing Then
Range("B5").Select
ElseIf Not Intersect(Target, Range("B5")) Is Nothing Then
Range("C10").Select
End If
ExitHandler:
Application.EnableEvents = True
End Sub
(もうすぐ7月) 2026/06/30(火) 16:03:30
■1
>コードの意味が分からないので、そのまま使用しました。
さすがに危なすぎます。
一応、マクロを使ってファイルやシステムを破壊をすることも可能なので、よくわからないのをそのまま採用するのはセキュリティの観点から避けるべきです。
また、セキュリティ以外にコードを記述した以上、責任者はあなたなので、想定外の動作になったときに何がマズイかわかってないと非常に困ったことになるとおもいます。
したがって、わからない命令はネットで調べてみて、それでもわからなければ追加質問するなりすることをお勧めします。
--------------------------------------- 以下は興味がある場合だけ読んでみてください。 ---------------------------------------
■2
最初のコードを疑似コードにしてみると、以下のような命令になっています。
Private Sub このワークシートでセルの書き換えがあったときに発動するマクロです(ByVal Target As Range)
もしも 書き換えのあったセルにE4セルが含まれていたら
イベントの発生を一時的に無効にして
E6セルを選択しなさい
もしもの話はおしまいです
ExitHandler:
イベントの発生を有効にします
End Sub
したがって、上記で「A1セル」の数字を書き換えたあと「B5セル」が選択されたということであれば、ただの勘違いでしょう。
仰る条件であれば、以下のようになるはずです。(必要のない部分は削っています(■5を参照))
Private Sub Worksheet_Change(ByVal Target As Range)
'▼A1セルを含むセル(範囲)が書き換えられたか判定
If Not Intersect(Target, Range("A1")) Is Nothing Then
Range("B5").Select
End If
End Sub
■3
今回であれば、書き換えのあったセルがB5のときの処理を追加したいのですから、単純にIF〜End IFのセットを別途追加すればよいです。
Private Sub Worksheet_Change(ByVal Target As Range)
'▼A1セルを含むセル範囲が書き換えられたか判定
If Not Intersect(Target, Range("A1")) Is Nothing Then
Range("B5").Select
End If
'▼B5セルを含むセル範囲が書き換えられたか判定
If Not Intersect(Target, Range("B5")) Is Nothing Then
Range("C10").Select
End If
End Sub
■4
なお、ChangeイベントはTargetが複数セルになることがあり得ます。
よくあるところでは、セル範囲をまとめてクリアしたり、コピペしたりする場合が該当します。
(もちろん、複数セルを選択した状態で入力し Ctrl + Enterで確定しても複数セルの書き換えになります)
この点について、もうすぐ7月さんのコードでは↓の部分で単一セルのみを書き換えた場合以外は即終了になっています。
If Target.CountLarge > 1 Then Exit Sub
また、上記を消したとしても、IF関数で分岐させていますので(一度に)書き換えられたセル範囲にA1セルが含まれている場合は、B5が含まれているかどうかの判定には進みません。
採用するならば、そういったところも理解されたほうがよいとおもいます。
■5
このほか、今回のケースでは↓は不要です。
Application.EnableEvents = False
マクロ中にセルに書き込むような命令があれば、その動作が自分自身を呼び出して、呼び出されたものが自分自身を呼び出して・・・という状態に陥るため、イベント発生のチェックを一時的に無効にする必要がありますが、今回はSelectしているだけなので関係ありません。
(もこな2) 2026/06/30(火) 18:47:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.