Re: [算表] VBA 查儲存格內容是否包含某數,執行..
這題因為原作後來才補充的比較完整,
導致一開始的解答方向可能有些不對,
這裡也提供一個解法
此問題是要查找多個可能的關鍵字 在更長的文句中出現的位置
比如關鍵字key1
出現在更長的文句contextKey1context中的位置
如果問題被拆解成這樣,大家會知道是用SEARCH(不分大小寫)
這裡重述一下原問題的簡化版(單一關鍵字)
輸入長句contextKey1context
找出關鍵字key1出現在長句的位置(不分大小寫)
而原版本是多關鍵字(→SEARCH陣列)
給定key1對應的結果result1
給定key2對應的結果result2
輸入長句contextKey1context
找出關鍵字key1出現在長句的位置
找出關鍵字key2出現在長句的位置
判斷出位置最前(位置最小值MIN)的關鍵字keyV
給出keyV對應的結果resultV
繞口令繞完了
所以結論就是MIN(SEARCH)的陣列公式
=IFERROR(INDEX($I$1:$I$7,MIN(IFERROR(IF(SEARCH($H$1:$H$7,A1)=
MIN(IFERROR(SEARCH($H$1:$H$7,A1),9^9)),ROW($H$1:$H$7)),9^9))),"沒找到")
這個式子和先前的解答會有什麼不同呢?
Test 1
kettle 樂 快 樂 a 新
water 新 新 新 b 年
zip 沒找到 沒找到 沒找到 c 年
table 新 新 新 et 快
eagle 樂 樂 樂 e 樂
flag 樂 樂 樂 f 樂
kite 樂 樂 樂 g 樂
et在原式不是答案,所以只會找到"樂"
本式中如有兩個符合,會給第一個keyword,所以是"快"
Test 2
kettle 沒找到 快 沒找到 a 新
water 新 新 新 b 年
zip 沒找到 沒找到 沒找到 c 年
table 新 新 新 et 快
eagle 新 新 新 ef 樂
flag 樂 樂 樂 f 樂
kite 沒找到 沒找到 沒找到 g 樂
Test 2 更明顯,原式輸入kettle找不到任何答案
儘管key4是"et"
附檔:
https://tinyurl.com/goo2yu/MultiSearch.xlsx
※ 引述《windknife18 (windknife18)》之銘言:
: 標題: Re: [算表] VBA 查儲存格內容是否包含某數,執行..
: 時間: Tue Feb 2 11:19:27 2016
:
: 很就沒有玩陣列公式了, 感覺你的問題蠻好玩的, 試了一下感覺應該對,
: 請看看是不是符合你的需求囉,檔案位置
: http://file.wikidot.com/local--files/f/20160202.xlsx
:
: 以A1擺放英文字, B1來表示公式, 主要想法:
: 1. H:J 欄擺放對照表
: 2. 用mid將A1的英文字切割成一個一個的字元
: 3. 和H欄的英文字母比對看是否有一樣的
: 4. 找出最先出現的位置
: 5. 找出最先出現的位置的英文字母
: 6. 用index找出相對英文字母的中文字
:
: B1=IF(A1="","",IF(MIN(IF((MID(A1,ROW($1:$100),1)=TRANSPOSE($H$1:$H$7)),
: (ROW($1:$100))))=0,"沒有找到",INDEX(I:I,MAX(IFERROR(TRANSPOSE(ROW($1:$100))
: *((MID(A1,ROW($1:$100),1)=TRANSPOSE($H$1:$H$7))*(ROW($1:$100))=MIN(
: IF((MID(A1,ROW($1:$100),1)=TRANSPOSE($H$1:$H$7)),(ROW($1:$100))))),0)),1)))
:
: PS. 記得輸入玩,按Ctrl+Shift+Enter結束, 沒時間優化囉 ^_^
:
:
:
: ※ 引述《rd2l4 (唉呦就是那個啊~~)》之銘言:
: : 軟體: EXCEL
: : 版本: 2010
: : A B
: : 1 [輸入] [查找結果]
: : 2
: : 3
: : 目標是希望輸入(A1)之後可以出現(B1)不同結果(有不論大小寫的中英組合)
: : 舉例來說,這是目標表:
: : ┌────┬────┐
: : │ 查找 │ 結果 │
: : ├────┼────┤
: : │ a │ 新 │
: : ├────┼────┤
: : │ b OR c │ 年 │
: : ├────┼────┤
: : │ d │ 快 │
: : ├────┼────┤
: : │ e-g │ 樂 │
: : └────┴────┘
: : 實際輸入可能是:apple,結果B1是出現"新"(a先出現)
: : 若是:banana,B1就是"年" (b先出現)
: : 目前規劃是Worksheet_Change + application.vlookup?search?find?還是IF?
: : 可能是我找錯方向了,google都找不到類似的東西...
: : 感覺又很簡單可是卻卡住了QQ
: : 在一般搜尋中只要加個*明明就可以的VBA卻不行Orz
: : 求救 T_T 謝謝
原作補充:
不好意思如果還是有問題T_T
1. 因為輸入的內容不一定在第一個,他可能是watermelon,判定成新
(a先出現了,但在第二個)
2. 因為判定的內容並不單純是單個字母,可能是xxx
舉例來說:Tim 或 Tom 是否可以把他判定成不同物件?
按照目前的狀況繼續寫T會判定成同一個...
謝謝!
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.131.84.79
: ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1454383170.A.211.html
: → soyoso: 想到的是=IFERROR(VLOOKUP(MID(A1,MIN(IF(MID(A1,ROW($1:$ 02/02 12:23
: → soyoso: 100),1)=TRANSPOSE($H$1:$H$7),ROW($1:$7))),1),H:I,2,0), 02/02 12:24
: → soyoso: 0),"沒有找到") 02/02 12:24
: → soyoso: https://goo.gl/Nyh9pm 02/02 12:26
: → windknife18: S大實在太厲害,這樣簡單多了 ^_^ 02/02 12:46
: 推 rd2l4: 謝謝兩位大大!! 02/02 14:09
--
如連結失效,請試q我名片,目前版本:
Excel 附檔 https://sites.google.com/a/2yu.co.cc/www/ (含連結失效檔案)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.152.24
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1520615301.A.343.html
→
03/10 13:19,
6年前
, 1F
03/10 13:19, 1F
→
03/10 13:19,
6年前
, 2F
03/10 13:19, 2F
→
03/10 13:21,
6年前
, 3F
03/10 13:21, 3F
→
03/11 21:07,
6年前
, 4F
03/11 21:07, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):