2022/07/28

横スクロールバーを出さないリスト(リストボックス編)

フォームでリストボックス コントロールを使うことは多く、またそのリストを複数列表示にすることも良くあります。
しかし、ListBoxのWidhtプロパティとColumnWidthsプロパティの値をうまく設定しないと、図1の左側Aのように「横スクロールバー」が現れてしまい、リストの項目を見るのに「スクロールバーを動かす」という手間が増えてしまいますし、情報量も減ってしまいます。見栄えも悪いと感じるかもしれません。
複数列のリストボックス(横スクロールバー有無)
図1


今回は、リストボックスのリストに横スクロールバーが出ない条件を説明します。但しPCの環境やExcelのバージョンによっては値が異なる可能性もありますが、恐らく近い値だと思うのでトライ&エラーで導き出して下さい。

1.ColumnWidthsを設定しない場合

ColumnWidthsを設定せず、且つ「単列」の場合には、図2のようにリストボックスのWidth値が「75(ポイント)以上」にすれば、横スクロールバーは出ないようです。
単列のリストボックス(列幅指定無し)
図2


また、複数列(2列・3列)の場合を図3に示します。
複数列のリストボックス(列幅指定無し)
図3


ListBoxの幅(Widthプロパティ値)を変化させて見ると、2列では「147(ポイント)」で横スクロールバーが消え、3列では「219」で消えました。
この結果を連立方程式で解いてみると、横スクロールバーの出ない条件は、以下のような関係式になります。

ListBoxのWidth値 ≧ 列数 × 72 + 3」(ColumnWidthsの設定無し)

2.ColumnWidthsを設定する場合

単列のリストボックスで「ColumnWidthsを設定」した場合、リストボックスの幅(Width値)とColumnWidthsの値には一定の関係があるようです。

単列のリストボックス(列幅指定有り)
図4


複数列も調べると図5のように、同様の関係が得られることが分かりました。

複数列のリストボックス(列幅指定有り)
図5


ここから横スクロールバーが現れない条件は以下の条件式で得られるようです。
ListBoxのWidth値 - 3 ≧ ColumnWidths値」(ColumnWidthsの設定有り)

これをグラフにしてみると、図6のようになります。
WidthとColumnWidthsの関係(列幅指定有り)
図6


横スクロールバーを出さないリスト(コンボボックス編)」では、WidthとColumnWidthsの差は「1.5」でした。今回のリストボックスでは「3」ですが、「どっちが1.5だっけ?」となると思うので、コンボボックス・リストボックスをまとめて「3」と覚えてしまった方が良いかもしれません。

アプリ実例

先入先出の入出庫管理システム