Excel VBA質問箱 IV

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

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


108 / 13327 ツリー ←次へ | 前へ→

【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 お礼[未読]

【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

【80358】Re:EXCELのユーザーフォームにあるリスト...
発言  マナ  - 19/1/31(木) 21:09 -

引用なし
パスワード
   ▼くるみ さん:

エクセルの学校もマルチポストに関しては同じような方針ですが
個人的には、どちらかに絞ったほうがよいと思います。

本サイトの基本方針
ht tp://www.vbalab.net/bbspolicy.html

別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。

また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。

【80359】Re:EXCELのユーザーフォームにあるリスト...
お礼  くるみ  - 19/1/31(木) 21:53 -

引用なし
パスワード
   私の認識不足ですね。
基本そのような対応が必要になっているとは思いませんでした。

不快な思いをさせてすみません。


誤解がないよう申し上げておきますが、解決次第他サイトでも報告するつもりでした。
そのことはご理解いただければと存じます。

【80370】Re:EXCELのユーザーフォームにあるリスト...
お礼  くるみ  - 19/2/3(日) 3:31 -

引用なし
パスワード
   データベースに別項目で状態を準備し、それによってリストボックスの内容を変えました。
ご指導いただきありがとうございました。

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