教えて!gooにおける不適切な投稿への対応について

いつもお世話になっております。
Listbbox1
Listbbox2
があります。
例)
担当選択したら
お客様を表示されるのですが、
重複してないのを表示させることは
可能でしょうか。

下記のコードは添付ファイルのようになります。
ただ、お客様だけは重複削除はできていません。

わかる方おしえてくれませんでしょうか


Private Sub UserForm_initialize()
With Me.ListBox2
.AddItem "斉藤"
.AddItem "加藤"
.AddItem "佐藤"
.AddItem "内藤"
End With
End Sub

Private Sub ListBox2_Click()

Dim i As Long
With ListBox1
.Clear

For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row

If Cells(i, "C").Value = ListBox2.List(ListBox2.ListIndex) Then
.AddItem Cells(i, "B").Value
End If

Next
End With
End Sub

「Listboxについての質問」の質問画像
gooドクター

A 回答 (3件)

Private Sub ListBox2_Click()を以下のようにしてください。


dictionaryを使用して
同じお客様の場合は、登録しないようにしています。


Private Sub ListBox2_Click()

Dim i As Long
Dim dicT As Object
Set dicT = CreateObject("Scripting.Dictionary")

With ListBox1
.Clear

For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row

If Cells(i, "C").Value = ListBox2.List(ListBox2.ListIndex) Then
If dicT.exists(Cells(i, "B").Value) = False Then
.AddItem Cells(i, "B").Value
dicT(Cells(i, "B").Value) = True
End If
End If

Next
End With
End Sub
    • good
    • 0
この回答へのお礼

ご返事遅れて申し訳ありません

上手くいきました。

やっばりできる人はできるんですね

すごいです

ありがとうございました。

お礼日時:2021/04/14 11:38

Dictionaryオブジェクトについては過去に何度も質問されてたので解決案を自力にて見つけて欲しかったのですが。


そこで別件として改めてワークシート関数によるもの(フィルター込み)を。

Private Sub ListBox2_Click()

Dim r As Range

If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False

With ListBox1
.Clear

Range("C1").AutoFilter 3, ListBox2.List(ListBox2.ListIndex)

For Each r In Range("B2", Cells(Rows.Count, "B").End(xlUp)).SpecialCells(xlCellTypeVisible)

If WorksheetFunction.CountIfs(Range("C2", r.Offset(, 1)), ListBox2.List(ListBox2.ListIndex), _
Range("B2", r), r.Value) = 1 Then

.AddItem r.Value

End If

Next

End With

ActiveSheet.AutoFilterMode = False
End Sub
-----------

CountIfsの方がDictionaryオブジェクトよりはデータ量によって遅いらしいので無駄な判定をしないようフィルターにて必要なデータを抽出してみました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2021/04/14 11:56

よく使われているDictionaryオブジェクトにも値を入れて、重複チェックをされてみるのも手ですよ。

    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2021/04/14 11:39

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング