我有100多张财务数据,我正在创建一张主表,所有公司的数据都在一张综合表上。我几乎拥有一切,但问题是公司有时会将每股收入列为多种不同的东西(可能是每股总销售额,每ADR的总销售额,每股净营业收入等)。
问题是,由于这些都没有列在一起,因此每个工作表将始终只有列表中的一个。
有没有办法将MATCH函数与值列表一起使用,如果其中一个存在于指定的数组中,请给我那个行号?
例如:
假设sheet1具有值"每股净营业收入",我想使用匹配功能而无需查看和必须指定。相反,我只想列出一些值,如果MATCH找到其中一个,给我那一行?
答案 0 :(得分:1)
一种选择是简单地将多个MATCH
语句与您想要测试的不同字符串链接起来。返回不返回错误的第一个值(#N/A
)。
例如:
=IFERROR(MATCH("Total Sales Per Share", FinancialData!A1:A100,0),
MATCH("Total Sales Per ADR", FinancialData!A1:A100,0))
如果您愿意使用数组,以下代码也可以使用,但仍然相当冗长。请注意,工作表LookupTerms
将包含一系列查找字词,而FinancialData
将包含您要在其中搜索字词的数组:
{=MIN(IFERROR(Match(LookupTerms!A1:A10, FinancialData!A1:A100, 0), ""))}
另一种选择是在你的答案中使用VBA。以下代码将允许您指定一系列查找术语和查找数组。它将查看在查找数组中找到的第一个术语的查找术语,并返回该匹配的索引。
Function MatchMultiple(lookup_terms As Range, lookup_array As Range) As Double
Dim result As Variant
Dim lookup_term As Range
For Each lookup_term In lookup_terms.Cells
If Not IsEmpty(lookup_term.Value) Then
result = WorksheetFunction.Match(lookup_term, lookup_array, 0)
If Not IsError(result) Then
MatchMultiple = result
Exit Function
End If
End If
Next
MatchMultiple = CVErr(xlErrNA)
End Function
将此函数添加到模块,然后按如下方式调用它:
=MatchMultiple(LookupTerms!A1:A10, FinancialData!A1:A100)