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

(Excel VBA Formulas) Nested IF Highlighted Red

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

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

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

(我一直在一行上做两个嵌套的 if,并使用“&_”分隔下一行。)

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 具体解决方案可以在下面找到。

如果你想使用 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
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

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