在索引(匹配)function中使用通配符

我在我的vba代码中使用Index(Match())函数,似乎遇到了一些问题。 由于一些search的标准是不完全相似的,我试图在单元格C2周围使用"*"通配符search类似的项目。 此外,我不想简单地将我正在使用的公式放置到带有Range("D2").Formula单元格中Range("D2").Formula代码将导致自动更新,因此我也遇到了这个问题。

这是我的代码。

Range("D2") = Index('Future_220_140_MON'!$B$20:$AK$24, Match(" * "&C2&" * "&T2, 'Future_220_140_MON'!$B$1:$AK$1&'Future_220_140_MON'!$A$20:$A$24, 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("*" & 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$20:$AK$24,Match(T2,'Future_220_140_MON'!$A$20:$A$24,0),Match(MID(C2,FIND(""_"",C2)+1,LEN(C2)),'Future_220_140_MON'!$B$1:$AK$1,0)) 

首先,你应该总是定义你想要存储的结果。 默认情况下,只要写入Range("D2")将使用单元格的.Value属性,但最好写入Range("D2").Value 。 另外你的两个函数实际上是Application.WorksheetFunction 。 试试这个代码:

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

WorksheetFunction.Index方法MSDN

WorksheetFunction.Match方法MSDN