【ExcelVBA】Scrollbarを使ってフォーム上のListboxに表示されているデータの表示列幅を変更させるには?

この記事では、Scrollbarを使ってフォーム上のListboxに表示されているデータの表示列幅を変更させる方法についてご説明します。

参考
この記事で紹介しているのはフォーム上のScrollbarとListboxです。
シート上に置いたListboxとScrollbarとの連携はこちらの記事で説明しています。
【ExcelVBA】Scrollbarを使ってシート上のListboxに表示されているデータの表示列幅を変更させるには?

【動画】Scrollbarを使ってフォーム上のListboxに表示されているデータの表示列幅を変更させている実際の動き

本題に入る前に、まずは次の動画をご覧ください。


スクロールバーの「つまみ」をスライドさせたり、バー部分や左右の矢印をクリックすることで列幅を変更しています。

Scrollbarを使ってフォーム上のListboxに表示されているデータの表示列幅を変更させる方法

Scrollbarを使ってフォーム上のListboxに表示されているデータの表示列幅を変更させるには、次の流れの通りに行います。

前提

フォーム上のListboxのデータ表示とScrollbarの設置は以下の前提でご説明します。

  • すでにListboxがフォーム上に設置されている
  • フォーム上のListboxに表示されているデータは4列
  • Scrollbarの設置は4つ(Listboxのデータ表示が4列あるので)

作業の流れ

STEP.1
【Scrollbar】フォーム上にScrollbarを設置
フォーム上にScrollbarを設置します。
STEP.2
【Scrollbarのプロパティの設定】ScrollbarのMinプロパティとMaxプロパティに値を設定する
ScrollbarのMinプロパティとMaxプロパティに値を設定します。
Minプロパティには0を、Maxプロパティには表示させたい列の最大の列幅を設定します。
STEP.3
【マクロ】ScrollbarのValueプロパティの値をListboxのColumnWidthsプロパティに設定する
ScrollbarのValueプロパティの値をListboxのColumnWidthsプロパティに設定します。
ScrollbarのValueプロパティの値は「つまみ」の位置を指します。
※ScrollbarのValueプロパティの値は、「つまみ」をスライドさせたり、バーや矢印をクリックしたタイミングで再度設定されます。

【STEP.1】フォーム上にScrollbarを設置

フォーム上にScrollbarを設置します。

【STEP.2】ScrollbarのMIN・MAXプロパティの設定

ScrollbarのMIN・MAXプロパティの設定を行います。

Minプロパティには0を、Maxプロパティには表示させたい列の最大の列幅を設定します。

【STEP.3】マクロの作成

マクロは、ScrollbarのChangeイベント内にコードを記述します。

STEP.1
ScrollbarのValueプロパティの値をListboxのColumnWidthsプロパティに設定する
ScrollbarのValueプロパティの値をListboxのColumnWidthsプロパティに設定します。
ColumnWidthsプロパティは、列の表示幅を設定するプロパティです。
列の表示幅は、このColumnWidthsプロパティに値を設定して変更します。

コードの例

Excelのマクロのコード(例)

Scrollbar1つ目
Private Sub ScrollBar1_Change()
    
    With UserForm1.ListBox1
    
        .ColumnWidths = UserForm1.ScrollBar1.Value & ";" & _
                        UserForm1.ScrollBar2.Value & ";" & _
                        UserForm1.ScrollBar3.Value & ";" & _
                        UserForm1.ScrollBar4.Value
    
    End With

End Sub
Scrollbar2つ目
Private Sub ScrollBar2_Change()
    
    With UserForm1.ListBox1
    
        .ColumnWidths = UserForm1.ScrollBar1.Value & ";" & _
                        UserForm1.ScrollBar2.Value & ";" & _
                        UserForm1.ScrollBar3.Value & ";" & _
                        UserForm1.ScrollBar4.Value
    
    End With

End Sub
Scrollbar3つ目
Private Sub ScrollBar3_Change()
    
    With UserForm1.ListBox1
    
        .ColumnWidths = UserForm1.ScrollBar1.Value & ";" & _
                        UserForm1.ScrollBar2.Value & ";" & _
                        UserForm1.ScrollBar3.Value & ";" & _
                        UserForm1.ScrollBar4.Value
    
    End With

End Sub
Scrollbar4つ目
Private Sub ScrollBar4_Change()
    
    With UserForm1.ListBox1
    
        .ColumnWidths = UserForm1.ScrollBar1.Value & ";" & _
                        UserForm1.ScrollBar2.Value & ";" & _
                        UserForm1.ScrollBar3.Value & ";" & _
                        UserForm1.ScrollBar4.Value
    
    End With

End Sub

コードの解説

4つのScrollBarコードをそれぞれご紹介しましたが、実は4つ全てが同じコードです。

なぜ同じなのかというと、4つのScrollBarのValueプロパティをListboxのColumnWidthsプロパティに設定しているだけだからです。

スクロールバーの「つまみ」をスライドさせたり、バー部分や左右の矢印をクリックするとScrollBarのValueプロパティの値が変更されるので、そのValueプロパティの値をListboxのColumnWidthsプロパティに設定することでListboxに表示されているデータの表示列幅も変更されます。

補足

Scrollbarの「つまみ」の位置と、フォーム上のListboxに表示されているデータの表示列幅を初期設定しておくと良いです。(フォーム設置直後は適当な値が設定されているため)

Scrollbarの「つまみ」の位置

Scrollbarの「つまみ」の位置はValueプロパティの値で決まります。

ちなみに、値が0だと「つまみ」の位置は一番左になります。

フォーム上のListboxに表示されているデータの表示列幅

あらかじめフォーム上のListboxに表示されているデータの表示列幅を決めておくことができます。

フォーム上のListboxに表示されているデータの表示列幅はColumnWidthプロパティで設定することができます。

また、すでに列幅が決まっている場合は、列幅の値とScrollbarのValueプロパティの値を合わせておくと良いです。
(Scrollbarの「つまみ」の位置をずらしたり、バーや矢印をクリックすることで値が変わるValueプロパティの値を、ListboxのColumnWidthプロパティに設定するため)

最後に

本記事では、Scrollbarを使ってフォーム上のListboxに表示されているデータの表示列幅を変更させる方法についてご説明しました。

Scrollbarを操作するだけでListboxに表示されているデータの表示列幅を変えることができるのはとても楽で便利です。

フォーム上のListboxに表示されているデータの表示列幅を変更させたい場合は参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら