Excel组合框列表

时间:2017-12-27 07:34:50

标签: excel vba excel-vba

我在Excel中做汽车制造商列表,我遇到了组合框的问题。我从D2列填充我的组合框。

  • 美国
  • 美国
  • 日本
  • 德国
  • 法国

例如美国有很多汽车公司,但我想在我的组合框中只展示一次美国。现在美国在组合框中显示2次,因为它是在D2列中写的。有没有简单的方法修改Excel或编写VBA,以便每个国家只在组合框中显示一次。请帮助我很困惑。

请参阅下面的图片。

Car manufacturers in Excel

1 个答案:

答案 0 :(得分:0)

代码将进入standard module,可以通过VBE添加( Alt + F11

选项1使用字典收集唯一国家

Option Explicit

Public Sub PopulateCombo()

    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet2") 'change as appropriate

    Dim lastRowInD As Long
    Dim dedupRange As Range

    lastRowInD = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
    Set dedupRange = ws.Range("D2:D" & lastRowInD)

    Dim dict As New Scripting.Dictionary
    Dim currCell As Range

    For Each currCell In dedupRange
         If Not dict.Exists(currCell.Value2) Then dict.Add currCell.Value2, currCell.Value2
    Next currCell

    Dim key As Variant

    With ws.OLEObjects("ComboBox1").Object
        .Clear
        For Each key In dict.Keys
            .AddItem dict(key)
        Next key

    End With

End Sub

选项2:使用重复数据删除Excel功能。

警告:这会从D列中的工作表中删除重复项。

如果您在工作表中有一个ActiveX comboxbox并且名为Countries的命名区域由 Ctrl + F3 创建以打开{{ 1}}然后输入

姓名:国家

指:Name Manager

如果您的Excel版本较早且行数限制为65536,则调整$ D $ 1048576。

=OFFSET(Sheet2!$D$2,0,0,COUNTA(Sheet2!$D$2:$D$1048576),1)