簡體   English   中英

根據電子表格數據在VBA中創建數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM