您的位置:首頁>正文

Excel|自訂函數:從包含中英文的文本中只提取英文或中文

有如下資料, 需要將英文放到一列, 中文放到另外一列:

序號中英文1blue藍色2white白色3red紅色4green綠色5pink粉紅6pink粉紅red

要提取中文或英文, 對於序號1-5, 可以用Excel函數或VBA去達成, 序號6只能用VBA去達成。

VBA代碼如下:

'從包含中英文的文本中提取中文的自訂函數

Function SplitStringChs(TheString)

Dim n, Chs

For n = 1 To Len(TheString)

If Asc(Mid(TheString, n, 1)) < 0 Then

Chs = Chs & Mid(TheString, n, 1)

End If

Next

SplitStringChs = Chs

End Function

'從包含中英文的文本中提取英文的自訂函數

Function SplitStringEng(TheString)

Dim n, Eng

For n = 1 To Len(TheString)

If Asc(Mid(TheString, n, 1)) >= 0 Then

Eng = Eng & Mid(TheString, n, 1)

End If

Next

SplitStringEng = Trim(Eng)

End Function

代碼備註:

VBA 函數Asc(string)相當於Excel中的Code()函數, 但是VBA中沒有定義Code()函數。

Asc(string)返回一個 Integer, 代表字串中首字母的字元代碼。 string 參數可以是任何有效的字串運算式。 如果 string 中沒有包含任何字元, 則會產生執行階段錯誤。 在非 DBCS 系統下, 返回值範圍為 0 – 255 。 在 DBCS 系統下,

則為 -32768 – 32767。

mYDATA=ASC("A"), 結果 mYDATA的值 65;

Excel中單元中輸入公式=CODE("A") , 值顯示65;

在儲存格中應用自訂函數或內置函數, 如下:

中英文用VBA提取英文用VBA提取中文用函數提取英文用函數提取中文blue藍色=SplitStringEng(A2)=SplitStringChs(A2)=LEFT(A2,2*LEN(A2)-LENB(A2))=RIGHT(A2,LENB(A2)-LEN(A2))white白色=SplitStringEng(A3)=SplitStringChs(A3)=LEFT(A3,2*LEN(A3)-LENB(A3))=RIGHT(A3,LENB(A3)-LEN(A3))red紅色=SplitStringEng(A4)=SplitStringChs(A4)=LEFT(A4,2*LEN(A4)-LENB(A4))=RIGHT(A4,LENB(A4)-LEN(A4))green綠色=SplitStringEng(A5)=SplitStringChs(A5)=LEFT(A5,2*LEN(A5)-LENB(A5))=RIGHT(A5,LENB(A5)-LEN(A5))pink粉紅=SplitStringEng(A6)=SplitStringChs(A6)=LEFT(A6,2*LEN(A6)-LENB(A6))=RIGHT(A6,LENB(A6)-LEN(A6))pink粉紅red=SplitStringEng(A7)=SplitStringChs(A7)=LEFT(A7,2*LEN(A7)-LENB(A7))=RIGHT(A7,LENB(A7)-LEN(A7))

公式顯示結果為:

中英文用VBA提取英文用VBA提取中文用函數提取英文用函數提取中文blue藍色blue藍色blue藍色white白色white白色white白色red紅色red紅色red紅色green綠色green綠色green綠色pink粉紅pink粉紅pink粉紅pink粉紅redpinkred粉紅pink粉紅red
同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示