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

时间:2015-01-20 15:06:38

标签: excel vba excel-vba excel-formula wildcard

我在我的vba代码中使用Index(Match())函数,似乎遇到了一些问题。由于某些搜索条件并非完全相同,因此我尝试在单元格"*"周围使用C2通配符运算符来搜索相似的项目。此外,我不想简单地将我使用的公式放入具有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))

我只是错误地格式化代码,或者在匹配多个条件时是否有特定的方法来调用通配符。

2 个答案:

答案 0 :(得分:2)

试试这个:

    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))

答案 1 :(得分:1)

首先,您应该始终定义要将结果存储为的内容。默认情况下,只需编写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 Method MSDN

WorksheetFunction.Match Method MSDN