[英]Creating an array in VBA from spreadsheet data
我有一個要放入VBA數組的數據電子表格,然后將其唯一值輸出到新表。 到目前為止,我已經做到了。 但是,原始數據中的某些單元格的文本用逗號分隔,我也想將其添加到數組中。 我不太願意工作。
在各種“點心”之后,我的代碼是
'Grabs the data to work with
Set rTable = Worksheets("Data Entry").Range("N1:N100", "P1:P100")
'Puts it into an array
MyArray = rTable.Value
'Sets where the data will end up
Set rCell = Worksheets("TestSheet").Range("A1:A100")
'Each unique entry gets added to the new array
On Error Resume Next
For Each a In MyArray
UnqArray.Add a, a
Next
'Add unique data to new location
For i = 1 To UnqArray.Count
rCell(i, 1) = UnqArray(i)
Next
我嘗試做一個新的變體來存儲拆分數據
SpArray = split(MyArray,", ")
然后在這里
MyArray = rTable.Value
SpArray = split(MyArray,", ")
然后參考SpArray
獲取其余的代碼
我也嘗試過
For Each a in SpArray
但這對我不起作用。
在篩選出唯一的數組之前,是否需要對數組的每個單元執行單獨的循環?
是的,您需要另一個循環。 但是,如果您設置對Microsoft Scripting Runtime的引用並使用Dictionary對象,則可以消除寫入該范圍的循環,因為Dictionary.Keys返回一個數組。
在此示例中,它嘗試拆分逗號上的每個條目並將每個條目視為唯一。 如果沒有逗號,則Split返回一個值,因此在兩種情況下都可以使用。 拆分不需要拆分的內容可能會花費很小的成本,但是直到您的范圍更大時,您才會注意到。 我認為,這使代碼更整潔。
Sub WriteUniques()
Dim dcUnique As Scripting.Dictionary
Dim vaData As Variant
Dim vaSplit As Variant
Dim i As Long, j As Long
vaData = Sheet1.Range("$I$12:$I$62").Value
Set dcUnique = New Scripting.Dictionary
For i = LBound(vaData, 1) To UBound(vaData, 1)
vaSplit = Split(vaData(i, 1), ",")
For j = LBound(vaSplit) To UBound(vaSplit)
If Not dcUnique.Exists(vaSplit(j)) Then
dcUnique.Add vaSplit(j), vaSplit(j)
End If
Next j
Next i
Sheet1.Range("J12").Resize(dcUnique.Count, 1).Value = Application.Transpose(dcUnique.Keys)
End Sub
對我有用的代碼調整是將Split放在末尾。
'Add unique data to new location
For i = 1 To UnqArray.Count
rCell(i, 1) = Split(UnqArray(i), ",")
Next
然后,使用來自不同范圍的數據建立一個數組,並在僅輸出唯一的數組之前,將逗號分隔的數組進行拆分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.