エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

【本日のミッション】

エクセルのフォームに水平・垂直のスクロールバーをつけよ。

ミッションの概要

Excelのフォームに 水平・垂直のスクロールバーをつける、というのが今回のミッションです。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

フォームに水平・垂直のスクロールバーを付ける設定

この設定は、プロパティウィンドウで行う方法と、コードに記述する方法の2つがあります。

フォームのプロパティに設定

プロパティウィンドウ(表示されていない場合は、[F4]キーで表示できます。)で ScrollBars 「3-fmScrollBarsBoth」にします。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

垂直スクロールバーのスクロール範囲を ScrollHeight に、水平スクロールバーのスクロール範囲を ScrollWidth 入力します。スクロール範囲につきましては、下記「ScrollHeightプロパティ」「ScrollWidth プロパティ」の項目をご参照ください。
ここが初期値の「0」のままだと、画面スクロールしません

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

【フォーム表示時、任意のスクロール位置で表示させる場合】
ScrollLeft に、フォームの左端からの位置を入力します。
ScrollTop に、フォームの上部からの位置を入力します。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

ユーザーフォームの Initialize 処理で設定する

UserForm_Initialize に記述した処理は、ユーザーフォームが画面表示される時に行われます。フォームやフォームに設置したオブジェクト(コンボボックス・リストボックス・テキストボックス等)で、

  • プルダウンした時に出てきて欲しい値リスト
  • 初めから表示されていて欲しい選択リスト
  • テキストの初期値

等は、ユーザーフォームが開くと同時に設定されるようにしておきます。

今回は、ユーザーフォーム「UserForm1」が画面表示される時に、水平・垂直のスクロールバーが表示されるようにします。

ユーザーフォームのコードウィンドウを表示

プロジェクトエクスプローラーから、スクロールバーを表示させたいユーザーフォームを右クリックします。

[コードの表示]をクリックし、コードウィンドウを表示させます。([F7]キーでもコード表示できます。)

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

UserFormの選択

コードウィンドウ上部の「(General)」と表示されているプルダウンを開き、「UserForm」を選択します。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

自動的に下記コードが挿入されますが、削除するとUserFormの選択が解除されるため、そのままにしておきます。
エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

Initializeの選択

右側のプルダウン(「Click」と表示されています。)を開き、「Initialize」を選択します。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

下記コードが表示されます。

ここで先ほどの「Private Sub UserForm_Click() ~ End Sub」は不要になりますので、削除しておきましょう。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

UserForm_Initialize にコードの追加

Private Sub UserForm_Initialize ~ End Sub 内に下記の通り、コードを追加します。

Private Sub UserForm_Initialize()
    'スクロール表示設定
    ScrollBars = fmScrollBarsBoth
    
    'スクロール表示領域高さ
    ScrollHeight = 200
    
    'スクロール表示領域幅
    ScrollWidth = 280
    
    'フォーム表示時、任意のスクロール位置で表示させる場合
    ScrollLeft = 20
    ScrollTop = 20
End Sub
■■■スポンサーリンク■■■

ユーザーフォームを表示して動作を確認

このコード内にカーソルを置いたまま、[F5]キー(ユーザーフォームの実行)をクリックするとユーザーフォームが表示されます。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

【フォーム表示時、任意のスクロール位置で表示させる場合】
ScrollLeft、ScrollTopを指定した場合は、指定した位置にスクロールされた状態で表示されます。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

スクロールバーの表示設定 ScrollBarsプロパティ

スクロールバーの表示に関する設定です。
ScrollBarsプロパティで表示設定をして、ScrollHeight(ScrollWidth)でスクロール範囲を指定すると、画面がスクロールします。

参考「KeepScrollBarsVisible」:エクセル スクロールバーScrollBarsとKeepScrollBarsVisibleの違い(Excel VBA)

定数内容
fmScrollBarsNoneスクロール バーを表示しません (既定値)。
エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)
0
fmScrollBarsHorizontal 水平スクロール バーを表示します。
エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)
1
fmScrollBarsVertical垂直スクロール バーを表示します。
エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)
2
fmScrollBarsBoth水平スクロール バーと垂直スクロール バーの両方を表示します。
エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)
3
■■■スポンサーリンク■■■

スクロール表示領域の幅 ”ScrollWidth” プロパティ

スクロール表示領域の幅を指定します。

ユーザーフォームの「Width から スクロールバー幅 を除いた領域」に表示できる領域の幅です。

Width から スクロールバー幅 を除いた領域」よりも、スクロール表示領域の幅 ScrollWidth の方が大きい場合は、スクロールバーをスライドさせて表示させることができます。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

スクロール表示領域の高さ ”ScrollHeight” プロパティ

スクロール表示領域の高さを指定します。

ユーザーフォームの「Height から タイトルバー高さ・スクロールバー高さ を除いた領域」に表示できる領域の高さです。

