横スクロールバーを出さないリスト(コンボボックス編)
フォームでコンボボックスコントロールを使うことは多く、またそのリストを複数列表示にすることも良くあります。しかし、ComboBoxのWidhtプロパティとColumnWidthsプロパティの値をうまく設定しないと、図1の左側Aのように「横スクロールバー」が現れてしまい、リストの項目を見るのに「スクロールバーを動かす」という手間が増えてしまいます。見栄えも悪いと感じるかもしれません。
図1
今回は、コンボボックスのリストに横スクロールバーが出ない条件を説明します。但しPCの環境やExcelのバージョンによっては値が異なる可能性もありますが、恐らく近い値だと思うのでトライ&エラーで導き出して下さい。
1.ColumnWidthsを設定しない場合
ColumnWidthsを設定せず、且つ「単列」の場合は、図2のように「横スクロールバーは現れない」ようです。図2
ComboBoxの幅(Widthプロパティ値)を変化させて見ると、以下の様なことが分かります。
・Widthが小さい(例えば図2の右側)場合は、ある程度の広さのリストが現れる。
・徐々にWidthを広げると、72(単位:ポイント)あたりでリストと同じくらいの幅になる(図2の中央)。
・もっとWidthを広げると、リストの幅も一緒に広がる(図2の右側)。
次に「ColumnWidthsの設定無し+複数列」の場合です。2列の場合と3列の場合を図3に示します。
図3
ComboBoxの幅(Widthプロパティ値)を変化させて見ると、2列では「145.5(ポイント)」で横スクロールバーが消え、3列では「217.5」で消えました。
この結果を連立方程式で解いてみると、以下のような関係式になります。
「ComboBoxのWidth値 ≧ 列数 × 72 + 1.5」(ColumnWidthsの設定無し)
式内の「72」という値は図2の中央図の値と同じなので、何か繋がりがあるようにも見えます。
2.ColumnWidthsを設定する場合
単列のコンボボックスで「ColumnWidthsを設定」した場合、コンボボックスの幅(Width値)が小さい場合は「ColumnWidthsを72以内」に押さえないと横スクロールバーが現れてしまいます(図4の左側2個)。図4
そこから横スクロールバーが現れない限界をたどっていくと、Width値が73.5まではColumnWidths値が72で、それ以上は
「ComboBoxのWidth値 - 1.5 ≧ ColumnWidths値」
が「横スクロールバーが出ない条件」のようです。
複数列も調べると図5のように、Width値と「ColumnWidthsの合計値」との間に同様の関係が得られることが分かりました。
図5
これらをグラフにしてみると、図6のようになります。
図6
今回の「1.5」という値も、もちろんキッチリと0.5ポイント単位になっているわけではなく「1.45197・・・」という切りの悪い数値のようですし、「72」も「72.0283・・・」という値のようです。
また「先入先出の入出庫管理システム」では、WidthとColumnWidthsの差は「2」と説明しました。今回確認をし直した中で「約1.5」と分かりましたが、実用上は小数点を使わずに「2」で計算する方が間違いが少ないかと思います。