Excel 2010 索引匹配 VBA

Posted

技术标签:

【中文标题】Excel 2010 索引匹配 VBA【英文标题】:Excel 2010 index match VBA 【发布时间】:2011-11-26 11:27:18 【问题描述】:

尝试了一切,似乎无法得到这个。尝试将一个工作表的 B 行 (SiteTag) 中的值替换为另一个工作表中索引匹配的正确站点标签。

工作表(Site_Visit) 网站标签 AL27 AS26 GBEM4 ...

工作表(站点) SiteTag 项目名称 203AL27 AL27 203AS26 AS26 201GBEM4 GBEM4 ... ...

我需要将 Sheets("Site_Visit") 中的值 SiteTag 替换为 Sheets("Sites") 中的相应 SiteTag。

现在我只是试图让代码将正确的索引值放入一个变量中,我将把它作为每个单元格的值放入其中,并在循环中运行它。但是对于我的生活来说,它无法获得价值。这是我为变量尝试过的(一切都已声明)。

ST_Cells2 = Application.WorksheetFunction.Index("Sites!A2:A34", Application.WorksheetFunction.Match("Site_Visit!B2", "Sites!B2:B34", 0), 0)

其中“Sites!A2:A34”是适当替换值的范围 “Sites_Visit!B2”是查找值 "Sites!B2:B34" 是查找范围

我收到运行时错误'1004' Unable to get the Match property of the WroksheetFunction class。有人有什么想法吗?

【问题讨论】:

【参考方案1】:

Index 和 Match 函数需要 Ranges,但您正在向它们发送字符串。将字符串转为 Range 的最简单方法是使用 Excel 的 Range 函数:

st_cells2 = Application.WorksheetFunction.Index(Range("Sites!A2:A34"), Application.WorksheetFunction.Match(Range("Site_Visit!B2"), Range("Sites!B2:B34"), 0), 0)

【讨论】:

你是我的英雄。我已经为此工作了两天,我发誓我在某个时候尝试过 Range 功能。这完全让我开心!谢谢。 嗨,我也提出了这个问题,但我有多个标准。我怎样才能做到这一点? @user 我已经有一段时间没有使用 Excel(我现在生活在 Linux 世界并享受每一刻),所以我将不得不将您重定向到 Microsoft 的文章此事-support.microsoft.com/en-us/kb/59482【参考方案2】:

我遇到了同样的错误,但是当我更改为“应用程序”而不是 WorksheetFunction 时它运行正常:

Cells(12, 12).Value = Application.Index("Sheet1!B1:9", 2)

以某种方式直接从应用程序运行函数... /K

【讨论】:

以上是关于Excel 2010 索引匹配 VBA的主要内容,如果未能解决你的问题,请参考以下文章

匹配函数内的Excel VBA索引

在每个单元格 Excel 中使用 VBA 而不是使用公式(索引和匹配)

使用 VBA 宏在 excel 行中搜索字符串的完全匹配

VBA 代码填充 7 个相邻单元格中的索引匹配函数

在 Excel 加载项中编辑数据(使用索引/匹配的 UDF)

返回数组Excel VBA中元素的索引