Excel VBA
Excel文本中提取英文或中文
2017-08-21 15:57:06

在工作中,我们经常需要整理一些不规则的数据。如从文字中提取英文,从文字中提取数字等等。

如下面的一组数据,需要从中英文本混合的单元格中提取英文和中文,然后将英文放到一列,中文放到另外一列:

序号中英文
1blue蓝色
2white白色
3red红色
4green绿色
5pink粉红
6pink粉红red

VBA详细代码:

1、从包含中英文的文本中提取中文的自定义函数

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

2、从包含中英文的文本中提取英文的自定义函数

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

内容摘自:小智雅汇(头条号)