(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
然后你可以像内置函数一样使用你的函数
我有一个适用于单元格的公式,但它是一个非常长的嵌套 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
然后你可以像内置函数一样使用你的函数