我有一个在单元格中工作的公式,但它是一个非常长的嵌套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特定解决方案可以在下面找到。
答案 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
然后你可以使用像内置函数
这样的函数