はじめに
VBAのユーザーフォームで、テキストボックスやボタンを配置した後に Tab
キーを押すと、フォーカスが意図しない順番で飛んでしまい、使いにくいと感じたことはありませんか?
このフォーカスが移動する順番のことを「タブオーダー」と呼びます。タブオーダーが入力項目の流れに沿って自然に設定されていると、キーボードだけでスムーズに入力作業を進めることができ、フォームの操作性が格段に向上します。
この記事では、ユーザーフォームのタブオーダーを正しく設定するための2つの方法(手動設定とVBAコードによる設定)を分かりやすく解説します。
方法1: 「タブオーダー」ダイアログで設定する(手動)
最も簡単で直感的なのが、VBE(VBAエディタ)の機能を使って手動で設定する方法です。
- VBEで、設定したいユーザーフォームをデザインビューで開きます。
- フォームの何もないところをクリックして、フォーム自身を選択状態にします。
- メニューバーから「表示」→「タブオーダー」を選択します。
- 「タブオーダー」ダイアログボックスが表示されます。リスト内のコントロール名を選択し、「上へ」「下へ」ボタンで、フォーカスを移動させたい順番(上から順)に並べ替えます。
- 「OK」をクリックすれば設定完了です。
ほとんどの場合、この手動での設定が最も早く、確実です。
方法2: VBAコードで TabIndex
を設定する
何らかの理由で、フォームが表示される際に動的にタブオーダーを変更したい場合は、VBAコードで各コントロールの .TabIndex
プロパティを設定します。
このコードは、フォームが表示される直前の UserForm_Initialize
イベント内に記述するのが一般的です。
ユーザーフォームのコード
' フォームが初期化されるときに実行されるイベント
Private Sub UserForm_Initialize()
' TabIndexプロパティでタブオーダーを0から順に設定
' 0が最初のフォーカス
Me.Name_TextBox.TabIndex = 0
Me.Department_ComboBox.TabIndex = 1
Me.Role_OptionButton1.TabIndex = 2
Me.Role_OptionButton2.TabIndex = 3
Me.Submit_Button.TabIndex = 4
Me.Cancel_Button.TabIndex = 5
' 最初のコントロールにフォーカスを当てる
Me.Name_TextBox.SetFocus
End Sub
コードの解説
.TabIndex
: 各コントロールが持つプロパティで、タブオーダーの順序を整数で指定します。0
から始まる:TabIndex
は0
から始まる連番です。0
が最初にフォーカスを受け取るコントロール、1
が次に受け取るコントロール、となります。- 連番である必要はない: 必ずしも連番でなくても、数値の小さい順にフォーカスは移動します。しかし、
0
からの連番で管理するのが最も分かりやすいでしょう。 - 重複は不可: 同じ
TabIndex
を持つコントロールが複数あると、意図しない順序でフォーカスが移動する可能性があるため、番号は重複しないように設定します。
手動設定と同様に、VBAで設定する場合も、ユーザーが入力するであろう自然な流れ(上から下、左から右)に沿って TabIndex
を割り振ることが、使いやすいフォームを作る上での鍵となります。
まとめ
今回は、ユーザーフォームの操作性を向上させる「タブオーダー」の設定方法について解説しました。
- タブオーダーは、ユーザーが
Tab
キーを押したときにフォーカスが移動する順番のこと。 - 簡単な設定は、VBEの「タブオーダー」ダイアログから手動で行うのがおすすめ。
- 動的な設定が必要な場合は、VBAコードで各コントロールの
.TabIndex
プロパティを0
から始まる数値で設定する。
適切なタブオーダーは、優れたユーザーインターフェースの基本です。少しの手間でフォームが格段に使いやすくなるので、ぜひ設定を忘れないようにしましょう。