close
標題:

請問Excel VBA 關於字串的處理

aa.jpg

 

此文章來自奇摩知識+如有不便請留言告知

發問:

如檔案所示 http://stweb.cgu.edu.tw/~m9440406/test02.xls 想要把活頁"通訊錄" 加上註記 如果活頁"門號註記"中有題到的數字 出現在電話中的在 就在通訊錄的備註中 加以記錄 如活頁"通訊錄2" 所示 可以辦到嗎? 謝謝 因為資料有上萬筆 不太可能手動而沒有出錯 謝謝 更新: 門號註記的三碼 出現在電話的前中後段 都ok 會有很多相同的 沒錯 ^^ 更新 2: to 准提部林 ( 專家 1 級 ) 請您 用成回答 我將選您正解 另外請問 For Each xR In [通訊錄2!B2].Resize(y) If xR = "" Then GoTo 101 For Each mR In [門號註記!A2].Resize(x) If mR <> "" Then If InStr(xR, mR) > 0 Then xR(1, 2) = mR: Exit For End If Next 101: Next 更新 3: 當中 xR Resize(y) Resize(x) mR 是什麼意思? 如果 我資料有10000筆 GoTo 101 要改成 10001嗎? 謝謝 更新 4: to 准提部林 ( 專家 1 級 ) ok 大致上了解了 速度上如您所說 三個程式真的有差別 不過又遇到一個問題 因為門號註記 如果變多 一個門號可能會符合 兩個以上的註記 可以依照註記表的順序 依序增加到備註一到十嗎?(最多到十個備註) 如檔所示 stweb.cgu.edu.tw/~m9440406/20120920a03(重整通訊錄)v2.xls 謝謝 另外准提部林大大原本的單一備註 如果門號符合多個註記 應該是會覆蓋掉吧?

最佳解答:

〔門號註記〕只有3碼,如何判別是屬於誰的? 若是手機的〔前3碼〕,應有很多相同? 2012-09-20 18:05:03 補充: <範例檔>: http://www.funp.net/81971 2個VBA,處理上萬筆資料,哪個較快請實測! 2012-09-21 13:01:52 補充: <範例檔>: http://www.funp.net/894500 1.建立測試資料〔通訊錄〕10,000筆.〔門號註記〕1,000筆。 2.上個範例的VBA(1),速度太慢,放棄。 3.本範例的VBA(1).VBA(2) 速度差不多,VBA(3)則快一倍以上。 請再測看看! 2012-09-21 13:10:58 補充: y = [通訊錄!A65536].End(xlUp).Row - 1 >〔y〕為通訊錄的〔資料筆數〕,亦即〔列數〕 [通訊錄2!B2].Resize(y) >通訊錄B2至資料尾列的範圍,例:B2:B10001 For Each xR In [通訊錄2!B2].Resize(y) >〔xR〕是〔自訂變數〕,類型為〔Range〕, 在〔迴圈〕中,逐一代表〔B2:B10001〕中的每一個儲存格。 2012-09-21 13:15:14 補充: If xR = "" Then GoTo 101 >〔101〕是〔標記〕,當某條件成立時, 可指定程式直接跳至這行執行,略過中間的程式, 〔101〕可自行設定,〔999〕或〔NEXT_CELL〕都可以。 如果 我資料有10000筆,GoTo 101 要改成 10001嗎? >如上所述,與資料無關,純是〔標記〕用 mR 與 xR 同樣是〔自訂變數〕。 〔變數〕的應用,則須自行去了解,買書或看說明檔都可! 2012-09-21 17:48:22 補充: EXCEL VBA.比對〔部份字串〕是否〔包含於〕某一長字串之中 <.准提部林.> --------------------------------- ■範例資料: 比對字串 處理結果(符合者加入備註)門號註記 姓名手機備註977 A00001337257503337659 A00002684071069337 A000036074449779775515 A000042515515225515776 A00005237938815 A00006659593712659 A00007278063234 A00008776024419776 ■程式碼:利用〔取代〕法置換 Sub 重整通訊錄3() Dim xAddress$, x&, y&, ClmnC As Range [通訊錄2!A2:C65536].Clear x = [門號註記!A65536].End(xlUp).Row - 1 y = [通訊錄!A65536].End(xlUp).Row - 1 If x = 0 Or y = 0 Then Exit Sub [通訊錄!A2:B2].Resize(y).Copy [通訊錄2!A2] Set ClmnC = [通訊錄2!C2].Resize(y) With ClmnC .Formula = "=""#""&B2&""#""" .Value = .Value End With Application.ScreenUpdating = False For Each xR In [門號註記!A2].Resize(x) If xR <> "" Then ClmnC.Replace "#*" & xR & "*#", xR, Lookat:=xlWhole End If Next ClmnC.Replace "#*#", "", Lookat:=xlWhole End Sub ■說明: 範例檔中共有3種程式碼,上方僅列出第3種,其餘請參考下載檔。 --------------------------------- <範例檔>: http://www.funp.net/894500 --------------------------------- 2012-09-22 15:52:31 補充: <範例檔>增加為10個註記欄: http://www.funp.net/59540 2012-09-22 15:55:33 補充: <範例檔>: http://www.funp.net/59540 增加為10個註記欄,只能使用Find及陣列,速度就先看註記多不多, 若有新增需求,建議另題發問!

其他解答:20C18AF99341980A
arrow
arrow

    njtnvdt 發表在 痞客邦 留言(0) 人氣()