函数提取单元格文字

篇一:提取汉字(函数)

用公式提取Excel单元格中的汉字

对于一个混杂各种字母、数字及其他字符和汉字的文本字符串,要提取其中的汉字,在Excel中通常可用下面的公式。例如下图A列中的字符串,要在B列提取其中的汉字(或词语)。

如果汉字位于字符串的开头或结尾,用LEFT或RIGHT函数即可提取,例如上图中A2:A4区域中的字符串。在B2中输入下面的公式:

=LEFT(A2,LENB(A2)-LEN(A2))

就会返回字符串中开头的几个汉字。

说明:LENB函数和LEN函数都可用返回文本字符串中的字符数,不同的是,LENB函数会将每个汉字(双字节字符)的字符数按2计数,LEN函数则对所有的字符,无论是单字节还是双字节都按1计数,因而公式中的“LENB(A2)-LEN(A2)”返回文本字符串中的汉字个数。

同样对于A6:A8区域中的字符串,在B6中用RIGHT函

函数提取单元格文字

数即可:

=RIGHT(A6,LENB(A6)-LEN(A6))

如果汉字位于字符串的中间,可使用下面的数组公式。例如图中A10:A12区域中的字符串,在B10中输入数组公式:

=MID(A10,MATCH(2,LENB(MID(A10,ROW(INDIRECT("1:"&LEN(A10))),1)),),LENB(A10)-LEN(A10))

公式输入完毕,按Ctrl+Shift+Enter结束。

说明:公式先用MID函数将字符串中的每个字符分解到到一个字符数组中,然后用LENB函数返回各字符的的字符数,对于汉字会返回“2”。用MATCH函数取得第一个“2”的位置,即第一个汉字的位置,最后再用MID函数提取汉字。 使用上述公式时要求字符串中的汉字是连续的,中间没有其它字符分隔。如果字符串中的汉字之间有其它字符分隔,例如上图中的A14单元格,要提取其中的所有汉字,可用下面的自定义函数。方法是:

1. 按Alt+F11,打开VBA编辑器,单击菜单“插入→模块”,在代码窗口中输入粘贴下面的代码:

Function 提取汉字(sString As String) As StringDim regEx As ObjectSet regEx = CreateObject("VBScript.RegExp")With regEx '搜索整个字符串 .Global = True '匹配非汉字 .Pattern = "[^\u4e00-\u9fa5]" '将字符串中的非汉字替换为空 提取汉字 = .Replace(sString, "")End WithSet regEx = NothingEnd Function

篇二:用自定义函数提取单元格内字符串中的数字

用自定义函数提取单元格内字符串中的数字 如果Excel单元格中包含一个混合文本和数字的字符串,要提取其中的数字,通常可以用下面的公式,例如字符串“隆平高科000998”在A1单元格中,在B1中输入数组公式:

=MID(A1,MATCH(1,--ISNUMBER(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)),0),COUNT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)))

公式输入完毕按Ctrl+Shift+Enter结束,公式返回文本形式的数值“000998”。下面的公式也可以提取字符串中的数值,并返回数值形式:

=LOOKUP(9E+307,--MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890)),ROW(INDIRECT("1:"&LEN(A1)))))

公式返回“998”。

上述两个公式适合于字符串中包含连续数字的情况。但有时字符串中可能包含多个被文本分隔的数字,如“世纪家园31栋3单元901室”中就包含了3个数值,用上面的第二个公式只能返回第一个数值“31”,而第一个公式不能得到正确的结果。要分别提取字符串中的各个数值,可以用下面的自定义函数。

在Excel中按Alt+F11,打开VBA编辑器。单击菜单“插入→模块”,在代码窗口中输入下列代码:

Function GetNums(rCell As Range, num As Integer) As

String

Dim Arr1() As String, Arr2()

As String

Dim chr As String, Str As

String

Dim i As Integer, j As

Integer

On Error GoTo line1

Str = rCell.Text

For i = 1 To Len(Str)

chr = Mid(Str, i, 1)

If (Asc(chr) < 48 Or Asc(chr) > 57) Then

Str = Replace(Str, chr, " ")

End If

Next

Arr1 = Split(Trim(Str))

ReDim Arr2(UBound(Arr1))

For i = 0 To

UBound(Arr1)

If Arr1(i) <> ""

Then

Arr2(j) = Arr1(i)

j = j + 1

End If

篇三:巧妙提取单元格中的指定内容

龙源期刊网 .cn

巧妙提取单元格中的指定内容

作者:张薇

来源:《电脑知识与技术》2014年第09期

同事前来求助,如图1所示,她希望将A列的数字代码和文字科目分别提取到B列、C列,如果采取纯手工的方法,操作相当繁琐。其实,我们利用公式即可解决上述问题:在B1单元格输入数组公式:=LOOKUP(1,-LEFT(Al,ROW($1:$15))),输入完成之后在编辑栏按下“Ctrl+Shift+Enter”组合键,可得“119301”的结果,拖拽填充柄;在C1单元格输入公式:=SUBSTITUTE(A1,B1,),执行之后可得“往来中转/通邮赔”的结果,拖拽填充柄,最终效果如图2所示,是不是很简单?其实,我们还可以利用Excel 2013的“快速填充”功能实现:

在B1单元格手工输入“119301”,选中B列的相应单元格区域,切换到“数据”选项卡,单击“数据工具”功能组的“快速填充”按钮,很快就可以获得图3所示的结果,按照类似的步骤可以提取AYU单元格的文字科目,操作较使用公式更为简单。