在 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.WorksheetFunction
s。试试这个代码:
Dim MatchResult As Double
MatchResult = Application.WorksheetFunction.Match(Conditions)
Range("D2").Value = Application.WorksheetFunction.Index(Conditions, MatchResult)
试试这个:
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))
我在 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.WorksheetFunction
s。试试这个代码:
Dim MatchResult As Double
MatchResult = Application.WorksheetFunction.Match(Conditions)
Range("D2").Value = Application.WorksheetFunction.Index(Conditions, MatchResult)
试试这个:
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))