-1

问题描述:

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

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


多余的细节:

我曾想过以旧的“首选”方式将数据高级过滤到单独的工作表中,对其进行修剪并引用范围,但最终决定反对。

我想了解更多关于使用数组而不是工作表对象进行编程的知识,这是我一直避免使用的,因为我不喜欢 VBA 处理它们的方式与我使用的数组具有更多动态属性的其他语言相比。

4

1 回答 1

4

您可以使用WorkSheetFunction.Transpose方法将列中的数据复制到数组。它给你一个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
于 2013-01-21T03:46:06.560 回答