VBAでのマルチページ(MultiPage)の使い方とプロパティおよびイベント

Excel VBA からマルチページ(MultiPage)コントロールを利用する方法です。マルチページはページを切り替えることで同じ画面上で異なるコントロールを表示する場合に使用されるコントロールです。ここでは Excel のユーザーフォームで設置できるマルチページを VBA から使用する方法と、マルチページで設定可能なプロパティおよびイベントの一覧について解説します。

(Last modified: )

マルチページのプロパティ一覧

ユーザーフォームに設置するマルチページで利用可能なプロパティ一覧は次の通りです。

BackColor
ControlTipText
Enabled
Font
ForeColor
Height
HelpContextID
Left
MultiRow
Style
TabFixedHeight
TabFixedWidth
TabIndex
TabOrientation
TabStop
Tag
Top
Value
Visible
Width

MultiPagePages コレクションのコンテナーであり、それぞれに 1 つ以上の Page オブジェクトが含まれています。ページで利用可能尾なプロパティ一覧は次の通りです。

Accelerator
Caption
ControlTipText
Cycle
Enabled
Index
KeepScrollBarsVisible
Picture
PictureAlignment
PictureSizeMode
PictureTiling
ScrollBars
ScrollHight
ScrollLeft
ScrollTop
ScrollWidth
Tag
TransitionEffect
TransitionPeriod
Visible
Zoom

マルチページの既定のプロパティは Value プロパティです。このプロパティは MultiPage の Pages

コレクション内の現在アクティブな Page のインデックスを返します。

いくつかのプロパティについてはこのあと簡単に解説します。

マルチページの基本的な使い方

マルチページの各ページには他のコントロールを設置することができます。

マルチページの基本的な使い方(1)

マルチページには複数のページが追加されていますが、それぞれのページ毎に異なるコントロールを設置することができます。下記では「Page2」の部分をクリックしてページ2に切り替えたあと、ページ1とは異なるコントロールを設置しています。

マルチページの基本的な使い方(2)

このようにマルチページではページ毎にまったく異なるコントロールを設置することができます。同じ目的で使用されるコントロールをまとめて同じページに設置し、別の目的で使用するコントロールは別のページに設置するといったことができます。

なおマルチページと似ているタブストリップでは、タブ毎にコントロールを変えるのではなく同じコントロールを使ってタブ毎に異なる値を表示するといった使い方をします。

マルチページにページを追加する

マルチページにページを追加する方法です。まず Visual Basic Editor の画面で行う方法を確認します。ユーザーフォームにマルチページを追加してください。

マルチページにページを追加する(1)

マルチページにはデフォルトでページは 2 つ追加されています。ページを追加するには、マルチページの中のページ名が表示されているあたりを右クリックし、表示されたメニューの中から「新しいページ」をクリックしてください。

マルチページにページを追加する(2)

マルチページにページを追加する(3)

マルチページにページが追加されました。

マルチページにページを追加する(4)

VBAを使ってマルチページにページを追加する

VBA を使ってプログラムの中からマルチページにページを追加する方法です。ページを追加するには MultiPage オブジェクトの Pages コレクションに対して Add メソッドを使います。

Set myPage = オブジェクト.Add([ Name [, Caption [, index ]]])

省略可能な 1 番目の引数に追加するページのオブジェクト名を指定します。同じく省略可能な 2 番目の引数にページに表示される文字列を指定します。同じく省略可能な 3 番目の引数に追加するページの位置を表すインデックスを指定します。省略した場合は最後に追加されます。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、マルチページにページを追加しています。

Option Explicit

Private Sub UserForm_Initialize()
    MultiPage1.Pages.Add
End Sub

マルチページにページを追加する(5)

マルチページにページを追加する(6)

ユーザーフォームを表示すると、表示されたマルチページにページが追加されているのが確認できます。

マルチページにページを追加する(7)

マルチページのページに表示する文字列を設定する(Caption)

マルチページのページに表示する文字列を設定する方法ですです。まず Visual Basic Editor の画面で行う方法を確認します。変更するページの上で右クリックし、表示されたメニューの中から「名前の変更」をクリックしてください。

マルチページのページに表示する文字列を設定する(Caption)(1)

マルチページのページに表示する文字列を設定する(Caption)(2)

次のようなウィンドウが表示されるので「キャプション」の右にあるテキストボックスでページに表示される文字列を編集してください。編集が終わったら「OK」をクリックしてください。

マルチページのページに表示する文字列を設定する(Caption)(3)

ページに表示される文字列が変更されました。

マルチページのページに表示する文字列を設定する(Caption)(4)

VBAを使ってページに表示する文字列を設定する

VBA を使ってプログラムの中からページに表示される文字列を変更する方法です。マルチページに追加されているページのオブジェクトは、マルチページのオブジェクト名が MultiPage1 だった場合、それぞれ次のようにインデックスを指定して参照することができます。

MultiPage1.Pages(0)
MultiPage1.Pages(1)
MultiPage1.Pages(2)

最初のページのインデックスが 0 で、そのあとは順番に 1, 2, ... と続いていきます。

それぞれのページに表示される文字列を変更するには、参照したページの Caption プロパティに値を設定します。

オブジェクト.Caption [= String ]

ページに表示する文字列を代入してください。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、マルチページのページに表示する文字列を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    MultiPage1.Pages(0).Caption = "連絡先"
    MultiPage1.Pages(1).Caption = "資格"
End Sub

マルチページのページに表示する文字列を設定する(Caption)(5)

マルチページのページに表示する文字列を設定する(Caption)(6)

ユーザーフォームを表示すると、表示されたマルチページのページに設定した文字列が表示されているのが確認できます。

