2011-03-22 78 views
3

我有一列中包含一些字符串說明。如果單元格包含一個或多個關鍵字,請更改其他單元格的值

例如:

 
Bob davids 
mowing the lawn 
tipping cows

此外,我將有一個不同的表或列關鍵字 例如工作關鍵字列表1的列表:

 
davids 
work

播放關鍵字列表:

 
mowing 
cows

因此,當主列填充這些文本字符串時,我希望他們自動檢查每個關鍵字列表以查看這些字是否存在,以及何時找到匹配項,將列表中的標題(工作/播放)在它旁邊的單元格中。

我知道這是可能的VBA,甚至可以在「飛」功能SelectionChange功能。但是,這可以做到沒有VBA,如條件格式?

+0

字符串中的可能字數有限制嗎?拆分它們並搜索很容易。但是,如果數量很多,則必須編寫一個很長的公式來分隔每個字。 – paulmorriss 2011-03-22 16:56:59

+0

嗯它不同,但會說最大是8 – NickG 2011-03-22 17:54:58

+0

但是對於這種情況,讓我們假設2 – NickG 2011-03-22 17:57:09

回答

9

只需要使用公式就可以很容易地做到這一點,只要您不太在意可能不恰當地查找單詞的部分內容。雖然忽略了一秒鐘的警告。首先,這裏是一個公式,會告訴你,如果有若干字符串是在源字符串中隨處可見:

=OR(NOT(ISERROR(FIND(<array of strings to look for>,<string to look in>)))) 

這需要輸入數組公式爲它工作。您可以通過使用Ctrl-Shift-Enter輸入來完成此操作。要了解它是如何工作的,考慮什麼樣的Excel做在評價一個真實的例子:

=OR(NOT(ISERROR(FIND({"a","b","c"},"q b q")))) 

「查找」內找到另一個字符串中的位置。當用數組調用第一個參數時,它將返回一個位置數組(或者如果未找到搜索字符串,則爲#VALUE!)。您可以通過輸入公式,然後使用F9鍵上表達追查其中的評價:

=OR(NOT(ISERROR({#VALUE!,3,#VALUE!}))) 
=OR(NOT({TRUE,FALSE,TRUE})) 
=OR({FALSE,TRUE,FALSE}) 
=TRUE 

所以,你的例子,說你有你的字符串,你想搜索在$ B $ 6:$ B $ 8您的工作字符串爲$ D $ 2:$ D $ 3,而您的玩字符串爲$ E $ 2:$ E $ 3。你可以把公式

=OR(NOT(ISERROR(FIND(D$2:D$3,$B6)))) 

在小區D6,其輸入爲數組公式,然後通過一系列D6拖動它:E8找到該字符串B的工作,或者他們遊戲的話。然後,您可以使用這些結果來推動進一步的公式或條件格式。

然而,正如上面提到的,你會注意到,被搜索的字符串中的任意子將得到發現,所以

=OR(NOT(ISERROR(FIND({"a","b","c"},"bad")))) 

將評估爲TRUE。 (如果你的有趣列表中包含「id」,「davids」中的「id」將匹配)。

與Excel常見的情況一樣,如果你正在使用有限的數據集進行某些操作,可能不關心這一點。但是它可以打敗使用這種公式的嘗試,作爲一個普通「應用程序」的一部分,這個應用程序的用戶不知道花哨的陣列技巧,或者確切知道'FIND'是什麼。 (你可以通過在搜索詞後面加一個空格來解決這個問題,但是如果你把它交給其他人的話,那就更加神祕了。)對於快速而髒的掃描來說,沒關係。

+0

謝謝,這似乎很多玩耍。 – NickG 2011-03-25 21:38:07

+0

由於某種原因,ISERROR(FIND({「a」,「b」,「c」,「bad」))'對我來說只評估標量值,這似乎是基於查找操作的第一個結果(即'find(「a」,「bad」)')。有任何想法嗎? – Grzenio 2015-01-15 14:26:07

+0

@Grzenio,你是否將它作爲一個數組公式來輸入,並進入一個有足夠空間顯示所有三個元素的範圍? – jtolle 2015-01-15 15:38:40

1

我已經放在一起的另一種做法爲少數。正如所暗示的那樣,這很快就會變得麻煩。

輸入以下到列A: 1:馬牛豬雞 2:狗貓鳥 3:魚貓 4:馬貓鼠標 5:猿人類海豚 6:狗貓花栗鼠

在單元格B1輸入以下(和複製到B2:B6):

=if(sum(iserror(find("cat",A1)),iserror(find("dog",A1)),iserror(find("fish",A1)),iserror(find("bird",A1)))<4,"House pet","") 

B1B5結果應在B2而結果顯示爲空白, B3,B4B5應該讀「House寵物」。

小心如果關鍵字列表變得太大。我也成功地使用了這個短列表(正如問題中所暗示的那樣),但是如果時間太長,您就沒有足夠的空間鍵入所有可能性 - 更不用說公式中的風險錯誤了。

我無法讓我的數組正常工作 - 感謝上面的帖子,我現在就去嘗試一下我的長列表。

ps。不記得我的OR ISERROR陣列正在做什麼,但是您提供的這個陣列對於我的80個關鍵字清單非常有用。謝謝!