Excel VBA ユーザーフォームにスクロールバーを表示(追加)する方法

コントロール作成/操作

ユーザーフォームにスクロールバーを表示(追加)して、ユーザーフォームをスクロールできるようにする方法についてご説明します。

スクロールバーを表示する方法はユーザーフォームのプロパティで指定するか、コントロールのスクロールバーを設置する方法になりますが、今回はコントロールではなくプロパティで表示させる方法になります。

VBAで表示する方法と、手動でプロパティを指定して表示する方法の2つについて、それぞれ記載します。

ユーザーフォームにいろいろ設置した結果、ユーザーフォームのサイズが大きくなりすぎてしまった場合に、サイズをWindow画面に収まるように設定したい場合などに使用すると便利です。

その他のユーザーフォームの操作については下記記事をご覧ください。

1.手動でスクロールバーを表示する

まずはユーザーフォームのプロパティを手動で指定する方法です。

プロパティを手動で指定する方法

プロパティを手動で指定してスクロールバーを表示する方法は、まず作成してあるユーザーフォームモジュールを開きます。

ユーザーフォームモジュールを開いたら、ユーザーフォームのプロパティの「ScrollBars」で垂直方向、水平方向、両方のどれかを指定します。

ScrollBarsの設定一覧
設定値説明
0-fmScrollBarsNoneスクロールバーを表示しません。
1-fmScrollBarsHorizontal水平スクロールバーを表示します。
2-fmScrollBarsVertical垂直スクロールバーを表示します。
3-fmScrollBarsBoth水平スクロールバーと垂直スクロールバーの両方を表示します。

スクロールバーを表示させましたが、実はまだスクロール出来ません。

図を見るとまだ、バーしかありません。

そこで、スクロールできる範囲や初期位置の指定などを行う必要があります。

また注意点として、設定する際にそもそもユーザーフォームの高さや幅より小さい数字を指定した場合は、スクロールの表示外領域の移動ができません。

さらにユーザーフォームモジュールでスクロールバーの範囲を設定した後に、位置を移動した状態で保存すると、移動した状態で開きます。

では、スクロールバーを表示したら、次はスクロールバーの設定を行います。

スクロールバーの設定

スクロールバーはプロパティでいくつか設定する事ができますので、プロパティの説明です。

水平方向、垂直方向、両方と表示するスクロールバーによって指定するプロパティの設定が変わります。

水平、垂直どちらかであれば「ScrollHeight」か「ScrollWidth」で良いですが、両方表示する場合は、どちらも指定します。

次のようにユーザーフォームのサイズが高さ100、幅300であれば、スクロールの高さと幅はそれ以上でなければいけません。

これでユーザーフォームのサイズ以上の表示領域の設定ができました。

プロパティの詳細です。

ScrollHeight

垂直スクロールバーのスクロールできる範囲をポイント単位で指定します。

ScrollLeft

水平スクロールバーの水平方向にスクロールされている位置を、フォームの左端からポイント単位で取得または設定できます。

ScrollTop

垂直スクロールバーの垂直方向にスクロールされている位置を、フォームの上端からポイント単位で取得または設定できます。

ScrollWidth

水平スクロールバーのスクロールできる範囲をポイント単位で指定します。

VBAでスクロールバーを表示する方法

次はVBAでユーザーフォームにスクロールバーを表示する方法です。

ユーザーフォームにスクロールバーが設置されていない状態から、VBAでスクロールバーを表示して設定します。

VBAでユーザーフォームにスクロールバーを表示する指定は「ScrollBars」プロパティで指定します。

次の様に記述します。

Object.ScrollBars = 設定

設定には値でも、定数でもどちらでも構いません。

ScrollBarsの定数
定数名説明
fmScrollBarsNone0スクロールバーを表示しません。
fmScrollBarsHorizontal1水平スクロールバーを表示します。
fmScrollBarsVertical2垂直スクロールバーを表示します。
fmScrollBarsBoth3水平スクロールバーと垂直スクロールバーの両方を表示します。

サンプルコード

スクロールバーを表示する

次のコードは垂直と水平の両方を表示します。

fmScrollBarsBoth」と記述していますが、「3」と値で記述しても構いません。

Sub Sample2()

With UserForm1
    
    .ScrollBars = fmScrollBarsBoth’垂直、水平両方を表示
    
    .Show vbModeless

End With

End Sub
高さと幅を設定する

次は高さと幅を設定します。

高さを「ScrollHeight 」幅を「ScrollWidth 」で指定します。

Sub Sample3()

With UserForm1
    
    .ScrollBars = fmScrollBarsBoth
    
    .ScrollHeight = 400 '高さ
    
    .ScrollWidth = 800 '幅
    
    .Show vbModeless

End With

End Sub
位置を指定する

スクロールバーの位置を指定する方法です。

垂直方向のTOP位置は「ScrollTop」、水平方向の左の位置は「ScrollLeft」で指定します。

Sub Sample4()

With UserForm1
    
    .ScrollBars = fmScrollBarsBoth
    
    .ScrollHeight = 400 '高さ
    
    .ScrollWidth = 800 '幅
    
    .ScrollTop = 50 'TOP
    
    .ScrollLeft = 100 'LEFT
    
    .Show vbModeless

End With

End Sub

開いたときに、水平、垂直方向ですでにスクロールされた状態になりました。

タイトルとURLをコピーしました