エクセル スクロールバーScrollBarsとKeepScrollBarsVisibleの違い(Excel VBA)

【本日のミッション】

エクセル フォーム スクロールバー「ScrollBars」と「KeepScrollBarsVisible」の違いを解明せよ。

ミッションの概要

エクセル フォーム スクロールバー「ScrollBars」と「KeepScrollBarsVisible」の違いを解明せよ、というのが今回のミッションです。

フォームにスクロールバーを付ける方法は エクセル フォーム 水平・垂直のスクロールバーをつける方法(Excel VBA) をご参照ください。

「ScrollBars」と「KeepScrollBarsVisible」の違い

  • ScrollBars・・・スクロールバーを表示する・しないを設定します。
  • KeepScrollBarsVisible・・・スクロールバーが不要な時でも、表示するかどうかを設定します。

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

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

定数内容
fmScrollBarsNoneスクロール バーを表示しません (既定値)。
0
fmScrollBarsHorizontal 水平スクロール バーを表示します。
1
fmScrollBarsVertical垂直スクロール バーを表示します。
2
fmScrollBarsBoth水平スクロール バーと垂直スクロール バーの両方を表示します。
3
■■■スポンサーリンク■■■

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

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

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

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

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

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

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

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

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

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

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

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

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

KeepScrollBarsVisible プロパティ

スクロールバーが不要な時でも、表示するかどうかを設定します。

定数内容
fmScrollBarsNoneスクロール バーを表示しません。0
fmScrollBarsHorizontal水平スクロール バーを表示します。1
fmScrollBarsVertical垂直スクロール バーを表示します。2
fmScrollBarsBoth水平スクロール バーと垂直スクロール バーの両方を表示します (既定値)。3

指定したスクロール範囲が、画面表示領域よりも大きい場合は、スクロールバーが必要になります。しかし、そうでない場合はスクロールバーは表示されていても、表示されていなくても問題ありません。

スクロールが必要ではない時、表示させておくか・表示しないかをきっちり指定しておくのがKeepScrollBarsVisible プロパティです。

KeepScrollBarsVisible、ScrollBars、ScrollHeight、ScrollWidthの設定の組み合わせで、スクロールの表示が変わってきます。

下記「パターン1」と「パターン2」で表示の違いをご確認ください。「パターン3」以降はいろいろな組み合わせでの表示を確認しています。

パターン1:スクロールバー非表示

  • KeepScrollBarsVisible = fmScrollBarsNone
    水平・垂直スクロールバーの両方を表示しない
  • ScrollBars = fmScrollBarsBoth
    水平・垂直スクロールバーの両方を表示する
  • ScrollHeight = 0
  • ScrollWidth = 0
  • ScrollLeft = 0
  • ScrollTop = 0

➡水平・垂直スクロールバーは表示されない

「ScrollBars = fmScrollBarsBoth」でスクロールバーを表示する設定にしていても、ScrollHeight・ScrollWidth を「0」にしていると、スクロール範囲はありません。

KeepScrollBarsVisible = fmScrollBarsNone」で、スクロール不要時にはスクロールバーを表示しない設定にしているので、表示されません。

パターン2:スクロールバー表示・スクロール不可

  • KeepScrollBarsVisible = fmScrollBarsBoth
    水平・垂直スクロールバーの両方を表示する
  • ScrollBars = fmScrollBarsBoth
    水平・垂直スクロールバーの両方を表示する
  • ScrollHeight = 0
  • ScrollWidth = 0
  • ScrollLeft = 0
  • ScrollTop = 0

➡水平・垂直スクロールバーが表示されるが、スクロールしない

「ScrollBars = fmScrollBarsBoth」でスクロールバーを表示する設定にしていても、ScrollHeight・ScrollWidth を「0」にしていると、スクロール範囲はありません。

KKeepScrollBarsVisible = fmScrollBarsBoth」で、スクロール不要時にもスクロールバーを表示する設定にしているので、表示されます。

ただし、スクロールバーは表示されるだけで、スクロールは動きません。

パターン3:水平・垂直スクロールバー表示・スクロール有

  • KeepScrollBarsVisible = fmScrollBarsNone
    水平・垂直スクロールバーの両方を表示しない
  • ScrollBars = fmScrollBarsBoth
    水平・垂直スクロールバーの両方を表示する
  • ScrollHeight = 200
  • ScrollWidth = 280
  • ScrollLeft = 0
  • ScrollTop = 0

水平・垂直スクロールバーが表示されて、スクロールする

「ScrollBars = fmScrollBarsBoth」でスクロールバーを表示する設定で、「ScrollHeight = 200」「ScrollWidth = 280」とスクロール範囲が設定されているため、スクロールバーは表示されます。

この時、「KeepScrollBarsVisible = fmScrollBarsNone」となっていても、スクロールバーは必要なので表示されます。

パターン4:垂直スクロールバーのみ表示・スクロール有

  • KeepScrollBarsVisible = fmScrollBarsNone
    水平・垂直スクロールバーの両方を表示しない
  • ScrollBars = fmScrollBarsBoth
    水平・垂直スクロールバーの両方を表示する
  • ScrollHeight = 200
  • ScrollWidth = 0
  • ScrollLeft = 0
  • ScrollTop = 0

垂直スクロールバーのみが表示されて、スクロールする

「ScrollBars = fmScrollBarsBoth」でスクロールバーを表示する設定で、「ScrollHeight = 200」と垂直スクロール範囲が設定されているため、垂直スクロールバーは表示されます。

水平スクロールバーは「ScrollWidth = 0」とスクロール範囲指定が無く、更に「KeepScrollBarsVisible = fmScrollBarsNone」となっているため、表示されません。「KeepScrollBarsVisible = fmScrollBarsNone」の設定が無くても表示されません。

パターン5:水平・垂直スクロールバー表示・垂直のみスクロール有

  • KeepScrollBarsVisible = fmScrollBarsBoth
    水平・垂直スクロールバーの両方を表示する
  • ScrollBars = fmScrollBarsBoth
    水平・垂直スクロールバーの両方を表示する
  • ScrollHeight = 200
  • ScrollWidth = 0
  • ScrollLeft = 0
  • ScrollTop = 0

➡水平・垂直スクロールバーが表示されるが、スクロールは垂直のみ

「ScrollBars = fmScrollBarsBoth」でスクロールバーを表示する設定で、「ScrollHeight = 200」と垂直スクロール範囲が設定されているため、垂直スクロールバーは表示されます。

水平スクロールバーは「ScrollWidth = 0」とスクロール範囲指定がありませんが「KeepScrollBarsVisible = fmScrollBarsBoth」となっているため、表示されます。

ただし、水平スクロールバーは表示されるだけで、スクロールは動きません。

パターン6:スクロールバー非表示

  • KeepScrollBarsVisible = fmScrollBarsBoth
    水平・垂直スクロールバーの両方を表示する
  • ScrollBars = fmScrollBarsNone
    スクロール バーを表示しない
  • ScrollHeight = 200
  • ScrollWidth = 0
  • ScrollLeft = 0
  • ScrollTop = 0

スクロールバーは表示されない

「ScrollHeight = 200」とスクロール範囲は設定されていますが、「ScrollBars = fmScrollBarsNone」でスクロールバーを表示しない設定になっているため、表示されません。

「KeepScrollBarsVisible = fmScrollBarsBoth」の設定をしていても、スクロールバーは表示されません。

【参考】

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)

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