マルチページのページに表示する文字列を設定する(Caption)(7)

マルチページの表示位置を設定する(Top,Left)

マルチページが表示される位置を設定するには Top プロパティと Left プロパティに値を設定します。

オブジェクト.Top [= Single ]
オブジェクト.Left [= Single ]

Top プロパティにはユーザーフォームの上端からマルチページの上端までの距離、 Left プロパティにはユーザーフォームの左端からマルチページの左端までの距離をそれぞれ単精度浮動小数点型の数値で代入します。単位はポイントです。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、マルチページの位置を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    MultiPage1.Top = 40
    MultiPage1.Left = 60
End Sub

マルチページの表示位置を設定する(Top,Left)(1)

マルチページの表示位置を設定する(Top,Left)(2)

ユーザーフォームを表示すると、表示されたマルチページが指定した位置で表示されているのが確認できます。

マルチページの表示位置を設定する(Top,Left)(3)

マルチページの幅と高さを設定する(Width,Height)

マルチページの幅と高さを設定するには幅については Width プロパティ、高さについては Height プロパティに値を設定します。

オブジェクト.Width [= Single ]
オブジェクト.Height [= Single ]

幅および高さをあらわす単精度浮動小数点型の数値を代入してください。単位はポイントです。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、マルチページの幅と高さを設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    MultiPage1.Width = 160
    MultiPage1.Height = 60
End Sub

マルチページの幅と高さを設定する(Width,Height)(1)

マルチページの幅と高さを設定する(Width,Height)(2)

ユーザーフォームを表示すると、表示されたマルチページの幅および高さが指定した値に設定されているのが確認できます。

マルチページの幅と高さを設定する(Width,Height)(3)

マルチページのページで使用するフォントを設定する(Font)

マルチページのページに表示される文字列のフォントを設定するには Font プロパティに値を設定します。 Font プロパティは Font オブジェクトを返します。 Font オブジェクトのプロパティに対して値を設定していくことでフォントに関する設定を行うことができます。

Font オブジェクトには多くのプロパティが用意されていますが、よく使用されるものは次のプロパティです。

Name           フォント名
Size           フォントサイズ
Bold           太字
Italic         斜体
Underline      下線
Strikethrough  取り消し線

例えばフォント名を設定する場合は次のように記述します。例えば "MS UI Gothic" や "MS 明朝" などを代入します。

オブジェクト.Font.Name = フォント名を表す文字列

フォントサイズを設定する場合は次のように記述します。

オブジェクト.Font.Size = フォントサイズを表す数値

太字、斜体、取り消し線を設定する場合は、対応するプロパティに「True」を設定してください。

オブジェクト.Font.Bold = True
オブジェクト.Font.Italic = True
オブジェクト.Font.Strikethrough = True

下線を設定する場合は、次のいずれかの値を設定してください。

定数説明
xlUnderlineStyleDouble-4119二重下線
xlUnderlineStyleDoubleAccounting5二重下線(会計)
xlUnderlineStyleNone-4142下線なし
xlUnderlineStyleSingle2一重下線
xlUnderlineStyleSingleAccounting4一重下線(会計)
オブジェクト.Font.Underline = xlUnderlineStyleSingle

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、マルチページのページに表示される文字列のフォントサイズや書式を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    MultiPage1.Font.Size = 14
    MultiPage1.Font.Bold = True
    MultiPage1.Font.Underline = xlUnderlineStyleSingle
End Sub

マルチページのページで使用するフォントを設定する(Font)(1)

マルチページのページで使用するフォントを設定する(Font)(2)

ユーザーフォームを表示すると、表示されたマルチページのページに指定したフォントの設定が行われているのが確認できます。

マルチページのページで使用するフォントを設定する(Font)(3)

マルチページのページを表示する位置を設定する(TabOrientation)

マルチページでページをどの位置に表示するのかを設定するには TabOrientation プロパティに値を設定します。

オブジェクト.TabOrientation [= fmTabOrientation ]

設定可能な値は次の通りです。

定数説明
fmTabOrientationTop0ページはコントロールの上に表示されます
fmTabOrientationBottom1ページはコントロールの下に表示されます
fmTabOrientationLeft2ページはコントロールの左側に表示されます
fmTabOrientationRight3ページはコントロールの右端に表示されます

デフォルトの値は fmTabOrientationTop となっておりページはコントロールの上に表示されます。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、マルチページのページを表示する位置として右側を指定しています。

Option Explicit

Private Sub UserForm_Initialize()
    MultiPage1.TabOrientation = fmTabOrientationRight
End Sub

マルチページのページを表示する位置を設定する(TabOrientation)(1)

マルチページのページを表示する位置を設定する(TabOrientation)(2)

ユーザーフォームを表示すると、マルチページの右側にページが表示されているのが確認できます。

マルチページのページを表示する位置を設定する(TabOrientation)(3)

なおマルチページの下側および左側にページが表示するように設定した場合は、それぞれ次のように表示されます。

マルチページのページを表示する位置を設定する(TabOrientation)(4)

マルチページのページを表示する位置を設定する(TabOrientation)(5)

マルチページのイベント一覧

マルチページで発生するイベント一覧は次の通りです。

AddControl
BeforeDragOver
BeforeDropOrPaste
Change
Click
DblClick
Enter
Error
Exit
KeyDown
KeyPress
KeyUp
Layout
MouseDown
MouseMove
MouseUp
RemoveControl
Scroll
Zoom

マルチページの既定のイベントは Change イベントです。

-- --

Excel のユーザーフォームで設置できるマルチページを VBA から使用する方法と、マルチページで設定可能なプロパティおよびイベントの一覧について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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