过滤ListBox只包含Excel中的唯一值

时间:2017-03-09 14:18:08

标签: excel vba excel-vba listbox

我有一个简单的Excel / VBA问题:

我想要创建的是一个(单选)ListBox,我想在不同的工作表上显示我拥有的Data的唯一值。

到目前为止,我有一个像这样的ListBox:

enter image description here

我想要显示的数据的命名选择:

enter image description here

我使用了这样的公式,并将其用作ListBox的输入。

enter image description here

公式:= BEREICH.VERSCHIEBEN(TopicData!$ C $ 1; 1; 0; ANZAHL2(TopicData!$ C:$ C)-1; 1)

现在我的问题是:如何让ListBox只显示唯一值?我熟悉vba,所以包含这个的解决方案将完全没问题。事实上,我已经尝试删除vba中的重复条目,只要ListBox发生更改,但由于某种原因,似乎没有任何工作。

这是我的vba脚本,我试图解决这个问题:

unfortunatley我总是得到一个"错误400"当我试图在ListBox上调用 RemoveItem 时。

' ...
' filter listbox content so only unique values remain
Dim i As Integer

' find duplicates
Dim inList As New Collection
Dim indexesToRemove As New Collection

For i = availableTopicsListBox.ListCount - 1 To 1 Step -1
    If CollectionContains(inList, availableTopicsListBox.List(i)) Then
        ' if it is already in the list, remove it
        indexesToRemove.Add i
    Else
        inList.Add availableTopicsListBox.List(i)
    End If
Next i

' remove duplicates
Dim j As Integer
For j = indexesToRemove.count To 1 Step -1
    availableTopicsListBox.RemoveItem (indexesToRemove(j))
Next j
'...

1 个答案:

答案 0 :(得分:2)

下面的代码将使用IndexedHashMap< K, T > mCurrent = new IndexedHashMap< K, T >(); IndexedHashMap< K, T > mConstantCurrent = Collections.unmodifiableMap(mCurrent);' 仅存储C列中的唯一值(在&#34; TopicData&#34;工作表中),然后填充Dictionary列表框中仅包含唯一值availableTopicsListBox

<强>代码

Dictionary