【问题标题】:How to define a two-dimensional array's column like a range? [duplicate]如何像范围一样定义二维数组的列? [复制]
【发布时间】:2019-02-14 10:56:31
【问题描述】:

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

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) 之类的方法或我可以使用的东西

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    如果你想搜索第二列,你可以使用Index 来获得:

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

    例如。

    【讨论】:

    • 不错,从未想过在数组上使用该解决方案!
    【解决方案2】:

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

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

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

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

    Dim Numbers(1 To 10, 1 To 1) As Long
    Numbers(10, 1) = 10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-03
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      相关资源
      最近更新 更多