如果我有一个如下所示的一维数组,它会将数组视为一个范围:
Option Explicit
Sub test()
Dim Numbers(1 To 10) As Long
Dim z As Long
Dim m As Variant
z = 10
Numbers(10) = 10
m = Application.Match(z, Numbers, 0)
MsgBox m
End Sub
但是作为二维数组,我不知道如何将其视为范围,它会返回Type Mismatch
错误:
Option Explicit
Sub test()
Dim Numbers(1 To 10, 1 To 2) As Long
Dim z As Long
Dim m As Variant
z = 10
Numbers(10, 2) = 10
m = Application.Match(z, Numbers, 0)
MsgBox m
End Sub
我想知道是否存在诸如Numbers.Column(2)
之类的方法或我可以使用的方法
答案 0 :(得分:3)
如果您要搜索第二列,则可以使用Index
来实现:
m = Application.Match(z, Application.Index(Numbers, 0, 2), 0)
例如。
答案 1 :(得分:1)
“类型不匹配” 实际上是因为Match
返回了错误。您必须将其转换为字符串MsgBox CStr(m)
,它将显示Error 2042
。
这不起作用,因为Match method的第二个参数必须是一列或一行。这是因为Match
可以在列中搜索(并返回行号)或在行中搜索(并返回列号)。但是,如果它是2D范围,则不知道是否应返回列号或行号。
您将其定义为2D范围,然后才失败。
例如。以下将起作用,因为它仅代表一列。
Dim Numbers(1 To 10, 1 To 1) As Long
Numbers(10, 1) = 10