arrays - Excel宏将整列转换为一维数组

标签 arrays vba excel

我有一个这样的数据表

ID    Name
-------------------
B23     Max
D27     Nads
W34     sads
A65     Robin
C37     Harvard
C65     Nivkai
V87     adsdasd
Q78     sadsad

我需要将所有 ID 作为字符串放入“一维数组”中。所以我尝试了这个,

Dim RowCount As Integer
RowNumber = wb1.Sheets(1).UsedRange.Rows.Count

Dim idArray() As String
For j = 1 To RowNumber
    ID = wb1.Sheets(1).Cells(j, 1).Value
    ReDim idArray(j)
    idArray(j) = CStr(ID)
Next j

我的主要目标是以这种方式使用此 idArray 在不同的工作表上应用过滤器

wb2.Sheets(1).Range(Selection, Selection.End(xlDown)).AutoFilter Field:=1, Criteria1:=idArray(), Operator:=xlFilterValues

但后来当我尝试使用下面的代码打印整个数组时,它什么也没打印。而且似乎 idArray() 是空的。

For n = 1 To UBound(idArray)
    Debug.Print QidArray(n)
Next n

谁能告诉我我做错了什么。

谢谢

最佳答案

虽然 Mehow 已经 Eloquent 地回答了您的具体要求,但更一般地说,请尽量避免循环遍历工作表 - 它很慢。将数组复制到内存中并循环遍历它总是更快 - 这里有一些替代方案:

<强>1。仅独特值(value)

Sub UniqueValuesOnly()

Dim vData, idArray  As Variant
Dim x               As Long
Dim oDic            As Object

Set oDic = CreateObject("scripting.dictionary")

vData = Sheets(1).Cells(1, 1).CurrentRegion.Resize(, 1).Value

For x = LBound(vData) + 1 To UBound(vData)
    If Not oDic.exists(vData(x, 1)) Then
        oDic.Add vData(x, 1), Nothing
    End If
Next x

idArray = oDic.keys


End Sub

<强>2。少量数据不循环

Sub AllSmallData()

Dim idArray

With Sheets(1).Cells(1, 1).CurrentRegion
    idArray = Application.Transpose(.Offset(1).Resize(.Rows.Count - 1, 1).Value)
End With

End Sub

<强>3。循环数组获取大量数据

Sub AllLargeData()
Dim idArray() As String, vData
Dim x As Long

With Sheets(1).Cells(1, 1).CurrentRegion
    vData = .Offset(1).Resize(.Rows.Count - 1, 1).Value
End With

ReDim idArray(1 To UBound(vData))

For x = LBound(vData) To UBound(vData)
    idArray(x) = vData(x, 1)
Next x

End Sub

关于arrays - Excel宏将整列转换为一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18715170/

相关文章:

php - Friend_array 删除

excel - VBA运行时错误 '9' : Subscript out of range; trying to activate another workbook

c++ - 在多维和一维数组之间进行转换

java - 这些 ArrayList 函数的 2D ArrayList 等价物是什么?

Excel VBA : How to clear all contents of multiple worksheets Using a `LCASE` Identifier

arrays - 将多维数组写入excel vba

Excel以毫秒显示自定义日期格式

vba - 使用VB宏将数据从Word表复制到Excel表时如何保留源格式?

regex - VBA 6 : regex not recognizing complicated string

在 C 中计算传递给 scanf() 的参数