【问题标题】:Return the row number of a match in a 2d array返回二维数组中匹配项的行号
【发布时间】:2019-12-18 12:39:43
【问题描述】:

我试图在网上找到解决方案,但无论出于何种原因根本找不到任何东西(也许我缺乏搜索技能)。我觉得这是一个相当简单的查询。

我正在声明一个数组并使用以下内容为其分配数据,我已经确认这是有效的:

Dim arr As Variant
arr = Sheet.Range("A1").CurrentRegion

现在,鉴于这是一个二维数组(只有 2 列数据),我想使用匹配类型的函数来返回与数组第 1 列中的值关联的行号。我的最终目标是使用它来调用数组第 2 列中的相应值 - 本质上是在 VBA 中构建一个索引/匹配类型的场景。但是,Application.Match 函数失败,因为这不是一维数组。请参见下面的示例:

1|Apple   |Fruit
2|Tomato  |Fruit
3|Carrot  |Vegetable
4|Zucchini|Vegetable

我想要实现的是类似于 MATCH("Tomato", arr(), 0) 的结果,“2”是与番茄相关的行号。我只需要在数组的第 1 列中进行搜索。有人可能对最简单的方法有任何建议吗?

谢谢!

【问题讨论】:

  • 使用简单的For...循环遍历数组?
  • 要查找某个范围内的数据,请使用Range.Find 方法。这就是它的设计目的。

标签: excel vba


【解决方案1】:

如果要避免循环,可以对数组进行切片,因此:

Sub x()

  Dim arr As Variant, v As Variant

  arr = Range("A1").CurrentRegion
  v = Application.Match("Tomato", Application.Index(arr, , 1), 0) 'look in first column
  If IsNumeric(v) Then MsgBox v
End Sub

【讨论】:

  • 谢谢 - 这正是我想要的!
  • @SJR,超级有用的方法,尤其是在python中! +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多