Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2023 / 76734 ←次へ | 前へ→

【80355】EXCELのユーザーフォームにあるリストボックスから特定の情報を省きたい
質問  くるみ  - 19/1/31(木) 18:29 -

引用なし
パスワード
   ◆◆質問内容

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

6 hits

【80355】EXCELのユーザーフォームにあるリストボックスから特定の情報を省きたい くるみ 19/1/31(木) 18:29 質問[未読]
【80358】Re:EXCELのユーザーフォームにあるリストボ... マナ 19/1/31(木) 21:09 発言[未読]
【80359】Re:EXCELのユーザーフォームにあるリストボ... くるみ 19/1/31(木) 21:53 お礼[未読]
【80370】Re:EXCELのユーザーフォームにあるリストボ... くるみ 19/2/3(日) 3:31 お礼[未読]

2023 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free