字體:小 中 大 | |
|
|
2009/04/02 12:01:20瀏覽39220|回應2|推薦1 | |
(本篇圖文及程式於2022年2月更新) 記得那位朋友說,需要把一些 Word 文件檔裡面的 "第一章" 全部改成 "第1章"、 "第一款" 全部改成 "第1款"、......諸如此類,字串非常多,最多會到第一百多章、第一百多款 (可能是討論法規) 。使用 Excel 實務會遇到的情況,例如:為了資料一致性,需要把地址資料裡的 "1段"、"2段" ...... 改成 "一段"、"二段" ... ...。 我們可以使用 Windows 的 " 記事本"(有 64KB 的限制) 或 "Wordpad",建立一個取代字串的對照文字檔,另存新檔,編碼選擇 ANSI (副檔名 txt ),像這樣: 再按一次 Alt+F11 回到 Excel 工作表畫面,按 Alt+F8,選擇 MassReplace 巨集,"執行" 它: 這個巨集程式首先會顯示對話視窗,讓我們選擇取代字串的對照文字檔,此時就要選擇剛 才建立的文字檔: 按下 "開啟",片刻後,就可以看到檔案裡面字串取代的結果。 底下是把股號改成股名的例子: [程式碼(文字)] Option Base 0
Option Explicit
Sub MassReplace()
Dim arrStr() As String, InputStr As String
Dim sFilePath As Variant
Dim Fn As Integer
Fn = FreeFile() 取得一個可使用的檔案代號 (File Handle Number)
顯示Windows的選擇檔案的對話窗
sFilePath = Application.GetOpenFilename("Text Files (*.txt), *.txt", 1, "選擇文字檔案", "開啟", False)
On Error Resume Next
If sFilePath Then 若文字檔選擇成功
Open sFilePath For Input As #Fn 開啟 Replace.txt 檔
Application.ScreenUpdating = False 畫面暫停更新
While Not EOF(Fn)
Line Input #Fn, InputStr 從檔案讀出一列,
If Len(InputStr) > 0 Then 略過無字串的空行
arrStr = Split(InputStr, ",") 把讀入的文字列依逗號分成兩個字串, 置於 arrStr 陣列裡
Call ReplaceText(arrStr(0), arrStr(1)) 叫用 ReplaceText函式, 把兩個字串傳給它執行取代
End If
Wend
Application.ScreenUpdating = True 畫面恢復更新
Close #Fn 關閉文字檔
Else
MsgBox ("檔案選擇取消或失敗,將不執行文字取代。")
End If
End Sub
Function ReplaceText(Src As String, Rpl As String)
這個函式會在整個工作表裡搜尋 Src 字串, 將它取代為 Rpl 字串
Cells.Replace What:=Src, Replacement:=Rpl, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
底下是 Replace 的參數說明: What 必選的參數。要尋找的字串。
Replacement 必選的參數。要置換的字串。
LookAt 選擇性的參數。是否需全字相同。可為下列 XlLookAt 常數之一:xlWhole 或 xlPart。
SearchOrder 選擇性的參數。搜尋的順序。可為下列 XlSearchOrder 常數之一:xlByRows 或 xlByColumns。
MatchCase 選擇性的參數。若指定為 True,則搜尋時大小寫視為相異。
SearchFormat 選擇性的參數。是否依據 "格式" 搜尋。True/False布林值。(Mac版無此參數)
ReplaceFormat 選擇性的參數。是否取代格式。True/False布林值。(Mac版無此參數)
End Function
[程式碼(截圖)] *若要索取本文的 VBA 程式碼,來信主旨請寫:「Excel 大量字串取代 VBA」 |
|
( 興趣嗜好|電腦3C ) |