コントロールのタブオーダーを設定する(TabIndex,TabStopプロパティ)

ユーザーフォームに設置したコントロールのタブオーダーを設定するには TabIndex プロパティを使用します。タブオーダーというのは、タブキーが押されたときにフォーカスが移動する順番のことです。ここでは Excel のユーザーフォームで TabIndex プロパティを使ってコントロールのタブオーダーを設定する方法、および TabStop プロパティを使ってコントロールがフォーカスを受け取らないように設定する方法について解説します。

(Last modified: )

タブオーダーを設定する(TabIndex)

ユーザーフォームに設置したコントロールのタブオーダーを設定するには TabIndex プロパティを使用します。デフォルトでは TabIndex の値はユーザーフォームに追加された順番に 0, 1, 2, ... と割り当てられていきます。

タブオーダーを設定する(TabIndex)(1)

タブオーダーを設定する(TabIndex)(2)

TabIndex プロパティの値は重複した値は設定できません。コントロールの TabIndex プロパティの値を変更すると、自動的にそれ以外のコントロールの TabIndex プロパティの値は変更されます。例えば元々 3 のコントロールを 1 に変更すると、 1 だったコントロールが 2 に変わり、 2 だったコントロールが 3 に変わります。

コントロールのタブオーダーを設定するには TabIndex プロパティをクリックし、値を直接編集してください。

タブオーダーを設定する(TabIndex)(3)

変更した結果、このユーザーフォームに表示されているコントロールのタブオーダーは次のようになりました。

タブオーダーを設定する(TabIndex)(4)

それではユーザーフォームを表示したあと TAB キーを押してフォーカスを移動させてみます。すると先ほど設定したタブオーダーの順番にフォーカスが移動しました。

タブオーダーを設定する(TabIndex)(5)

タブオーダーを設定する(TabIndex)(6)

タブオーダーを設定する(TabIndex)(7)

タブオーダーを設定する(TabIndex)(8)

このように TabIndex プロパティの値を変更することで、タブオーダーを設定することができます。

タブキーで移動したときにフォーカスを受け取らない(TabStop)

TAB キーを押していくとフォーカスが順に移動していきますが、フォーカスを受け取らないように設定するには TabStop プロパティを使用します。デフォルトでは TabStop の値は「True」になっておりフォーカスを受け取ります。

タブキーで移動したときにフォーカスを受け取らない(TabStop)(1)

フォーカスを受け取らないように設定するには TabStop プロパティの項目をクリックしてください。そして表示されたドロップダウンメニューをクリックし、「False」をクリックしてください。

タブキーで移動したときにフォーカスを受け取らない(TabStop)(2)

なお TabStop プロパティの値を変更しても TabIndex プロパティの値に影響はありません。フォーカスを受け取る順番が来ても受け取らず、その次のコントロールにフォーカスが移動します。

今回は例として次のコントロールの TabStop プロパティの値を「False」に変更しました。

タブキーで移動したときにフォーカスを受け取らない(TabStop)(3)

それではユーザーフォームを表示したあと TAB キーを押してフォーカスを移動させてみます。すると先ほど TabStop プロパティの値を「False」に設定したコントロールはフォーカスを受け取らずに次のコントロールがフォーカスを受け取りました。

タブキーで移動したときにフォーカスを受け取らない(TabStop)(4)

タブキーで移動したときにフォーカスを受け取らない(TabStop)(5)

VBAのプログラムの中でTabIndexプロパティを設定する

プロパティウィンドウを使って TabIndex プロパティの値を変更する代わりに、 VBA のコードを記述して TabIndex プロパティの値を変更することもできます。

プログラムの中で TabIndex プロパティを設定する場合は次の書式を使用します。

オブジェクト.TabIndex [= Integer ]

対象のオブジェクトの TabIndex プロパティに対してタブオーダーを表す数値を代入してください。数値は 0 から始まる数値です。負の値を代入するとエラーとなります。

またプロパティウィンドウを使って TabStop プロパティの値を変更する代わりに、 VBA のコードを記述して TabStop プロパティの値を変更することもできます。

プログラムの中で TabStop プロパティを設定する場合は次の書式を使用します。

オブジェクト.TabStop [= Boolean ]

対象のオブジェクトの TabStop プロパティに対して「True」または「False」を代入してください。「True」を設定するとフォーカスを受け取ります。「False」を設定するとフォーカスを受け取りません。

サンプルコード

簡単なサンプルで試してみます。ユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャを作成し、その中で TabIndex プロパティの値を設定します。ユーザーフォームが表示される前にコントロールのプロパティの設定が行われます。

Initialize イベントに対するイベントプロシージャの使い方については「ユーザーフォームを表示する直前に発生するイベント(Initializeイベント)」を参照されてください。

ユーザーフォームのコントロールが何もないところをダブルクリックしてください。

VBAのプログラムの中でTabIndexプロパティを設定する(1)

ユーザーフォームの規定のイベントである Click イベントに対するイベントプロシージャが表示されます。

VBAのプログラムの中でTabIndexプロパティを設定する(2)

今回はユーザーフォームの Initialize イベントに対するイベントプロシージャ使用するので、コードウィンドウで次のようにイベントプロシージャを追加で記述してください。

Private Sub UserForm_Initialize()
    TextBox1.TabIndex = 0
    TextBox2.TabIndex = 1
    CommandButton1.TabIndex = 2
    CommandButton2.TabIndex = 3

    TextBox2.TabStop = False
End Sub

VBAのプログラムの中でTabIndexプロパティを設定する(3)

これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。

VBAのプログラムの中でTabIndexプロパティを設定する(4)

ユーザーフォームが表示されました。

VBAのプログラムの中でTabIndexプロパティを設定する(5)

TAB キーを押すと、タブオーダーの順番通りにフォーカスが移動していきますが、今回 2 番目のコントロールであるテキストボックスの TabStop プロパティの値に「False」を設定してあるのえ、その次のコントロールにフォーカスが移動します。

VBAのプログラムの中でTabIndexプロパティを設定する(6)

このように VBA のプログラムの中で TabIndex プロパティおよび TablStop プロパティの値を変更することができました。

-- --

Excel のユーザーフォームで TabIndex プロパティを使ってコントロールのタブオーダーを設定する方法、および TabStop プロパティを使ってコントロールがフォーカスを受け取らないように設定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。