| 
    
     |  | ◆◆質問内容 
 EXCELでユーザーフォームを作り、データベースから条件に当てはまるものをリストボックスで一覧表示させています。
 表示させているものは、Worksheetsは顧客情報にある列「顧客名」、「顧客分類」、「状態」の情報です。
 
 Changeを使用しそれぞれに該当するテキストボックスorコンポボックスに入力があると、リストボックスに表示される仕組みなのですが、「顧客分類」にある”販売済"だけを省いて表示するような仕組みができないかと、チェックボックスを作ってやってみたのですができません。
 
 どなたかご教授よろしくお願いいたします。
 
 ◆◆全体コード
 
 Option Explicit
 
 
 Private Sub TextBox1_Change()
 Call SetListBox
 End Sub
 
 Private Sub UserForm_Initialize()
 rtnNo = 0
 Call SetBunruiList
 Call SetListBox
 
 End Sub
 
 'ここを追加
 
 Private Sub CheckBox1_Click()
 
 Dim i As Long
 
 If Me.CheckBox1.Value = True Then
 With Me.lst顧客リスト
 For i = .ListCount To 1 Step -1
 If .Cells(.Range("顧客分類列")) = "販売済" Then
 .RemoveItem (i - 1)
 End If
 Next
 End With
 End If
 
 End Sub
 
 'ここまで追加
 
 Private Sub SetBunruiList()
 Dim wRow    As Long
 
 Me.cmb顧客分類.Clear
 For wRow = 3 To Worksheets("顧客分類").Range("A1").CurrentRegion.Rows.Count
 Me.cmb顧客分類.AddItem Worksheets("顧客分類").Cells(wRow, 1)
 Next
 End Sub
 
 
 Private Sub txt顧客名_Change()
 Call SetListBox
 End Sub
 
 Private Sub cmb顧客分類_Change()
 Call SetListBox
 End Sub
 
 Private Sub lst顧客リスト_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 rtnNo = Me.lst顧客リスト.Text
 Unload Me
 End Sub
 
 Private Sub SetListBox()
 Dim wRow    As Long
 Dim wLstRow   As Long
 Dim wHitFlg   As Boolean
 
 Me.lst顧客リスト.Clear
 wLstRow = 0
 With Worksheets("顧客情報")
 For wRow = 2 To .Range("A1").CurrentRegion.Rows.Count
 wHitFlg = True
 If Me.txt顧客名 <> "" Then
 If InStr(1, .Cells(wRow, .Range("顧客名列").Column), Me.txt顧客名, vbTextCompare) = 0 Then
 wHitFlg = False
 End If
 End If
 If Me.cmb顧客分類 <> "" Then
 If .Cells(wRow, .Range("顧客分類列").Column) <> Me.cmb顧客分類 Then
 wHitFlg = False
 End If
 End If
 If Me.TextBox1 <> "" Then
 If InStr(1, .Cells(wRow, .Range("状態列").Column), Me.TextBox1, vbTextCompare) = 0 Then
 wHitFlg = False
 End If
 End If
 If wHitFlg = True Then
 Me.lst顧客リスト.AddItem ""
 Me.lst顧客リスト.List(wLstRow, 0) = wRow
 Me.lst顧客リスト.List(wLstRow, 1) = Worksheets("顧客情報").Cells(wRow, 2)
 Me.lst顧客リスト.List(wLstRow, 2) = Worksheets("顧客情報").Cells(wRow, 3)
 Me.lst顧客リスト.List(wLstRow, 3) = Worksheets("顧客情報").Cells(wRow, 8)
 
 wLstRow = wLstRow + 1
 End If
 Next
 End With
 
 'ここを追加
 
 Dim i As Long
 
 If Me.CheckBox1.Value = True Then
 With Me.cmb顧客分類
 For i = .ListCount To 1 Step -1
 If .List(i - 1, 2) = "販売済" Then
 .RemoveItem (i - 1)
 End If
 Next
 End With
 End If
 
 'ここまでついか
 
 件数 = lst顧客リスト.ListCount
 
 End Sub
 
 
 ◆◆やったこと
 
 'Private Sub CheckBox1_Click()
 に以下構文を追加
 Dim i As Long
 
 If Me.CheckBox1.Value = True Then
 With Me.lst顧客リスト
 For i = .ListCount To 1 Step -1
 If .Cells(.Range("顧客分類列")) = "販売済" Then
 .RemoveItem (i - 1)
 End If
 Next
 End With
 End If
 
 End Sub
 
 'Private Sub SetListBox()に以下構文を追加
 
 Dim i As Long
 
 If Me.CheckBox1.Value = True Then
 With Me.cmb顧客分類
 For i = .ListCount To 1 Step -1
 If .List(i - 1, 2) = "販売済" Then
 .RemoveItem (i - 1)
 End If
 Next
 End With
 End If
 
 
 |  |