如何定义一个二维数组的列,如范围?

时间:2019-02-14 10:56:31

标签: excel vba

如果我有一个如下所示的一维数组,它会将数组视为一个范围:

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

enter image description here

但是作为二维数组,我不知道如何将其视为范围,它会返回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

enter image description here

我想知道是否存在诸如Numbers.Column(2)之类的方法或我可以使用的方法

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