標題:
[發問]
求一次修正姓名輸入模式的公式
[打印本頁]
作者:
hkyan
時間:
2018-9-5 16:03
標題:
求一次修正姓名輸入模式的公式
本帖最後由 hkyan 於 2018-9-5 16:05 編輯
要把舊資料一次整理,求公式除去豆號及加回MR 在前, 還有之前轉入有少錯誤(豆號後沒有space),有能一次糾正嗎?
[attach]29345[/attach] 希望效果如此
[attach]29349[/attach]
作者:
faye59
時間:
2018-9-6 06:46
回復
1#
hkyan
="MR"&SUBSTITUTE(MID(A1,4,99),",","")
下拉
作者:
hkyan
時間:
2018-9-6 12:11
回復
2#
faye59
處理過程中,問題來了
1) 倘若外藉客沒有中文姓名的, 便會出錯. 例如
CHOU, QUANTAI 修正後變作 MR U QUANTAI
2) 上文提到部份姓名在,號之後沒有space的小錯誤, 是否就不能修正?
現變作這樣MR YIMWAI LEUNG, 能於公式內一并修正為 MR YIM WAI LEUNG 嗎?
作者:
准提部林
時間:
2018-9-6 13:19
回復
3#
hkyan
文字粘在一起, 無分隔符號, 公式是無法判別的!!
作者:
faye59
時間:
2018-9-6 22:16
回復
3#
hkyan
不然用vba試試,
[attach]29358[/attach]
用了笨一點的方法達到你要的效果。
Private Sub CommandButton1_Click()
For Each aa In Sheets("工作表1").Range([A1], [A1].End(xlDown)) '讀取A欄全部文字
For i = 1 To Len(aa)
If Mid(aa, i, 1) = "," And Mid(aa, i + 1, 1) <> " " Then '逗點後沒有空白執行加入空白
ar = ar & ", "
Else
ar = ar & Mid(aa, i, 1)
End If
Next
aa.Offset(, 1) = StrType(ar)
ar = ""
Next
End Sub
Function StrType(Mystr)
For i = 1 To Len(Mystr)
k = AscW(Mid(Mystr, i))
Select Case k
Case 32 '空格
Textstring = Textstring & Mid(Mystr, i, 1)
Case 48 To 57 '數字
Textstring = Textstring & Mid(Mystr, i, 1)
Case 65 To 90, 97 To 122 '英文
Textstring = Textstring & Mid(Mystr, i, 1)
Case 0 To 47, 58 To 64, 91 To 96, 122 To 255 '符號
Textstring = Textstring & ""
End Select
Next
StrType = "MR " & Textstring
If Mid(StrType, 4, 1) = " " Then StrType = Mid(StrType, 1, 3) & Mid(StrType, 5, 99) '判斷第四碼是否為空白
End Function
複製代碼
作者:
hkyan
時間:
2018-9-7 11:43
回復
5#
faye59
嘗試中, 另一問有關上回教取替,的公式
=SUBSTITUTE(MID(A1,1,99),",","")
倘若名稱舊有輸入為 CHING, LOK-MAN需修正為 CHING LOK MAN,那麼多條件取替要如何設置才能同時處理 , 及 -
作者:
hkyan
時間:
2018-9-7 12:37
回復
6#
hkyan
CHING, LOK-MAN需修正為 CHING LOK MAN才是
作者:
faye59
時間:
2018-9-9 21:14
回復
6#
hkyan
可以搜尋
Asc函數字元碼對照表
看看,
下面是修改
-
這個符號,字元碼為45,在Function中的Select Case中加入一個條件即可。
註解我再打詳細一點。
Private Sub CommandButton1_Click()
For Each aa In Sheets("工作表1").Range([A1], [A1].End(xlDown))'迴圈讀取A欄所有資料,往下讀取
For i = 1 To Len(aa)'迴圈該欄位文字中長度
If Mid(aa, i, 1) = "," And Mid(aa, i + 1, 1) <> " " Then'如果讀到逗號並確認後方是否不為空白,兩者條件均符合執行逗號後面加入空白,如果條件均不成立當前文字加入ar字串中
ar = ar & ", "
Else
ar = ar & Mid(aa, i, 1)
End If
Next
aa.Offset(, 1) = StrType(ar)'判讀字串完畢後ar中的條件,跳入Function程序,結果回傳aa往右加一格位置
ar = ""'清空字串
Next
End Sub
Function StrType(Mystr)
For i = 1 To Len(Mystr)'迴圈該欄位文字中長度
k = AscW(Mid(Mystr, i))'取得的該文字Asc函數轉換字元碼
Select Case k'選取字元碼符合Case中哪一個條件
Case 32 '空格
Textstring = Textstring & Mid(Mystr, i, 1)
Case 48 To 57 '數字
Textstring = Textstring & Mid(Mystr, i, 1)
Case 65 To 90, 97 To 122 '英文
Textstring = Textstring & Mid(Mystr, i, 1)
Case 0 To 44, 46 To 47, 58 To 64, 91 To 96, 122 To 255 '符號
Textstring = Textstring & ""
Case 45 '像是這裡 - 這個符號的字元碼為45,在字串中把它改為空格就可以
Textstring = Textstring & " "
End Select
Next
StrType = "MR " & Textstring'字串完畢後在字串前加入MR+空格,回傳完整字串
If Mid(StrType, 4, 1) = " " Then StrType = Mid(StrType, 1, 3) & Mid(StrType, 5, 99)'如果文字中第四碼這一個字為空白,重新字串1~3及5~最後一碼,等同於刪除第四碼空格
End Function
複製代碼
這支程序有點偷懶,不好意思...還有很多地方可以精簡的地方...
作者:
hcm19522
時間:
2018-9-9 21:34
http://blog.xuite.net/hcm19522/twblog/585336957
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)