Re: [算表] VBA 查儲存格內容是否包含某數,執行..

看板Office作者 (David)時間6年前 (2018/03/10 01:08), 編輯推噓0(004)
留言4則, 2人參與, 6年前最新討論串3/3 (看更多)
這題因為原作後來才補充的比較完整, 導致一開始的解答方向可能有些不對, 這裡也提供一個解法 此問題是要查找多個可能的關鍵字 在更長的文句中出現的位置 比如關鍵字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
想到是=IFERROR(INDEX(I:I,RIGHT(MIN(IFERROR(SEARCH(H$1:
03/10 13:19, 1F

03/10 13:19, 6年前 , 2F
H$7,A6)*10^9+ROW($1:$7),99^9)),9)),"沒找到")
03/10 13:19, 2F

03/10 13:21, 6年前 , 3F

03/11 21:07, 6年前 , 4F
推推~! ^^
03/11 21:07, 4F
文章代碼(AID): #1Qeh-5D3 (Office)
討論串 (同標題文章)
文章代碼(AID): #1Qeh-5D3 (Office)