使用工作表VBA Excel中的每个值中的一个创buildcombobox
我想创build一个工作表中包含数据的combobox。 我有这样做的代码,但我需要的是只显示给定列中的每个值之一。 例如在栏目AI中有多条狗,猫和鱼,我想要的combobox显示的是3,这是狗,猫,鱼的名单。 如何让它停止显示狗,狗,狗,猫,猫,鱼,鱼,鱼,鱼等。 以下是我目前使用的代码。
With Worksheets("RuleID") OriginatingDomainComboBox.List = .Range("A2:A" & .Range("A" & .Rows.Count).End(xlUp).row).value End With
任何帮助将是伟大的,如果有什么你可能需要现在让我知道。
谢谢
以下是完成此任务的方法:
Public Sub loadValues() Dim lastRow As Long Dim rng As Excel.Range Dim rawData As Variant Dim columnItems() As String Dim arraySize As Integer Dim i As Long Dim uniqueItems() As Variant '------------------------------------------------------------------- 'Find data range With Worksheets(1) lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row Set rng = .Range(.Cells(1, 1), .Cells(lastRow, 1)) End With 'Get data from worksheet. rawData = rng '<-- for better performance we assign all the data to ' Variant array and we iterate through this array ' later instead of iterating through worksheet's cells 'Convert rawData array to 1D array of strings. arraySize = UBound(rawData, 1) - LBound(rawData, 1) + 1 ReDim columnItems(1 To arraySize) For i = LBound(columnItems) To UBound(columnItems) columnItems(i) = rawData(i, 1) Next i 'Get unique values from [columnItems] array by using function [uniqueValues]. uniqueItems = uniqueValues(columnItems) 'Assign array of unique values as a list to ComboBox. cmbTest.List = uniqueItems End Sub
为了使这个方法正常工作,你需要包含函数来获得给定数组的唯一值 。
除了@ mielk的回答,你还可以使用字典来完成你以后的事情。
以下使用“Microsoft脚本运行时”参考。 请记住在“工具 – >参考”中启用此function。
Option Explicit Sub populateUF() Dim dict As Scripting.Dictionary, myItem As Variant Dim lrow As Long, i As Long Dim myValues() As Variant Set dict = New Scripting.Dictionary lrow = Cells(Rows.Count, 1).End(xlUp).Row myValues = Range(Cells(2, 1), Cells(lrow, 1)) For i = 1 To UBound(myValues, 1) If Not dict.Exists("Item" & myValues(i, 1)) Then dict.Item("Item" & myValues(i, 1)) = myValues(i, 1) End If Next i For Each myItem In dict UserForm1.ComboBox1.AddItem dict.Item(myItem) Next myItem UserForm1.Show End Sub
我们使用.Exists
方法来评估数组中的值是否已经被添加到字典中。 将新值添加到字典中,从而只分配数组中的唯一值。 然后我们遍历字典使用for each
语句,赋值给combobox。
有关词典的进一步阅读,请参阅这里的文档,并在这里更详细。