2017-10-18 338 views
0

我有在細胞工作的公式,但它是一個很長的嵌套如果。它本質上是試圖檢查一個單元格是否有多個不同的值。(Excel的公式VBA)嵌套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 

UPDATE:

另一種解決方案(解決方法嗎?)是使用

=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

請將此設爲[mcve](也許關鍵字較少)。事實上,你只是給出你的陳述的一個片段,很難調試。 –

+0

您確定您在新行的'_'後面使用雙引號嗎? –

+0

我這麼認爲......讓我發佈上面的其他內容,如果我們能找到一種方法來調整它,那可能會更容易。 – mitchmitch24

回答

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 

但是,如果被發現,將打印只有最後一個多個單詞(U可以修改代碼如果你需要的話)。當然,因爲這不是一個計算,你將需要在各個單元格的值發生改變時,運行代碼

具體解決方案:

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 
+0

嗨Raunak托馬斯!這實際上可能是完美的 - 我唯一的問題是,它正在搜索的範圍是否可以設置爲activecell?我試圖使它Activecell.Find(ARR(I),看着:= xlValues),但是沒有工作(我問,因爲我需要檢查很多細胞的,我打算用do循環與和Activecell。抵消了。) – mitchmitch24

+0

積極做的工作,我只是試了一下。將表單(1).range(「b2」)更改爲表單(「your_sheet_name」)。range(「b2」)並嘗試。 –

+0

Raunak Thomas,非常感謝你!經過一些調整,我得到它的工作正是我想要的! :)(我用我的特定解決方案代碼更新了您的評論,但在它出現之前必須先進行同行評議,我會將其標記爲答案。) – mitchmitch24

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 

然後你可以使用你的功能如內置函數

+1

嗨TSion.DP感謝您發佈此信息。我會在Select Case上做更多的閱讀,並隨身攜帶你的代碼。我認爲這也可能是一個很好的解決方案!我感謝您的幫助 :) – mitchmitch24