2013-01-21 40 views
-1

问题描述:如何将一列中的唯一值复制到数组并修剪它们?

我有两个表,一个是空白的报告模板,另包含我的数据。在数据集中,在列M中有一个位置ID。每个位置ID都被格式化为,()。例如,位于迈阿密的仓库将是:“迈阿密,佛罗里达(DIST)”,因为它是分销部门的一部分。

我想将所有的唯一值导入到一个数组中,然后修剪这些内容,以便我得到一个只包含城市名称的数组。


Superflous详情:

我想到了我的旧“走做”的先进数据过滤到一个单独的表,修剪它,并引用的范围内,但时尚决定这样做反对。

我想了解更多关于使用数组而不是表单对象的编程,这是我避免的,因为我不喜欢VBA如何处理它们,而不是其他语言,我使用数组有更多动态属性的其他语言。

回答

4

您可以使用WorkSheetFunction.Transpose方法将列中的数据复制到Array。它给你一个index 1 based Single Dimensional Array。如果您有多列,则该方法为您提供多维数组。

Dim arrayV as Variant  
arrayV = WorkSheetFunction.Transpose(Sheets(1).Range("A2:A20").Value) 

要找到上次使用的排在这个范围内,使用下面的代码,将删除被填充到数组任何空单元格的值,

Dim LastRow as Long 
LastRow = Sheets(1).Cells(Sheets(1).Rows.Count, _ 
     Sheets(1).Range("A2:A20").Column).End(xlUp).Row 
arrayV = WorkSheetFunction.Transpose(Sheets(1).Range("A2:A20").Resize(LastRow-1).Value) 

接下来,以获得独特的价值观,你可能会使用一个dictionary对象,因为它只会保存唯一的项目。

Dim dc as Object 
Set dc = CreateObject("Scripting.Dictionary") 

For i = Lbound(arrayV) to Ubound(arrayV) 
    If Not dc.Exists(arrayV(i)) Then 
     dc.Add arrayV(i), i 
    End If 
Next i 

'--output to Sheet or do whatever you want with this 
dc.Keys() '-- gives you an array with the unique values  

Set dc = Nothing 
相关问题