Excel VBA函数返回一个数组

你可以创build一个Excel的VBA函数返回一个数组,就像LINEST一样,例如? 我将创build一个给定供应商代码,从产品供应商表格返回该供应商的产品清单。

好吧,在这里我有一个函数datamapping返回一个数组的多个“列”,所以你可以缩小到只有一个。 数组如何填充并不重要,特别是

Function dataMapping(inMapSheet As String) As String() Dim mapping() As String Dim lastMapRowNum As Integer lastMapRowNum = ActiveWorkbook.Worksheets(inMapSheet).Cells.SpecialCells(xlCellTypeLastCell).Row ReDim mapping(lastMapRowNum, 3) As String For i = 1 To lastMapRowNum If ActiveWorkbook.Worksheets(inMapSheet).Cells(i, 1).Value <> "" Then mapping(i, 1) = ActiveWorkbook.Worksheets(inMapSheet).Cells(i, 1).Value mapping(i, 2) = ActiveWorkbook.Worksheets(inMapSheet).Cells(i, 2).Value mapping(i, 3) = ActiveWorkbook.Worksheets(inMapSheet).Cells(i, 3).Value End If Next i dataMapping = mapping End Function Sub mysub() Dim myMapping() As String Dim m As Integer myMapping = dataMapping(inDataMap) For m = 1 To UBound(myMapping) ' do some stuff Next m end sub 

我认为Collection可能是你在找什么。

例:

 Private Function getProducts(ByVal supplier As String) As Collection Dim getProducts_ As New Collection If supplier = "ACME" Then getProducts_.Add ("Anvil") getProducts_.Add ("Earthquake Pills") getProducts_.Add ("Dehydrated Boulders") getProducts_.Add ("Disintegrating Pistol") End If Set getProducts = getProducts_ Set getProducts_ = Nothing End Function Private Sub fillProducts() Dim products As Collection Set products = getProducts("ACME") For i = 1 To products.Count Sheets(1).Cells(i, 1).Value = products(i) Next i End Sub 

编辑:这是一个非常简单的解决scheme的问题:填充combobox的产品,只要供应商的combobox改变它的值尽可能小vba。

 Public Function getProducts(ByVal supplier As String) As Collection Dim getProducts_ As New Collection Dim numRows As Long Dim colProduct As Integer Dim colSupplier As Integer colProduct = 1 colSupplier = 2 numRows = Sheets(1).Cells(1, colProduct).CurrentRegion.Rows.Count For Each Row In Sheets(1).Range(Sheets(1).Cells(1, colProduct), Sheets(1).Cells(numRows, colSupplier)).Rows If supplier = Row.Cells(1, colSupplier) Then getProducts_.Add (Row.Cells(1, colProduct)) End If Next Row Set getProducts = getProducts_ Set getProducts_ = Nothing End Function Private Sub comboSupplier_Change() comboProducts.Clear For Each Product In getProducts(comboSupplier) comboProducts.AddItem (Product) Next Product End Sub 

注意:我给供应商comboSupplier和产品comboProducts命名了ComboBox。