拙著「ExcelVBAプログラミング ユーザーフォーム&コントロールパネル」に関して
リストボックスの列数の設定についての質問をしばしばいただきます。
リストボックスの列数の設定は、ColumnCountプロパティでおこないます。
今回は、最大何列まで可能なのか、検証してみたいと思います。
Excelを起動したら、Visual Basic Editorを開き、ユーザーフォームを挿入します。
任意の大きさにしたら、コマンドボタンとリストボックスを追加します。
それぞれ、「btn1」と「ListBox1」という名前にします。

このユーザーフォームのInitializeイベントに、列数と列幅の設定をコーディングします。
なお、画像にはコメントアウトしてしてあるコードがありますが、
これはあとで検証するためのコードです。今は気にしないでください。
今回は、リストボックスの列数を25列にしました。
そして、各列の幅を全て30ptにしました。
列幅を狭くすることによって、できるだけ横スクロールしないですむようにしたつもりです。
続いて、btn1をクリックしたときの処理をコーディングします。
リストボックスに1行追加し、
その後ループ処理で、その行の各列に値を設定していきます。
もし、エラーが発生したら、その時のカウンター変数 i の値と
エラーメッセージを表示するようにします。
なお、画像のループ回数が15になっていますが、大目に見てください。

さて、このユーザーフォームを表示し、ボタンをクリックすると
次の画像のようにエラーメッセージが表示されます。

列数は25と指定しているのに、10列しか表示できないことになります。
このことから、最大10列という制約があると考えられます。
ちなみに、もう一つ実験をしてみましょう。
シートの1行目に値を入力しておきます。分かりやすいように0から始まる数字に「列」をつけておきます。
今回は、Y列まで入れておきました。

次に、ユーザーフォームのInitializeイベントに、次の1行コードを追加します。
リストボックスのRowSource プロパティにセル範囲を指定しています。
リストボックスに値を表示するには、このようにRowSource プロパティを使うこともできます。
RowSource プロパティのセル範囲がリストボックスに表示されます。

改めてユーザーフォームを表示してみましょう。
今度は、25列までリストボックスに表示されました。

このように、RowSource プロパティを使うと、10行の制約は無視されます。
このあたりが、リストボックスの不思議なところだと感じてしまいます。
ただし、最大何列まで表示されるかは、まだ僕も試していません。
よろしかったら、皆さんもお試しください。結果を教えていただけると幸いです。
だい
リストボックスの列数の設定についての質問をしばしばいただきます。
リストボックスの列数の設定は、ColumnCountプロパティでおこないます。
今回は、最大何列まで可能なのか、検証してみたいと思います。
Excelを起動したら、Visual Basic Editorを開き、ユーザーフォームを挿入します。
任意の大きさにしたら、コマンドボタンとリストボックスを追加します。
それぞれ、「btn1」と「ListBox1」という名前にします。

このユーザーフォームのInitializeイベントに、列数と列幅の設定をコーディングします。
なお、画像にはコメントアウトしてしてあるコードがありますが、
これはあとで検証するためのコードです。今は気にしないでください。
今回は、リストボックスの列数を25列にしました。
そして、各列の幅を全て30ptにしました。
列幅を狭くすることによって、できるだけ横スクロールしないですむようにしたつもりです。
Private Sub UserForm_Initialize() With ListBox1 .ColumnCount = 25 '列数を25に設定 次の行で列幅を設定 .ColumnWidths = "30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30;30" End With End Sub
続いて、btn1をクリックしたときの処理をコーディングします。
リストボックスに1行追加し、
その後ループ処理で、その行の各列に値を設定していきます。
もし、エラーが発生したら、その時のカウンター変数 i の値と
エラーメッセージを表示するようにします。
なお、画像のループ回数が15になっていますが、大目に見てください。
Private Sub btn1_Click()
Dim i As Integer
ListBox1.AddItem
On Error GoTo eh
For i = 0 To 25
ListBox1.List(0, i) = i & "列目"
Next
Exit Sub
eh:
Dim msg As String
msg = "変数 i の値: " & i & vbNewLine
msg = msg & Err.Number & ":" & Err.Description
MsgBox msg
End Sub

さて、このユーザーフォームを表示し、ボタンをクリックすると
次の画像のようにエラーメッセージが表示されます。

列数は25と指定しているのに、10列しか表示できないことになります。
このことから、最大10列という制約があると考えられます。
ちなみに、もう一つ実験をしてみましょう。
シートの1行目に値を入力しておきます。分かりやすいように0から始まる数字に「列」をつけておきます。
今回は、Y列まで入れておきました。

次に、ユーザーフォームのInitializeイベントに、次の1行コードを追加します。
ListBox1.RowSource = "A1:Y1"
リストボックスのRowSource プロパティにセル範囲を指定しています。
リストボックスに値を表示するには、このようにRowSource プロパティを使うこともできます。
RowSource プロパティのセル範囲がリストボックスに表示されます。

改めてユーザーフォームを表示してみましょう。
今度は、25列までリストボックスに表示されました。

このように、RowSource プロパティを使うと、10行の制約は無視されます。
このあたりが、リストボックスの不思議なところだと感じてしまいます。
ただし、最大何列まで表示されるかは、まだ僕も試していません。
よろしかったら、皆さんもお試しください。結果を教えていただけると幸いです。
だい