Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Excel 2010)
EXCELのユーザーフォームにあるリストボックスから特定の情報を省きたい
投稿日時: 19/01/31 18:27:06
投稿者: くるみこ

◆◆質問内容
 
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

回答
投稿日時: 19/01/31 20:15:32
投稿者: WinArrow
投稿者のウェブサイトに移動

コードの中身はよくわかりませんが
 
> If .Cells(.Range("顧客分類列")) = "販売済" Then
↑のコードは、コンパイルエラーになりませんか?

投稿日時: 19/01/31 21:49:53
投稿者: くるみこ

ご回答ありがとうございます。
 
CheckBoxをクリックしてもエラーは帰ってきませんが、何の結果も反映されません。

回答
投稿日時: 19/01/31 21:55:58
投稿者: WinArrow
投稿者のウェブサイトに移動

> If .Cells(.Range("顧客分類列")) = "販売済" Then
このコードの意味が分かりません。
 
ステップ実行してみてください。
このコードが実行されるか?

回答
投稿日時: 19/02/01 10:40:13
投稿者: WinArrow
投稿者のウェブサイトに移動

くるみこ さんの引用:
ご回答ありがとうございます。
 
CheckBoxをクリックしてもエラーは帰ってきませんが、何の結果も反映されません。

コンパイルエラーとは、
文法エラーのことで、コンパイルエラーがあると実行できません。
 
クリックしても。。つまり、実行できるということは、
掲示したコードが、実際の記述と違っている可能性があります。
実際の記述と掲示内容を検証してみてください。
 
因みに、実行したときに発生したエラーは、実行時エラーといいます。
 

投稿日時: 19/02/03 03:26:44
投稿者: くるみこ

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

回答
投稿日時: 19/02/03 07:40:41
投稿者: simple

回答者からの指摘に対してそれだけですか?
都合良すぎませんか?
回答者を道具としてだけ見ていると指摘されても致し方ない行動です。
 
「掲示板でマルチポストはなぜいけないの?」
http://www.ml-info.com/weekly/archives/2009/091024o.html
全員とは言えないが、このように考える人は多いと思います。
 
ここを含めて少なくとも5カ所に質問していますね。(あえて列挙しませんが)
こんなに多くのところに質問してどうするつもりだったのですか。
今後こういうことは止めてください。
回答者に迷惑がかかるだけです。
 
なお、こちらのスレッドはきちんと閉じてください。
形式的には、まだ回答を求めているという状態になっていますから。

回答
投稿日時: 19/02/03 09:12:01
投稿者: WinArrow
投稿者のウェブサイトに移動

回答者からの質問は、
無視(無回答)というスタンスでしょうか?
 
方針を変更したことには、反論しませんが、
まず、回答者の質問には、無視しないようお願いします。
 
simpleさんのコメントにあるようなマルチポストは、
感心しません。
 

トピックに返信