【Excel VBA】UserFormでEnterキーを押したら次の入力欄へ移動する方法

みなさんこんにちは。

Excel VBAでUserFormを作成していると、TextBoxへ入力したあとにマウスやTabキーを使わず、Enterキーだけで次の入力欄へ移動したい場面があるかと思います。

このような場合は、TextBoxのKeyDownイベントでEnterキーを判定し、SetFocusを使って次のTextBoxへフォーカスを移動できます。

今回は、UserFormでEnterキーを押したら次の入力欄へ移動する方法をご紹介したいと思います。

この記事はこんな人におすすめ

  • UserFormへ複数のTextBoxを配置している人
  • Enterキーで次の入力欄へ移動したい人
  • KeyDown・KeyCode・SetFocusの使い方を知りたい人

今回作成するUserForm

今回はUserFormへTextBox1、TextBox2、TextBox3を上から順番に配置します。例えば「氏名」「部署」「電話番号」など、連続して入力する画面をイメージしてください。

Excel VBAのUserFormにTextBoxを3つ配置した画面

KeyDownイベントでEnterキーを判定する

まずTextBox1をダブルクリックし、KeyDownイベントへ次のコードを記述します。

Private Sub TextBox1_KeyDown( _
    ByVal KeyCode As MSForms.ReturnInteger, _
    ByVal Shift As Integer)

    '========================================
    ' Enterキーが押されたか判定する
    '========================================
    If KeyCode = vbKeyReturn Then

        'Enterキー本来の動作を無効にする
        KeyCode = 0

        '次の入力欄へフォーカスを移動する
        Me.TextBox2.SetFocus

    End If

End Sub

vbKeyReturnはEnterキーを表します。Enterキーが押されたときだけ処理し、TextBox2.SetFocusで次の入力欄へ移動します。

KeyCodeを0にする理由

Enterキーを判定したあとにKeyCode = 0としておくと、Enterキー本来の動作をキャンセルできます。

UserFormに既定ボタンがある場合など、Enterによって別の処理まで実行されることを防ぎやすくなります。

複数のTextBoxへ展開する

TextBox2でも同じようにKeyDownイベントを記述すれば、Enterキーだけで順番に入力欄を移動できます。

Private Sub TextBox2_KeyDown( _
    ByVal KeyCode As MSForms.ReturnInteger, _
    ByVal Shift As Integer)

    '========================================
    ' EnterキーでTextBox3へ移動する
    '========================================
    If KeyCode = vbKeyReturn Then

        'Enterキー本来の動作を無効にする
        KeyCode = 0

        '次のTextBoxへフォーカスを移動する
        Me.TextBox3.SetFocus

    End If

End Sub

TextBox1へ入力してEnterを押すとTextBox2へ、TextBox2でEnterを押すとTextBox3へ移動します。

Excel VBAのUserFormでEnterキーを押して次のTextBoxへフォーカスを移動した画面

入力欄が多い場合の考え方

TextBoxが数個であれば、それぞれのKeyDownイベントへ次の移動先を記述する方法が分かりやすいかと思います。

入力欄が多い場合は、UserFormのTabIndexも整理しておくと、Tabキーで移動する場合の順番も統一できます。

注意点

複数行入力を行うTextBoxでは、Enterキーを改行として使用したい場合があります。そのようなTextBoxまで同じ処理を設定すると改行できなくなるため、用途に応じて設定してください。

また、UserFormにCommandButtonを配置し、DefaultプロパティをTrueにしている場合はEnterキーでボタンが実行されることがあります。今回のようにKeyDownで処理する場合は動作も確認しておくと安心です。

最後に

いかがでしたでしょうか。

今回は、Excel VBAのUserFormでEnterキーを押したら次の入力欄へ移動する方法をご紹介しました。

KeyDownでEnterキーを判定し、SetFocusを使うことで、マウスを使わずに連続して入力できるUserFormを作成できます。

入力作業の多いUserFormを作成するときに、少しでも参考になれば幸いです。

開発依頼について

ココナラでWebスクレイピング開発サービスを出品しております。

自分で開発をしようと思ったけど、VBAでのネット記事が少なく困っている方も多いかと思います。

そんな方はいつでもお気軽にご相談ください。

また、本ブログからご依頼いただいた方については割引特典がございますので、

ご不明点と合わせてメッセージをいただけると幸いです。

Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!

Webスクレイピング以外にもWebアプリの開発サービスも出品しております。

こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、

お気軽にご相談ください。

スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?

ご興味がある方はこちら!!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA