(Excel VBA公式)嵌套IF突出显示红色

时间:2017-10-18 12:44:38

标签: excel vba formula nested-if

我有一个在单元格中工作的公式,但它是一个非常长的嵌套if。它本质上是试图检查一个单元格的多个不同值。

A2 =这是我的描述。 B2包含嵌套的if,它在A2描述中搜索多个单词。当它遍历每个if语句时,它将打印找到的单词。

我需要使用VBA将此公式设置为多个单元格,但我不确定为什么公式错误。 (Excel突出显示为红色。)有没有更好的方法来写这个?

(我已经在线上进行了两次嵌套,并使用“& _”分隔下一行。)

Sub Search_For_Keywords()
Do Until ActiveCell.Value = ""

    Range(B2).Activate
    With ActiveCell
    .Formula = "=IF(ISNUMBER(SEARCH(""Keyword1 "",A2,1)),""1"",IF(ISNUMBER(SEARCH(""Keyword2 "",A2,1)),""2"", & _

...有48个关键字,将来可能需要添加更多...

IF(ISNUMBER(SEARCH(""Keyword_n"",A2,1)),""n"",""No Keywords Found"")))))))))))))))))))))))))))))))))))))))))))))))"

    End With
Loop
End Sub

更新:

另一种解决方案(解决方法?)正在使用

=IFERROR(INDEX(E2:E6,MATCH(D2:D6,A2:A6,0)),"Not Found")

=INDEX (column to return a value from, MATCH (lookup value/column, column to lookup against, 0))

所以对我来说,我有D2:D6包含要搜索的关键字,E2:E6包含每个关键字的别名,然后A2:A6保存了我想要尝试的实际描述,看看关键字是否在。

此代码现在足够短,可以放入VBA,唯一的缺点是你必须拥有包含这些信息的列。

再次感谢所有帮助。其他更多VBA特定解决方案可以在下面找到。

2 个答案:

答案 0 :(得分:2)

如果你想使用VBA,你可以使用这个简单的代码,假设你只想要找到单词

arr = Array("keyword1", "keyword2", "keyword3") 'List of keywords to look for
For i = 0 To 2
    Set c = Sheets(1).Range("a2").Find(arr(i), LookIn:=xlValues)
    If Not c Is Nothing Then Sheets(1).Range("b2").Value = arr(i)  'Setting the value if the keyword is found
Next i

但是如果找到多个单词,它将只打印最后一个单词(如果需要,你可以修改代码)。当然,因为这不是计算,所以每次单元格值更改时都需要运行代码

具体解决方案:

Sub Find_Keywords()

Keywords = Array("Awesome", "hey", "world") 'List of keywords to look for

Range("A2").Activate

    Do Until ActiveCell = Range("a14")

        For i = 0 To 2
            Set C = ActiveCell.Find(Keywords(i), LookIn:=xlValues)
            If Not C Is Nothing Then ActiveCell.Offset(0, 1).Value = Keywords(i) 'Setting the value if the keyword is found
        Next i

    ActiveCell.Offset(1, 0).Activate

    Loop

End Sub

答案 1 :(得分:1)

Function SearchMyKeywords(rng As Range)
   Select Case rng
       Case _1st_keyword
            SearchMyKeywords = Whatever_You_Like
       Case _2nd_keyword
            SearchMyKeywords = Whatever_You_Like2
       ...
       Case Else ' For all the rest  
            SearchMyKeywords = Whatever_suitable_here
   End Select

然后你可以使用像内置函数

这样的函数