【VBA】ユーザーフォームのタブオーダーを設定して操作性を向上させる方法

目次

はじめに

VBAのユーザーフォームで、テキストボックスやボタンを配置した後に Tab キーを押すと、フォーカスが意図しない順番で飛んでしまい、使いにくいと感じたことはありませんか?

このフォーカスが移動する順番のことを「タブオーダー」と呼びます。タブオーダーが入力項目の流れに沿って自然に設定されていると、キーボードだけでスムーズに入力作業を進めることができ、フォームの操作性が格段に向上します。

この記事では、ユーザーフォームのタブオーダーを正しく設定するための2つの方法(手動設定とVBAコードによる設定)を分かりやすく解説します。


方法1: 「タブオーダー」ダイアログで設定する(手動)

最も簡単で直感的なのが、VBE(VBAエディタ)の機能を使って手動で設定する方法です。

  1. VBEで、設定したいユーザーフォームをデザインビューで開きます。
  2. フォームの何もないところをクリックして、フォーム自身を選択状態にします。
  3. メニューバーから「表示」→「タブオーダー」を選択します。
  4. 「タブオーダー」ダイアログボックスが表示されます。リスト内のコントロール名を選択し、「上へ」「下へ」ボタンで、フォーカスを移動させたい順番(上から順)に並べ替えます。
  5. 「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から始まる: TabIndex0 から始まる連番です。0 が最初にフォーカスを受け取るコントロール、1 が次に受け取るコントロール、となります。
  • 連番である必要はない: 必ずしも連番でなくても、数値の小さい順にフォーカスは移動します。しかし、0 からの連番で管理するのが最も分かりやすいでしょう。
  • 重複は不可: 同じ TabIndex を持つコントロールが複数あると、意図しない順序でフォーカスが移動する可能性があるため、番号は重複しないように設定します。

手動設定と同様に、VBAで設定する場合も、ユーザーが入力するであろう自然な流れ(上から下、左から右)に沿って TabIndex を割り振ることが、使いやすいフォームを作る上での鍵となります。


まとめ

今回は、ユーザーフォームの操作性を向上させる「タブオーダー」の設定方法について解説しました。

  • タブオーダーは、ユーザーが Tab キーを押したときにフォーカスが移動する順番のこと。
  • 簡単な設定は、VBEの「タブオーダー」ダイアログから手動で行うのがおすすめ。
  • 動的な設定が必要な場合は、VBAコードで各コントロールの .TabIndex プロパティを 0 から始まる数値で設定する。

適切なタブオーダーは、優れたユーザーインターフェースの基本です。少しの手間でフォームが格段に使いやすくなるので、ぜひ設定を忘れないようにしましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次