VBA代码将单元格值更改为“搜索”功能。

时间:2019-07-18 13:20:31

标签: excel vba

我希望更改单元格范围(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

2 个答案:

答案 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