gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:00:37 26 4
gpt4 key购买 nike

我有一个这样的数据表

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com