実現したいこと
ここに実現したいことを箇条書きで書いてください。
- ▲▲機能を動作するようにする
前提
初心者です。。途中までネット検索してコードを書いてみたのですが
リストボックス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です
ここにより詳細な情報を記載してください。
こんにちは。
原因:
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」みたいな計算はやめときましょう。バグります。
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の所が変数が定義されていませんとエラーが出てしまいます。。度々申し訳ございませんがご教授頂けましたら幸いです。
大丈夫です。
原因はたった一つで、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
これで動くはず。また何かあったら教えて。
あああ!!出来ました!!
丁寧にご回答いただきありがとうございます。しかもお優しい。。
本当にありがとうございました!
あれ。。ベストアンサーに選べない。。
ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
ありがとうございます。
ありがとうございます。ご不明な点がございましたら、いつでもご連絡ください。
こちらでの対応が難しい場合は、私のChatworkまでご連絡ください。
https://www.chatwork.com/konpeki31
こちらは『質問に対する』質問を書くところですので、(特にコードも示す場合は)回答として書かれた方が良いと思います。
回答欄なら"コードのマークダウン"も使えます。コードのマークダウンの枠内ではインデントも再現され、枠の右上隅の [+] をクリックで枠内全てがクリップボードにコピーされます。
jimbe様
ありがとうございます。
回答1件
あなたの回答
tips
プレビュー