(Excel VBA公式)如果高亮显示为红色,则嵌套

(Excel VBA公式)如果高亮显示为红色,则嵌套,excel,vba,formula,nested-if,Excel,Vba,Formula,Nested If,我有一个在单元格中工作的公式,但它是一个很长的嵌套if。它本质上是试图检查一个单元格中的多个不同值 A2=这是我的描述。 B2包含嵌套的if,它在A2描述中搜索多个单词。当它遍历每个if语句时,它将打印找到的单词 我需要使用VBA将此公式设置为多个单元格,但我不确定该公式为何错误。(Excel将其高亮显示为红色。)有更好的方法来写这个吗 (我已经在一行上做了两个嵌套的if,并使用“&_”分隔到下一行。) 。。。有48个关键字,将来可能需要添加更多 IF(ISNUMBER(SEARCH(""Key

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

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

我需要使用VBA将此公式设置为多个单元格,但我不确定该公式为何错误。(Excel将其高亮显示为红色。)有更好的方法来写这个吗

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

。。。有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

如果你想使用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
然后您可以像使用内置函数一样使用您的函数



然后您可以使用内置函数之类的函数

请将其设为a(可能使用较少的关键字)。事实上,您只给出了语句的一个片段,这使得调试变得很困难。您确定在新行中的
\uu
后面使用了双引号吗?我想是的。。。让我在上面发布一些其他东西,如果我们能找到一种方法来调整它,那可能会更容易。如果你能使用VBA,为什么不编写一个更可读的
Select Case
station?Hi TSion.D.P.-我写了一些,但我想说我还是初学者。你会有一些关于选择案例的链接或更多信息吗?我一定会试试看!请将此设置为a(可能使用较少的关键字)。事实上,您只给出了语句的一个片段,这使得调试变得很困难。您确定在新行中的
\uu
后面使用了双引号吗?我想是的。。。让我在上面发布一些其他东西,如果我们能找到一种方法来调整它,那可能会更容易。如果你能使用VBA,为什么不编写一个更可读的
Select Case
station?Hi TSion.D.P.-我写了一些,但我想说我还是初学者。你会有一些关于选择案例的链接或更多信息吗?我一定会试试看!嗨,劳纳克·托马斯!这可能真的很完美-我唯一的问题是,它正在搜索的范围是否可以设置为activecell?我试着让它成为Activecell.Find(arr(I),LookIn:=xlValues),但是这不起作用。(我问这个问题是因为我需要检查很多单元格,我打算用do循环和Activecell.offset来实现这一点。)active确实起作用,我只是尝试了一下。将工作表(1)范围(“b2”)更改为工作表(“您的工作表名称”)。范围(“b2”)并尝试。劳纳克·托马斯,非常感谢!经过一些调整,我让它完全按照我想要的方式工作(我用我的特定解决方案代码更新了你的评论,但在它出现之前必须经过同行审查。我将把它标记为答案。)你建议的编辑将导致无限循环,你必须保留一些循环结束的条件。我在下面填了一些单元格(与工作表的其他部分相关),这些单元格将在activecell“”上停止它。谢谢你的关注。最后一个问题-假设我正在搜索“Hello”,但有时手机会显示“Hello”-有没有办法为“Hello”手机输出一个别名“Hello”?嗨,Raunak Thomas!这可能真的很完美-我唯一的问题是,它正在搜索的范围是否可以设置为activecell?我试着让它成为Activecell.Find(arr(I),LookIn:=xlValues),但是这不起作用。(我问这个问题是因为我需要检查很多单元格,我打算用do循环和Activecell.offset来实现这一点。)active确实起作用,我只是尝试了一下。将工作表(1)范围(“b2”)更改为工作表(“您的工作表名称”)。范围(“b2”)并尝试。劳纳克·托马斯,非常感谢!经过一些调整,我让它完全按照我想要的方式工作(我用我的特定解决方案代码更新了你的评论,但在它出现之前必须经过同行审查。我将把它标记为答案。)你建议的编辑将导致无限循环,你必须保留一些循环结束的条件。我在下面填了一些单元格(与工作表的其他部分相关),这些单元格将在activecell“”上停止它。谢谢你的关注。最后一个问题-假设我正在搜索“Hello”,但有时手机会显示“Hello”-有没有办法为“Hello”手机输出一个别名“Hello”?Hi TSion.D.P。谢谢你发布这个。我将对选择的案例进行更多的阅读,并使用您的代码。我认为这也是一个很好的解决方案!谢谢你的帮助:)你好。谢谢你发布这个。我将对选择的案例进行更多的阅读,并使用您的代码。我认为这也是一个很好的解决方案!我感谢你的帮助:)