dポイントプレゼントキャンペーン実施中!

いつもお世話になっております

リストビューについての質問です。
以下のコードは添付ファイルのように
コマンドAを押すと Worksheets("A")

B列 C列 D列がリストビュー
に表示されます。
やりたいことは、
listbox1 に 
契約済み
未契約
全部
があり
その選択したのを抽出したいのです。

わかる方教えてくれませんでしょぅか

Private Sub CommandButton3_Click()
Dim wS As Worksheet
Dim val
Set wS = Worksheets("A")
wS.Select
ListView1.ListItems.Clear
val = wS.Range("B2").CurrentRegion.Value

For i = LBound(val) To UBound(val)

With ListView1.ListItems.Add
.Text = val(i, 1)
.SubItems(1) = val(i, 2)
.SubItems(2) = val(i, 3)
End With
Next


End Sub

「リストビュー 条件により表示」の質問画像

A 回答 (1件)

こんばんは


D列の条件分岐、設定と言う事でしょうか
この場合、配列 val(i,3) がそれなのかな。
D列を見ると済と空白、条件は済と空白と全部ですかね。
さて、フィルタで処理するか配列があるから、配列ループで処理するか

取り敢えず、配列の値を使ってIFでやると
条件分岐する為の値(変数)を作ってみましょう。

仮に変数 Dim strI As String として
val = wS.Range("B2").CurrentRegion.Value '既存
If ListBox1.Value = "契約済み" Then strI = "済み"
If ListBox1.Value = "未契約" Then strI = ""
If ListBox1.Value = "全部" Then strI = "*"

Select case などでもOK

次にIF文
For i = LBound(val) To UBound(val) '既存

If val(i, 3) Like strI Then
With ListView1.ListItems.Add
.Text = val(i, 1)
.SubItems(1) = val(i, 2)
.SubItems(2) = val(i, 3)
End With

End If
Next
こんなのでどうでしょう。
ちなみにLBound(val)についての扱い(B2: の行は
先に見出し行を作りLBound+1するとか工夫が必要かと思います。

未検証なので上手くいかなければ、ごめんなさい。
    • good
    • 0
この回答へのお礼

いつもお世話になっております

ありがとうございます
思い通りにできました。

お礼日時:2021/10/22 20:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!