タブストリップでタブを切り替えたときの処理を記述する

Excel のユーザーフォームでタブストリップを設置した場合に、タブを切り替えるとタブストリップ内に設置されているコントロールの表示内容を合わせて切り替えるような処理を記述することができます。ここでは Excel のユーザーフォームに設置したタブストリップでタブを切り替えたときの処理を記述する方法について解説します。

※ タブストリップの基本的な使い方とプロパティの設定方法などについては「VBAでのタブストリップ(TabStrip)の使い方とプロパティおよびイベント」を参照されてください。

(Last modified: )

タブストリップで選択されているタブのインデックスを取得する

例としてタブストリップの中にテキストボックスを一つ設置し、タブを切り替えるとテキストボックスに表示される値を変更するようにしてみます。(なおタブストリップの上に表示されていますが、テキストボックスなどは実際にはユーザーフォームに追加されています)。

タブストリップで選択されているタブのインデックスを取得する(1)

最初に選択されているタブを取得する方法です。タブストリップのオブジェクト名が TabStrip1 だった場合、タブストリップの Value プロパティを参照すると選択されているタブのインデックスを取得できます。

TabStrip1.Value

タブのインデックスは最初のタブが 0 、次以降のタブが 1, 2, ... と続いていきます。

また現在選択されているタブは TabStrip1.SelectedItem で取得できます。このタブの Index プロパティを参照することで選択されているタブのインデックスを取得できます。

TabStrip1.SelectedItem.Index

また現在選択されているタブは TabStrip1.SelectedItem で取得できます。このタブの Index プロパティを参照することで選択されているタブのインデックスを取得できます。

選択されているタブが変更されたときの処理を記述する

タブストリップで選択されたタブが変更されると Change イベントが発生します。このイベントに対するイベントプロシージャの中で、選択されたタブのインデックスを取得し、そのインデックスに応じてタブストリップに追加したテキストボックスの値を書き換えます。

具体的には次のように記述します。

Option Explicit

Private Sub TabStrip1_Change()
    Dim tabIndex As Integer
    
    tabIndex = TabStrip1.Value
    If tabIndex = 0 Then
        TextBox1.Text = "12,000"
    ElseIf tabIndex = 1 Then
        TextBox1.Text = "9,000"
    End If
End Sub

またタブストリップが最初に表示されたときに、インデックス 0 のタブを選択し、そのタブに対応する値がテキストボックスに表示されるようにユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャの中でコードを記述します。

Option Explicit

Private Sub TabStrip1_Change()
    Dim tabIndex As Integer
    
    tabIndex = TabStrip1.Value
    If tabIndex = 0 Then
        TextBox1.Text = "12,000"
    ElseIf tabIndex = 1 Then
        TextBox1.Text = "9,000"
    End If
End Sub

Private Sub UserForm_Initialize()
    TabStrip1.Value = 0
    TextBox1.Text = "12,000"
End Sub

これでコードは完成です。次のように実際に記述しました。

選択されているタブが変更されたときの処理を記述する(1)

選択されているタブが変更されたときの処理を記述する(2)

ユーザーフォームを表示すると、タブストリップが表示され、最初に一番左側にあるタブが選択されてそれに対応する値がテキストボックスに表示されます。

選択されているタブが変更されたときの処理を記述する(3)

別のタブをクリックして選択すると、そのタブに対応した値がテキストボックスに表示されます。

選択されているタブが変更されたときの処理を記述する(4)

選択されているタブが変更されたときの処理を記述する(5)

このように選択しているタブが変更されたときに、テキストボックスに表示される値を変更することができました。

タブストリップの中で表示する値にワークシートの値を参照する

先ほどのサンプルではタブが変更されたときに、テキストボックスに表示する値として直接値を代入していました。値を直接代入する代わりにワークシートにあらかじめデータを入力しておき、そのワークシートのデータを取得して表示するようにしてみます。

ユーザーフォームがあるブックと同じブック内の "Sheet3" シートに次のようなデータを入力しました。

タブストリップの中で表示する値にワークシートの値を参照する(1)

ユーザーフォームにタブストリップを追加し、タブを一つ追加しました。

タブストリップの中で表示する値にワークシートの値を参照する(2)

ユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャの中で、タブに表示する文字列を設定します。この文字列についてもワークシートのセルの値を取得して設定しています。またテキストボックスの初期も設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
    
    For i = 0 To 2
        TabStrip1.Tabs(i).Caption = Worksheets("Sheet3").Cells(i + 2, 2).Value
    Next i
    
    TabStrip1.Value = 0
    TextBox1.Text = Worksheets("Sheet3").Cells(2, 3).Value
End Sub

次にタブストリップで選択されたタブが変更されたときに発生する Change イベントに対するイベントプロシージャの中で、選択されたタブのインデックスを取得し、そのインデックスに応じてタブストリップに追加したテキストボックスの値を書き換えます。ここで設定する値についてもワークシートの値を取得して設定しています。

Option Explicit

Private Sub TabStrip1_Change()
    Dim tabIndex As Integer
    
    tabIndex = TabStrip1.Value
    TextBox1.Text = Worksheets("Sheet3").Cells(tabIndex + 2, 3).Value
End Sub

これでコードは完成です。次のように実際に記述しました。

タブストリップの中で表示する値にワークシートの値を参照する(3)

ユーザーフォームを表示すると、タブストリップが表示されそれぞれのタブにはワークシートに入力したデータを参照して設定されます。また最初に一番左側にあるタブが選択されてそれに対応する値がテキストボックスに表示されます。

タブストリップの中で表示する値にワークシートの値を参照する(4)

別のタブをクリックして選択すると、そのタブに対応した値がワークシートから参照されてテキストボックスに表示されます。

タブストリップの中で表示する値にワークシートの値を参照する(5)

タブストリップの中で表示する値にワークシートの値を参照する(6)

-- --

Excel のユーザーフォームに設置したタブストリップでタブを切り替えたときの処理を記述する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。