質問するログイン新規登録

Q&A

解決済

1回答

187閲覧

リストボックスの複数列表示

osigoto

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2026/05/28 04:30

0

0

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • ▲▲機能を動作するようにする

前提

初心者です。。途中までネット検索してコードを書いてみたのですが
リストボックス2に4列で表示できません。。。
リストボックス1で選んだ勘定科目(B列)によってC列・D列・E列・F列のデータを
表示させたい。

発生している問題・エラーメッセージ

 リストボックス2にC列の値しか表示されない。
プロパティのColumnCountは「4」にしています。

エラーメッセージ

該当のソースコード

Option Explicit Private Sub ListBox1_Click() ListBox2.Clear With Worksheets("Materiaru") Dim i As Long For i = 2 To .Cells(Rows.Count, 2).End(xlUp).Row If .Cells(i, 2).Value = ListBox1.Value Then ListBox2.AddItem Sheets("Materiaru").Cells(i, 3).Value End If Next i End With End Sub Private Sub UserForm_Initialize() Dim LastRow As Long Dim i As Long LastRow = Sheets("小口勘定科目").Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To LastRow ListBox1.AddItem Sheets("小口勘定科目").Cells(i, 1) Next i Dim r As Integer With ListBox2 .ColumnCount = 4 .ColumnWidths = "120 ; 120 ; 120 ; 120" For r = 2 To Cells(Rows.Count, 2).End(xlUp).Row .AddItem Cells(r, 2) .List(r - 4, 1) = Cells(r, 4) Next r End With End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

エクセル2019です
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

blixor

2026/05/28 05:24

こんにちは。 原因: AddItemにCells(i,3)しか渡してないから、C列しか入らない。 直し方: ListBox2.AddItem ' 行を追加(引数なし) ListBox2.List(rowIndex, 0) = Cells(i,3) ' C列 ListBox2.List(rowIndex, 1) = Cells(i,4) ' D列 ListBox2.List(rowIndex, 2) = Cells(i,5) ' E列 ListBox2.List(rowIndex, 3) = Cells(i,6) ' F列 rowIndex = rowIndex + 1 ついでにInitialize内の「r-4」みたいな計算はやめときましょう。バグります。
osigoto

2026/05/28 05:49

Private Sub ListBox1_Click() ListBox2.Clear With Worksheets("Materiaru") Dim i As Long For i = 2 To .Cells(Rows.Count, 2).End(xlUp).Row If .Cells(i, 2).Value = ListBox1.Value Then ListBox2.AddItem ListBox2.List(RowIndex, 0) = Cells(i, 3) ' C列 ListBox2.List(RowIndex, 1) = Cells(i, 4) ' D列 ListBox2.List(RowIndex, 2) = Cells(i, 5) ' E列 ListBox2.List(RowIndex, 3) = Cells(i, 6) ' F列 RowIndex = RowIndex + 1 End If Next i End With End Sub Private Sub UserForm_Initialize() Dim LastRow As Long Dim i As Long LastRow = Sheets("小口勘定科目").Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To LastRow ListBox1.AddItem Sheets("小口勘定科目").Cells(i, 1) Next i Dim r As Integer With ListBox2 .ColumnCount = 4 .ColumnWidths = "120 ; 120 ; 120 ; 120" For r = 2 To Cells(Rows.Count, 2).End(xlUp).Row .AddItem Cells(r, 2) Next r End With End Sub ご回答ありがとうございます!初心者すぎてどこにご教授頂いたコードを書けばいいかわからず上記のようにしてみたのですがRowIndexの所が変数が定義されていませんとエラーが出てしまいます。。度々申し訳ございませんがご教授頂けましたら幸いです。
blixor

2026/05/28 05:59

