我下载了一个项目帐单报告,其中A列的名字和B列的费用代码。一个单元格中有多个费用代码,这些费用代码确定它是可计费的还是不可计费的,或者输入了错误的费用代码。
我在使用以下索引匹配公式时遇到困难。有没有一种方法可以从多个值之间用逗号分隔的单元格中查找值?
=INDEX(H2:H4,MATCH(H2,B2:B4,0))
Excel结算示例:
在看到工作表布局后更新答案……也许是这样(已纠正匹配错误)...
Option Explicit
Public Function LookupCode(ChargeCode As Range,vChargeCodes As Range) As Boolean
Dim vRow As Long
Dim vLookupCode As String
LookupCode = False
vRow = 2
Do While LookupCode = False And ActiveSheet.Cells(vRow,9) <> ""
If ActiveSheet.Cells(vRow,9) = ChargeCode Then
If IsInArray(ActiveSheet.Cells(vRow,8),Split(vChargeCodes,",")) Then
LookupCode = True
Exit Do
End If
End If
vRow = vRow + 1
Loop
End Function
' variation of IsInArray from https://stackoverflow.com/questions/38267950/check-if-a-value-is-in-an-array-or-not-with-excel-vba
Function IsInArray(stringToBeFound As String,arr As Variant) As Boolean
Dim vIndex As Long
For vIndex = LBound(arr) To UBound(arr)
If Trim(arr(vIndex)) = Trim(stringToBeFound) Then
IsInArray = True
Exit Function
End If
Next
IsInArray = False
End Function
然后在工作表中...
,如果您的代码列表始终采用相同的格式,即代码的前4个字符,然后是逗号和空格,然后是下一个代码,则可以使用“ if”和“ mid”语句来获取每个代码
=VLOOKUP(MID(B2,1,4),$H$2:$I$4,2,FALSE) & IF(LEN(B2)>5," & VLOOKUP(MID(B2,7,FALSE),"")
对不起,我倾向于使用vlookup而不是索引和匹配。该公式将适用于两个代码,请根据需要重复该代码的第二部分。
祝你好运!