2013-01-21 34 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 
相關問題