大丈夫です。 原因はたった一つで、RowIndexという変数を定義するのを忘れているからです。 直し方はとても簡単で、今のコードの先頭、具体的にはPrivate Sub ListBox1_Click()の次の行に「Dim RowIndex As Long」という一行を追加するだけでOKです。これでRowIndexという変数を使いますよ、とVBAに教えてあげられます。 あと、Cellsの前にドット(.)が足りないのも直す。 これでコピペして動くよ: Private Sub ListBox1_Click() Dim RowIndex As Long RowIndex = 0 ListBox2.Clear With Worksheets("Materiaru") Dim i As Long For i = 2 To .Cells(Rows.Count, 2).End(xlUp).Row If .Cells(i, 2).Value = ListBox1.Value Then ListBox2.AddItem ListBox2.List(RowIndex, 0) = .Cells(i, 3) ListBox2.List(RowIndex, 1) = .Cells(i, 4) ListBox2.List(RowIndex, 2) = .Cells(i, 5) ListBox2.List(RowIndex, 3) = .Cells(i, 6) RowIndex = RowIndex + 1 End If Next i End With End Sub Private Sub UserForm_Initialize() Dim LastRow As Long Dim i As Long LastRow = Sheets("小口勘定科目").Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To LastRow ListBox1.AddItem Sheets("小口勘定科目").Cells(i, 1) Next i With ListBox2 .ColumnCount = 4 .ColumnWidths = "120;120;120;120" .Clear End With End Sub これで動くはず。また何かあったら教えて。
osigoto

2026/05/28 06:08

あああ!!出来ました!! 丁寧にご回答いただきありがとうございます。しかもお優しい。。 本当にありがとうございました!
osigoto

2026/05/28 06:11

あれ。。ベストアンサーに選べない。。 ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
blixor

2026/05/28 06:50

ありがとうございます。
blixor

2026/05/28 07:02

ありがとうございます。ご不明な点がございましたら、いつでもご連絡ください。 こちらでの対応が難しい場合は、私のChatworkまでご連絡ください。 https://www.chatwork.com/konpeki31
jimbe

2026/05/28 17:54

こちらは『質問に対する』質問を書くところですので、(特にコードも示す場合は)回答として書かれた方が良いと思います。 回答欄なら"コードのマークダウン"も使えます。コードのマークダウンの枠内ではインデントも再現され、枠の右上隅の [+] をクリックで枠内全てがクリップボードにコピーされます。
blixor

2026/05/29 03:33

jimbe様 ありがとうございます。
guest

回答1

0

ベストアンサー

リンク内容

原因はたった一つで、RowIndexという変数を定義するのを忘れているからです。

直し方はとても簡単で、今のコードの先頭、具体的にはPrivate Sub ListBox1_Click()の次の行に「Dim RowIndex As Long」という一行を追加するだけでOKです。これでRowIndexという変数を使いますよ、とVBAに教えてあげられます。

あと、Cellsの前にドット(.)が足りないのも直す。

これでコピペして動くよ:

Private Sub ListBox1_Click()
Dim RowIndex As Long
RowIndex = 0

ListBox2.Clear

With Worksheets("Materiaru")
Dim i As Long
For i = 2 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Cells(i, 2).Value = ListBox1.Value Then
ListBox2.AddItem
ListBox2.List(RowIndex, 0) = .Cells(i, 3)
ListBox2.List(RowIndex, 1) = .Cells(i, 4)
ListBox2.List(RowIndex, 2) = .Cells(i, 5)
ListBox2.List(RowIndex, 3) = .Cells(i, 6)
RowIndex = RowIndex + 1
End If
Next i
End With
End Sub

Private Sub UserForm_Initialize()
Dim LastRow As Long
Dim i As Long

LastRow = Sheets("小口勘定科目").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
ListBox1.AddItem Sheets("小口勘定科目").Cells(i, 1)
Next i

With ListBox2
.ColumnCount = 4
.ColumnWidths = "120;120;120;120"
.Clear
End With
End Sub

これで動くはず。また何かあったら教えて。

投稿2026/05/28 06:50

blixor

総合スコア44

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問