在 Index(Match) 函数中使用通配符

Using Wildcards in Index(Match) function

我在 vba 代码中使用的 Index(Match()) 函数似乎遇到了一些问题。因为某些搜索条件并不完全相同,所以我尝试在单元格 C2 周围使用 "*" 通配符来搜索相似的项目。另外,我不想简单地将我正在使用的公式放入带有 Range("D2").Formula 代码的单元格中,这会导致自动更新,因此,我也遇到了这方面的问题。

这是我的代码。

Range("D2") = Index('Future_220_140_MON'!$B:$AK, Match(" * "&C2&" * "&T2, 'Future_220_140_MON'!$B:$AK&'Future_220_140_MON'!$A:$A, 0))

我只是错误地格式化了代码,还是有一种特定的方法可以在匹配多个条件时调出通配符。

首先,您应该始终定义要将结果存储为什么。默认情况下,只写 Range("D2") 将使用单元格的 .Value 属性,但最好写 Range("D2").Value。此外,您的两个函数实际上都是 Application.WorksheetFunctions。试试这个代码:

Dim MatchResult As Double
MatchResult = Application.WorksheetFunction.Match(Conditions)
Range("D2").Value = Application.WorksheetFunction.Index(Conditions, MatchResult)

WorksheetFunction.Index Method MSDN

WorksheetFunction.Match Method MSDN

试试这个:

    Range("D2").Value = Application.Index(Sheets("Future_220_140_MON").Range("B20:AK24"), _
Application.Match(Range("T2").Value, Sheets("Future_220_140_MON").Range("A20:A24"),0), _
Application.Match("*" & Range("C2").Value & "*", Sheets("Future_220_140_MON").Range("B1:AK1"),0))

根据说明,代码需要如下所示:

    Range("D2").Value = Application.Index(Sheets("Future_220_140_MON").Range("B20:AK24"), _
Application.Match(Range("T2").Value, Sheets("Future_220_140_MON").Range("A20:A24"),0), _
Application.Match(Mid$(Range("C2").Value, Instr(Range("C2").Value, "_") + 1), Sheets("Future_220_140_MON").Range("B1:AK1"),0))

进一步编辑:如果您想实际放置一个公式:

Range("D2").Formula = "=Index('Future_220_140_MON'!$B:$AK,Match(T2,'Future_220_140_MON'!$A:$A,0),Match(MID(C2,FIND(""_"",C2)+1,LEN(C2)),'Future_220_140_MON'!$B:$AK,0))