我希望更改单元格范围(D列)的值,以使其旁边的单元格(C列)具有某些字符串的搜索功能。我当前的代码似乎不起作用,因为仅当D列中的单元格等于确切的字符串而不是仅包含它时,它才起作用。
我要用代码编写的原始公式:
=IF(ISNUMBER(SEARCH("1150",$C11)), "Dozer", IF(ISNUMBER(SEARCH("1650",$C11)),"Dozer", IF(ISNUMBER(SEARCH("2050",$C11)), "Dozer", IF(ISNUMBER(SEARCH("850",$C11)), "Dozer", IF(ISNUMBER(SEARCH("750",$C11)), "Dozer", IF(ISNUMBER(SEARCH("650",$C11)), "Dozer"))))))
我当前的代码:
Function CalcValue(pVal As String) As Long
If InStr(pVal, "2050") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "1650") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "1150") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "850") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "750") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "650") <> 0 Then
CalcValue = "Dozer"
Else
CalcValue = "TLB"
End If
End Function
答案 0 :(得分:1)
如果您想继续使用本机Excel公式而不是引入VBA,则此公式是原始文档的精简版本,并且更易于更新:
=IF(SUMPRODUCT(--ISNUMBER(FIND({650,750,850,1150,1650,2050},$C11)))>0,"Dozer","TLB")
如果必须是VBA,则可以实现循环,而不必手动写出每种可能性:
Public Function CalcValue(ByVal arg_sText As String) As String
Dim aSearchValues() As Variant
aSearchValues = Array(650, 750, 850, 1150, 1650, 2050)
Dim vSearchVal As Variant
For Each vSearchVal In aSearchValues
If InStr(1, arg_sText, vSearchVal, vbBinaryCompare) > 0 Then
CalcValue = "Dozer"
Exit Function
End If
Next vSearchVal
CalcValue = "TLB"
End Function
答案 1 :(得分:0)
借助@BigBen修复代码
Public Function CalcValue(pVal As String) As String
If InStr(pVal, "2050") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "1650") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "1150") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "850") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "750") <> 0 Then
CalcValue = "Dozer"
ElseIf InStr(pVal, "650") <> 0 Then
CalcValue = "Dozer"
Else
CalcValue = "TLB"
End If
End Function