我在我的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))
我只是错误地格式化代码,或者在匹配多个条件时是否有特定的方法来调用通配符。
答案 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)