在工作中,我们经常需要整理一些不规则的数据。如从文字中提取英文,从文字中提取数字等等。
如下面的一组数据,需要从中英文本混合的单元格中提取英文和中文,然后将英文放到一列,中文放到另外一列:序号 | 中英文 | 1 | blue蓝色 | 2 | white白色 | 3 | red红色 | 4 | green绿色 | 5 | pink粉红 | 6 | pink粉红red |
VBA详细代码:1、从包含中英文的文本中提取中文的自定义函数Function SplitStringChs(TheString) Dim n, Chs 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粉红red | pinkred | 粉红 | pink粉红 | red |
内容摘自:小智雅汇(头条号) |