Height から タイトルバー高さ・スクロールバー高さ を除いた領域」よりも、スクロール表示領域の高さ ScrollHeight の方が大きい場合は、スクロールバーをスライドさせて表示させることができます。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

水平スクロール位置 ”ScrollLeft” プロパティ

フォームが開いた時、あらかじめ水平にスクロールさせておく位置です。
フォームの左端から、スクロールしておく位置を指定します。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

垂直スクロール位置 ”ScrollTop” プロパティ

フォームが開いた時、あらかじめ垂直にスクロールさせておく位置です。
フォームの上部から、スクロールしておく位置を指定します。

エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)

【参考】

VBA(マクロ)作成の前、リボンに開発タブを表示させる(Excel VBA)
ユーザーフォームの作成方法 準備(Excel VBA)
ユーザーフォームのオブジェクトの名前を「UserForm1」から変更する方法(Excel VBA)
ユーザーフォームの上のバー(タイトルバー)の名前を「UserForm1」から変更する(Excel VBA)
ユーザーフォームのオブジェクトウィンドウとコードウィンドウを表示切替させる方法(Excel VBA)
「オブジェクト名が不正です」を出さないようにユーザーフォームオブジェクト名を命名規則に従って変更(Excel VBA)
エクセルファイルが開いた時にユーザーフォームを表示させる方法(Excel VBA)
エクセル フォームのラベルのテキストを縦書きにする方法(Excel VBA)
AddItemメソッドを使ってコンボボックスの値リストを設定する(Excel VBA)
RowSourceプロパティを使ってセル範囲とコンボボックスの値リストをリンク設定させる(Excel VBA)
RowSourceプロパティでリンク設定したコンボボックス値リストにデータを追加・削除する(Excel VBA)
コンボボックスにListプロパティを使って 配列に格納したセルデータを値リストとして設定する(Excel VBA)
既存のコンボボックスの値リストにAddItemメソッドでデータを追加する(Excel VBA)
既存のコンボボックスの値リストのデータを、Clearメソッドで全て削除して初期化する(Excel VBA)
既存のコンボボックスの値リストの項目を1件 RemoveItemメソッドで削除する(Excel VBA)
選択する項目の文字数に応じてコンボボックスのサイズ(幅・高さ)を自動変更する(Excel VBA)
コンボボックス 値リストに設定した項目以外は入力できないようにする(Excel VBA)
コンボボックス 値リストに設定した項目以外も入力できるようにする(Excel VBA)
コンボボックス プルダウンを開いた時の値リストの最大表示件数を指定する(Excel VBA)
コンボボックス ドロップダウンのポチってするところ(ドロップボタンスタイル)を▼から変更する(Excel VBA)
コンボボックス リストの中から初期値を設定するListIndexプロパティ(Excel VBA)
コンボボックスの値リストに設定された項目の件数を取得する(Excel VBA)
RowSourceプロパティを使って、複数列のセル範囲とコンボボックスの値リストをリンク設定(Excel VBA)
コンボボックスにListプロパティを使って配列に格納した複数列のセルデータを値リストとして設定(Excel VBA)
コンボボックス 複数列の値リストの列幅を変えたり非表示にしたりする設定(Excel VBA)
複数列の値リストからコンボボックスに表示する列・Textプロパティで値を取得する列を設定(Excel VBA)
コンボボックスに表示されている項目がリストの上から何番目(インデックス値)かを取得(Excel VBA)
コンボボックスの値リストに列見出しを表示する設定 ColumnHeadsで見出しが設定できない理由(Excel VBA)
コンボボックス ドロップダウンの▼(ドロップボタン)を表示・非表示にするタイミングを設定(Excel VBA)
コンボボックス 表面の形状を色々な立体的表示に変更する設定(Excel VBA)
コンボボックスの左端の余白「セレクションマージン」って何?この余白を無くす方法は?(Excel VBA)
コンボボックス値リストAddItemメソッド・RowSourceプロパティ・Listプロパティ違い Excel VBA
コンボボックス 値リストの表示項目件数を変更する設定(Excel VBA)
コンボボックスで選択した値を別フィールドにドラッグアンドドロップで簡単テキスト移動できる設定(Excel VBA)
コンボボックス 複数列ある値リストから表示されていない列のデータを取得する方法1(Excel VBA)
コンボボックス 複数列ある値リストから表示されていない列のデータを取得する方法2(Excel VBA)
コンボボックス TextプロパティとValueプロパティの違い(Excel VBA)
コンボボックスに重複しないユニークな値リスト(1列)を設定する(Excel VBA)
コンボボックスに重複しないユニークな値リスト(複数2列)を設定する(Excel VBA)
コンボボックスに重複しないユニークな値リスト(複数列 3列以上)を設定する(Excel VBA)
エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA)
エクセル スクロールバーScrollBarsとKeepScrollBarsVisibleの違い(Excel VBA)

■■■スポンサーリンク■■■