1

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

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)东西我可以使用

4

2 回答 2

3

如果要搜索第二列,可以使用Index

m = Application.Match(z, Application.Index(Numbers, 0, 2), 0)

例如。

于 2019-02-14T11:19:14.510 回答
1

类型不匹配”实际上是因为Match返回错误。您必须将其转换为字符串MsgBox CStr(m),它将显示Error 2042.

这不起作用,因为Match 方法的第二个参数必须是一列或一行。这是因为Match可以在列中搜索(并返回行号)或在行中搜索(并返回列号)。但是如果它是一个二维范围,它不知道它应该返回列号还是行号。

您将其定义为 2D 范围,因此它失败了。

例如。以下将起作用,因为它仅代表一列。

Dim Numbers(1 To 10, 1 To 1) As Long
Numbers(10, 1) = 10
于 2019-02-14T11:16:35.510 回答