gpt4 book ai didi

arrays - 返回数组中元素的索引 Excel VBA

转载 作者:行者123 更新时间:2023-12-01 16:25:34 25 4
gpt4 key购买 nike

我有一个数组 prLst,它是一个整数列表。整数未排序,因为它们在数组中的位置代表电子表格上的特定列。我想知道如何在数组中找到特定整数并返回其索引。

似乎没有任何资源向我展示如何在不将数组转换为工作表上的范围的情况下进行操作。这似乎有点复杂。这对于 VBA 来说是不可能的吗?

最佳答案

Dim pos, arr, val

arr=Array(1,2,4,5)
val = 4

pos=Application.Match(val, arr, False)

if not iserror(pos) then
Msgbox val & " is at position " & pos
else
Msgbox val & " not found!"
end if

更新为显示使用 Match(带有 .Index)在二维数组的某个维度中查找值:

Dim arr(1 To 10, 1 To 2)
Dim x

For x = 1 To 10
arr(x, 1) = x
arr(x, 2) = 11 - x
Next x

Debug.Print Application.Match(3, Application.Index(arr, 0, 1), 0)
Debug.Print Application.Match(3, Application.Index(arr, 0, 2), 0)
<小时/>

编辑:这里值得说明 @ARich 在评论中指出的内容 - 如果您在循环中执行此操作,则使用 Index() 来切片数组会产生可怕的性能。

在测试中(下面的代码),Index() 方法几乎比使用嵌套循环慢 2000 倍。

Sub PerfTest()

Const VAL_TO_FIND As String = "R1800:C8"
Dim a(1 To 2000, 1 To 10)
Dim r As Long, c As Long, t

For r = 1 To 2000
For c = 1 To 10
a(r, c) = "R" & r & ":C" & c
Next c
Next r

t = Timer
Debug.Print FindLoop(a, VAL_TO_FIND), Timer - t
' >> 0.00781 sec

t = Timer
Debug.Print FindIndex(a, VAL_TO_FIND), Timer - t
' >> 14.18 sec

End Sub

Function FindLoop(arr, val) As Boolean
Dim r As Long, c As Long
For r = 1 To UBound(arr, 1)
For c = 1 To UBound(arr, 2)
If arr(r, c) = val Then
FindLoop = True
Exit Function
End If
Next c
Next r
End Function

Function FindIndex(arr, val)
Dim r As Long
For r = 1 To UBound(arr, 1)
If Not IsError(Application.Match(val, Application.Index(arr, r, 0), 0)) Then
FindIndex = True
Exit Function
End If
Next r
End Function

关于arrays - 返回数组中元素的索引 Excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031416/

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