提取Excel字符串中的数字

提取Excel字符串中的数字
提取Excel字符串中的数字

提取Excel字符串中的数字

在处理账务中,一般单位名称是放在表格的右上角,但有时单位是不固定的,比较有时是吨,有时是件,有时是箱,这时单位就不便放在表格上面,因为这样不能反应真实的信息,而如果把这些单位直接输入到表格中,在计算时会就遇到问题,我的解决方法是,把这些单位也输入,在计算时把字符串的数字提出来。

用VBA实现:

实现环境:Excel2003,Windows XP。

打开Excel,按ALT+F11,打开Visual Basic编辑器,双击VBAProject,双击模块,再双击模块,如下图所示:

输入如下代码:

Function AtoN(Str As String)

If IsNumeric(Str) Then

AtoN = Str

Else

For i = Len(Trim(Str)) To 1 Step -1

a = Mid(Str, i, 1)

If a = "." Then n = a + n

If IsNumeric(a) Then

n = a + n

Else

i = i

End If

Next i

AtoN = n

End If

End Function

关闭Visual Basic编辑器,点击地址栏上的插入函数按钮,在类型列表里选择用户定义,这里就会显示刚才定义的函数。如下图所示:

测试:

excel中个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字

e x c e l中个单元格中有文字字母字符和数字如何能把数字单独提取出 来提取数字 集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来2011-04-13 11:25匿名|分类:|浏览1375次 如A1中 A本月电费收入(美兰供电所)(对帐标志: 想在B中表示为 最好能教一个方法十分感谢 我有更好的答案 按默认排序| 2条回答 |2011-04-13 11:32|十五级 在EXECL理,按ALT+F11,插入-模块,复制下列语句 Function SplitNumEng(str As String, sty As Byte) Dim StrA As String Dim StrB As String Dim StrC As String Dim i As Integer Dim SigS As String For i = 1 To Len(str) SigS = Mid(str, i, 1) If SigS Like "[a-zA-Z]" Then

StrA = StrA & SigS ElseIf SigS Like "#" Then StrB = StrB & SigS Else StrC = StrC & SigS End If Next i Select Case sty Case 1 SplitNumEng = StrA Case 2 SplitNumEng = StrB Case Else SplitNumEng = StrC End Select End Function 比如你的数据在A1 BI输入 =SplitNumEng(A1,1) 表示提取字母 =SplitNumEng(A1,2) 表示提取数字

excel中取出字符串中的数字

excel中取出字符串中的数字 1.数据- "a12345y" 如何自动撷取其中的数字 2.数据- "12345" 如何自动只撷取其中间三个的数位(即234)放於其它格上 如果你的数据有固定的长度和格式,公式可以简单些,如,前后各有1位字母: A1="a12345y" B1=Mid(A1,2,5) 如果前后字母个数不固定: B1=MID(A1,MA TCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(IN DIRECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1) 数组公式,按Ctrl+Shift+Enter三键结束。 1、截取字符串中的一部分,用函数MID()。 A1="a12345y" 公式最外层是Mid()函数,该函数的格式是: Mid(文本,开始位置,长度) 对应公式是: MID(A1,MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(INDIR ECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1) 2、长度=末位置-首位置+1。 其中MATCH()公式有不同的两个: 文本A1中第1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),) 文本A1中最后1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)) 两个公式不同之处,在于最后一个逗号。公式什么意思先别管,你只要知道: 长度=最后1个数字的位置-第1个数字的位置+1 本例中:6-2+1=5,数字长度为5。 3、拆散字符串。 下面公式取出字符串中的每一粒字符: MID(A1,1,1)="a" MID(A1,2,1)="1" …… MID(A1,6,1)="5" MID(A1,7,1)="y" 下面公式返回的是拆散后的一串字符(数组): MID(A1,{1;2;3;4;5;6;7},1)={"a";"1";"2";"3";"4";"5";"y"} 其中{1;2;3;4;5;6;7}用ROW(INDIRECT("1:"&LEN(A1)))计算所得。 这是数组公式中的一个基本技巧,如果还不懂,请从固顶的帖子中找到并学习它。 在编辑栏中,请用鼠标选取MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1) 然后按F9可以看到上面的结果。 4、0乘以任何数都得0吗? 你一定不会怀疑。 还是在编辑栏,请继续用鼠标选择: 0*{"a";"1";"2";"3";"4";"5";"y"},或者选择: 0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),按F9,结果显示为: {#VALUE!;0;0;0;0;0;#VALUE!}。真的不是“都得0”。 里面除了0,还有错误值。个数与原来数组元素的个数相同。

提取excel中的一段数字、文字、符号方法

一、单元格A1中有如下内容:要提取出数字 经测试下列公式好用 提取Excel单元格中连续的数字的函数公式是: =LOOKUP(9E+307,--MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1234567890)),ROW($1:$8))) 或者 =LOOKUP(9E+307,--MID(H2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},H2&1234567890)),ROW(INDIRECT("1:"&LEN(H2))))) 解释一下这个公式 FIND函数——查询文本所在位置 FIND(find_text,within_text,[start_num]) FIND(需查找的文本,包含查找文本的单元格,开始查找单元格的字符位置(可选)) 此处FIND函数是搜索{1,2,3,4,5,6,7,8,9,0}数字在“A1&1234567890”中所在的位置; A1&1234567890的目的是在用FIND函数查询时,不出现错误值,使之后的MIN函数可以正常运行。 即FIND({1,2,3,4,5,6,7,8,9,0},“小王联系电话58670098负责财务1234567890”) 选取划黑后按F9,得出的位置为:{19,20,21,22,7,9,10,8,13,11} MIN函数——返回列表中的最小值 MIN(number1,number2,……) MIN(数字1,数字2,……)

将FIND所得结果{19,20,21,22,7,9,10,8,13,11}带入MIN函数,最小值所得为7,正是第一个数值出现的位置; 也正是之前FIND函数中使用A1&1234567890的原因。 MID函数——返回文本字符串从指定位置开始特定数目的字符,即提取某段字符。 MID(text,start_num,num_chars) MID(被提取的文本或单元格,开始提取的字符位置,提取的字符个数) 将上述MIN函数所得带入MID(A1,7,ROW($1:$8); ROW($1:$8)使用row函数不是用来计算行,而是借用其作为常量。当然1:8是可以修改的,只要大于数值个数就不影响结果。 --MID(……)中“--”的作用是将MID得出的结果变为数值,使其可以被LOOKUP函数查询到。 MID(……)选取划黑后按F9{"5";"58";"586";"5867";"58670";"586700";"5867009";"58670098"} --MID(……)选取划黑后按F9{5;58;586;5867;58670;586700;5867009;58670098} LOOKUP函数——从返回某个查询的值(数组形式) LOOKUP(lookup_value,array) LOOKUP(在数组中查找的值,数组范围区域)

如何在EXCEL单元格里提取字符并求和

在A1单元格里数组为1+10-20在B1单元格里数组为-2+55-122 ;请问如何把 A1和B1单格里正负数各自提取求和,如这样,提取A1 单元与B1的数字,1、10、55在C1求和。提取-20、-2、-122在D1求和,求这两个公式,请指教! 你可以直接 copy 这几个公式 C1: =SUMIF(D3:D11,">0") D1: =SUMIF(D3:D11,"<0") C2: =SUBSTITUTE(SUBSTITUTE(IF(LEFT(A1,1)="-",0&A1,A1)&IF(LEFT(B1,1)="-",B1,"+"&B1),"+",","),"-",",-")&"," C4: =FIND(",",C$2,C3+1) D3: =VALUE(MID($C$2,C3+1,C4-C3-1)) 甚至可以适用于类似 3+12-45+32+2 和 8-9-111+6 等复杂情况。 如果你非得用一个函数实现(不用任何辅助单元格),需要用VB。 补充回答: VB 方法如下, 在Excel里,同时按Alt和F11,进入VB界面,右键点左上窗口的 Thisworkbook,插入,模块,在右边窗口粘贴如下代码: Function SumP(Range1 As Range, Range2 As Range) As Long Dim i, j As Byte Dim tmp As String SumP = 0 j = 1 tmp = IIf(Left(Range1, 1) = "-", Range1, " " & Range1) & IIf(Left(Range2, 1) = "-", Range2, "+" & Range2) & " " tmp = Replace(tmp, "-", " -") tmp = Replace(tmp, "+", " ") For i = 1 To Len(tmp) - Len(Replace(tmp, " ", "")) - 1 If CLng(Trim(Mid(Left(tmp, InStr(j + 1, tmp, " ") - 1), j + 1, 10))) > 0 Then SumP= SumP+ CLng(Trim(Mid(Left(tmp, + 1, tmp, " ") - 1), j + 1, 10))) j = InStr(j + 1, tmp, " ") Next i End Function Function SumN(Range1 As Range, Range2 As Range) As Long Dim i, j As Byte Dim tmp As String SumN = 0 j = 1 tmp = IIf(Left(Range1, 1) = "-", Range1, " " & Range1) & IIf(Left(Range2, 1) = "-", Range2, "+" & Range2) & " " tmp = Replace(tmp, "-", " -") tmp = Replace(tmp, "+", " ") For i = 1 To Len(tmp) - Len(Replace(tmp, " ", "")) - 1 If CLng(Trim(Mid(Left(tmp, InStr(j + 1, tmp, " ") - 1), j + 1, 10))) < 0 Then SumN= SumN+ CLng(Trim(Mid(Left(tmp, + 1, tmp, " ") - 1), j + 1, 10))) j = InStr(j + 1, tmp, " ") Next i End Function 会到 Excel 里,在 C1 输入 =sump(a1,b1) ,在 D1 输入 =sumn(a1,b1)InStr(j InStr(j

excel中个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来?2011-04-13 11:25匿名?|?分类:办公软件?|?浏览1375次 如A1中 A本月电费收入(美兰供电所)(对帐标志:2010.01.07) 想在B中表示为 20100107 最好能教一个方法十分感谢 我有更好的答案 按默认排序|按时间排序 2条回答 检举|2011-04-13 11:32Mrpine|十五级 在EXECL理,按ALT+F11,插入-模块,复制下列语句 Function SplitNumEng(str As String, sty As Byte) Dim StrA As String Dim StrB As String Dim StrC As String Dim i As Integer Dim SigS As String For i = 1 To Len(str) SigS = Mid(str, i, 1) If SigS Like "[a-zA-Z]" Then

StrA = StrA & SigS ElseIf SigS Like "#" Then StrB = StrB & SigS Else StrC = StrC & SigS End If Next i Select Case sty Case 1 SplitNumEng = StrA Case 2 SplitNumEng = StrB Case Else SplitNumEng = StrC End Select End Function 比如你的数据在A1 BI输入 =SplitNumEng(A1,1) 表示提取字母 =SplitNumEng(A1,2) 表示提取数字

EXCEL中从一个字符串里提取连续数字引发的思考(二)

EXCEL中从一个字符串里提取连续数字引发的思考(二) 从一个字符串中提取连续数字的函数 =LOOKUP(9E+307,--MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),RO W(INDIRECT("$1:$"&LEN(A1)))))引发的思考(二) 依然假设A1=“总人口7895432个”,A列的内容都是这种形式的,你的任务就是把其中的数字单独提取出来放到B列。以B1单元格为例: 在上一篇中,使用LOOKUP的框架中会使用到MID,思路还显得很曲折和原始,那么可否就直接以MID为框架来提取数字呢?答案是肯定的,思路也比较简洁,尽管使用起来看似复杂,像下面这样写。 =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW(INDIRECT("$A1:$"&"A"&LEN (A1))),1)),0),COUNT(1*MID(A1,ROW(INDIRECT("$A1:$"&"A"&LEN(A1))),1))) 接上篇,讲解之前有必要先来认识下ROW和COLUMN函数,这是取行号和列号的函数,那么其参数必须是引用(单元格、行或列)。比如ROW(C1)=1,COLUMN(C1)=3。将参数里的单一单元格变成单元格矩阵的话,就会返回一个数组,比如ROW(A1:A5)={1;2;3;4;5},按Ctrl+shift+enter结束输入就会看到公式被{}括起来了,说明是一个数组,而单元格里只显示数组的第一个。

常见的懒人写法ROW(1:100)只写了行号,简直是一种赤裸裸的浪费计算资源的写法,从A 到Z有26列,然后AA到AZ、BA到BZ......这样排列组合下来得有26^26种组合了,计算了多少次啊!简直瞎搞嘛,取个行号而已,大可以写成ROW(A1:A100)或ROW(B1:B100)等等简单明了,按需计算100次而已。 所以,在此篇中,ROW(INDIRECT ("$1:$"&LEN(A1))) 升级成 ROW(INDIRECT("$A1:$"&"A"&LEN(A1)))以减轻计算机负荷。 说到正题,用ROW按字符串长度生成一个序列,为什么要用 ROW(INDIRECT("$A1:$"&"A"&LEN(A1))) ,而不能想当然的直接写ROW($1:$LEN(A1))?因为ROW函数的参数必须是引用!静态的写法ROW(1:100)或ROW(A1:A100)是引用,加了LEN函数就变成动态的了,需要间接引用函数Indirect、Offset或Index来帮忙。 一般常见的是组合Indirect的写法,用法就像C语言里的指针一样。在静态写法INDIRECT(A1:A3)下,假设A1单元格的内容是B3,A2单元格内容是"哇哈哈",A3为空,而B3单元格内容是"我靠",则INDIRECT(A1:A3)={"我靠";#REF!;#REF!}。如果加入LEN 函数变成动态的,而且以单元格("A1":"A3")的形式作参数,不会返回单元格的引用值,而是直接返回单元格内容,INDIRECT("$A1:$"&"A"&LEN(A2))={"B3";"哇哈哈";0}。 因为Row和Column可以引用自身,所以Row、Column套任何函数以后,仍然可以引用自身,但Indirect却不行,所以如果直接写Indirect("1:10"),那么公式不能写在1至10

如何提取excel中的一段数字、文字、符号

一、单元格中有如下内容:要提取出数字 提取单元格中连续地数字地函数公式是: (((({}))($:$))) 或者 (((({}))((":"())))) 解释一下这个公式 函数——查询文本所在位置 (,,[]) (需查找地文本,包含查找文本地单元格,开始查找单元格地字符位置(可选)) 此处函数是搜索{}数字在“”中所在地位置; 地目地是在用函数查询时,不出现错误值,使之后地函数可以正常运行. 即({},“小王联系电话负责财务”) 选取划黑后按,得出地位置为:{} 函数——返回列表中地最小值 (,……) (数字,数字,……) 将所得结果{}带入函数,最小值所得为,正是第一个数值出现地位置; 也正是之前函数中使用地原因. 函数——返回文本字符串从指定位置开始特定数目地字符,即提取某段字符. () (被提取地文本或单元格,开始提取地字符位置,提取地字符个数) 将上述函数所得带入(($:$); ($:$)使用函数不是用来计算行,而是借用其作为常量.当然是可以修改地,只要大于数值个数就不影响结果. (……)中“”地作用是将得出地结果变为数值,使其可以被函数查询到.

(……)选取划黑后按{"";"";"";"";"";"";"";""} (……)选取划黑后按{} 函数——从返回某个查询地值(数组形式) () (在数组中查找地值,数组范围区域) 很重要地一点: 如果找不到地值,它会使用数组中小于或等于地最大值. (,……)其中指地是一个不会出现地超大值,后面有个, 又可以写成*^;那么此处搜索这个超大值,肯定无法找到,因此返回地内容将是小于或等于{}地最大值,即. 二、如果内容中除字汉子字母外只有连续地位数字 可以用一下地公式手机号都是开头地(函数从第一个字开始)假如数据在((""))或者 (("?")) 函数 实例:如果学习地革命,则公式“("地",)”返回,("地",)返回. 假设数据在列. 输入公式 ((),"")下拉复制公式 追问 我地数据在列应该在输入公式如下((),"")吗?如果是这样,没反应 回答 ((),"") 如何取出一段文字中地数字 这要分好几情况: .要取前几位,或者后几位,如果都是数值,那么可以用( )和( )函数. .要取地是中间地几位,那么可以用()函数.

如何使用电子表格excel中的提取数字常用计算公式

如何使用电子表格excel中的提取数字常用计算公式 一、年龄计算公式: =IF((YEAR(E2)=2008)*(MONTH(E2)>8),0,2008-YEAR(E2) IF(MONTH(E2)<=8,0,-1)) 其中e2为单元格,2008为当前年份 二、身份证号中提取出生年月= MID(J11, 7, 4) & "年" & MID(J11, 11, 2) & "月" & MID(J11, 13, 2)&"日" 三、班级平均分公式 =IF(COUNTIF($C$2:$C$24,J26)=0,"",SUMIF($C$2:$C$24,J26,$D$2)/COUNTIF($C$2:$C$24,J26)) 四、Excel表中身份证号码提取出生年月、性别、年龄的使用技巧 如何从Excel表中的身份证号码中提取出生年月、性别、年龄呢?看了本文就知道了。 方法一: 1.Excel表中用身份证号码中取其中的号码用:MID(文本,开始字符,所取字符数); 2.15位身份证号从第7位到第12位是出生年月日,年份用的是2位数。

18位身份证号从第7位到第14位是出生的年月日,年份用的是4位数。 从身份证号码中提取出表示出生年、月、日的数字,用文本函数MID()可以达到目的。MID()——从指定位置开始提取指定个数的字符(从左向右)。 对一个身份证号码是15位或是18位进行判断,用逻辑判断函数IF()和字符个数计算函数LEN()辅助使用可以完成。综合上述分析,可以通过下述操作,完成形如1978-12-24样式的出生年月日自动提取: 假如身份证号数据在A1单元格,在B1单元格中编辑公式 =IF(LEN(A1)=15,MID(A1,7,2)&"-"&MID(A1,9,2)&"-"&MID(A1,11,2),MID(A1,7,4)&"-"&MID(A1,11,2)&"-"& MID(A1,13,2)) 回车确认即可。 如果只要“年-月”格式,公式可以修改为 =IF(LEN(A1)=15,MID(A1,7,2)&"-"&MID(A1,9,2),MID(A1,7,4)&"-"&MID(A1,11,2)) 3.这是根据身份证号码(15位和18位通用)自动提取性别的自编公式,供需要的朋友参考: 说明:公式中的B2是身份证号

excel提取文本中数字公式

Excel提取文本中数字公式 第一种,如图,如果数字在中文的后面,那么使用公式:"=--RIGHT(A2,LEN(A2) *2-LENB(A2))"解释下:因为中文字符是占两个字节。而数字占一个字节。len 返回值是字符的个数。而lenb返回值是这个字符串占多少个字节。所以,这两个的差值就是一个有几个中文。LENB(A2)-LEN(A2) = 中文实际个数字符总数-中文个数=数字个数LEN(A2)-(LENB(A2)-LEN(A2) )=数字个数开括号数字个数=LEN(A2)*2-LENB(A2)。因为数字在右边,所以,利用RIGHT,获取从右边第一个开始到最后一个数字,就得到这个数值。 第二种:数字在中文的前面。实际上和第一种的方法是一样的,这儿只是取数字的时候,从左边开始。公式: "=--LEFT(A2,LEN(A2)*2-LENB(A2))" 第三种:混搭。这个其实就是加个判断,判断第一个字符是数字还是中文。如果是数字,那么就用上面的第二个公式,中文就用第一个公式。公式:“=IF(ISN UMBER(--LEFT(A2,1)),--RIGHT(A2,LEN(A2)*2-LENB(A2)),--LEFT(A2,LEN(A2)* 2-LENB(A2)))” ============================================= excel从特殊字符串提取指定数据

在日常工作中,常常会遇到以下的参数: 如何把直径单独提取出来,以便进行直径比较或按直径汇总。 步骤/方法 选定直径的提取单元格,输入如图所示的公式,回车即可。 下拉表格,将公式复制至其他表格,这样就完美的提取出规格数据中的直径数值,之后就可以进行数据分类和汇总了。

C语言-获取一个字符串中的数字组

/*输入一个字符串,内有数字和非数字字符,如a123x456_17960? 302tab5876,将其中连续的数字作为一个整数,请统计出一共有多少个整数,输出这些整数,并求出最长的整数的位数。*/ 说明:i,j,k用来遍历,flag作为是否是数字的标志,max表示最长的连续数字串,str[100]用来存放输入的字符串,a[10][10]用来存放数字串,最多可存放10组连续的数字,,,, #include #include main() {int i,j=0,k,flag=0,max=0; char str[100],a[10][10]; printf("请输入一串字符(包括数字)\n"); gets(str); for(i=0;str[i]!='\0';i++) if(48<=str[i]&&str[i]<=57) {if(flag==0) {j++; k=0; a[j][k]=str[i]; k++; flag=1;} else if(str[i+1]=='\0') { a[j][k]=str[i]; a[j][k+1]='\0'; } else { a[j][k]=str[i]; k++; } } else if(flag==1) { if(k>max) max=k; a[j][k]='\0'; flag=0; } printf("输入的字符串中,最长的数字串有%d位数字。数字串一共有%d个,分别是:\n",max,j); for(i=1;i<=j;i++) printf("%s\n",a[i]); }

程序大致流程图如下(“<=”是赋值):

sql取出字符串中的汉字-字母或是数字

go --创建函数(得到字符串中的汉字) create function [dbo].[m_getchinese] ( @chinese nvarchar(max) ) returns varchar(100) as begin while patindex('%[^吖-咗]%',@chinese)> 0 begin set @chinese =stuff(@chinese,patindex('%[^吖- 咗]%',@chinese),1,N''); end return @chinese end go --创建函数(得到字符串中的字母) create function [dbo].[m_getstr](@maco varchar(100)) returns varchar(max) as begin while patindex('%[^a-z]%',@maco)> 0 begin set @maco=stuff(@maco,patindex('%[^a-z]%',@maco),1,'') end return @maco end go --创建函数(得到字符串中的数字) create function [dbo].[m_getnumber] ( @mysql_one nvarchar(200) ) returns varchar(200) begin declare @mysql_two varchar(200) select @mysql_two=

substring(@mysql_one,patindex('%[0-9.]%',@mysql_one),patindex('%[ ^0-9.]%',substring(@mysql_one,patindex('%[0-9.]%',@mysql_one), len(@mysql_one)-patindex('%[0-9.]%',@mysql_one)+1))-1) return @mysql_two; end --测试 select dbo.[m_getchinese]('China2009中国HRB4-1v') select dbo.[m_getstr]('China2009中国HRB4-1v') select dbo.[m_getnumber]('China2009中国HRB4-1v') --运行结果 /* ----------- 中国 ----------- ChinaHRBv ----------- 2009 */ --说明一下 --上面这个取数字是可以取浮点型的 select dbo.[m_getnumber] ('字段.456A(AA)A')--正常 select dbo.[m_getnumber] ('CHinese2.1day')--正常 select dbo.[m_getnumber] ('Name5.01From')--正常 select dbo.[m_getnumber] ('9898Address')--正常 select dbo.[m_getnumber] ('aaaaaForm2.3333')--错误 --修正函数 go /* 取出字符串中间的数字(第二版)*/ create function [dbo].[m_getnumberV2.0] ( @mysql_one nvarchar(200) ) returns varchar(200) begin declare @mysql_two varchar(200)

用函数在Excel中从文本字符串提取数字

用函数在Excel中从文本字符串提取数字 Excel输入数据过程中,经常出现在单元格中输入这样的字符串:GH0012JI、ACVB908、华升12-58JK、五香12.56元、0001#、010258等。在进行数据处理时,又需要把其中的数字0012、908、12-58、12.56、0001提取出来。 如何通过使用Excel的工作表函数,提取出字符串中的数字? 一、问题分析 对于已经输入单元格中的字符串,每一个字符在字符串中都有自己固定的位置,这个固定位置都可以用序列数(1、2、3、……)来表示,用这些序列数可以构成一个可用的常数数组。 以字符串“五香12.56元”为例:序列数1、2、3、4、5、6、7、8分别对应着字符串“五香12.56元”中字符“五”、“香”、“1”、“2”、“.”、“5”、“6”、“元”。由序列数组成一个保存在内存中的新数组{1;2;3;4;5;6;7;8}(用列的形式保存),对应字符串中的字符构成的数组{“五”;“香”;“1”;“2”;“.”;“5”;“6”;“元”}。因此解决问题可以从数组着手思考。 二、思路框架 问题的关键是,如何用序列数重点描述出字符串中的数字部分的起始位置和终止位置,从而用MID函数从指定位置开始提取出指定个数的字符(数字)。 不难看出,两个保存在内存中的新数组: {“五”;“香”;“ 1”;“2”;“.”;“5”;“6”;“元”} {1;2;3;4;5;6;7;8} 数组具有相同大小的数据范围,而后一个数组中的每一个数值可以准确地描述出字符串中字符位置。 字符与序列数的对应关系如下表所示: 字符字符位置

五—— 1 香—— 2 1 —— 3 2 —— 4 . —— 5 5 —— 6 6 —— 7 元—— 8 所以解决问题的基本框架是: 用MID函数从字符串的第一个数字位置起提取到最后一个数字止的字符个数。即{=MID(字符串,第一个数字位置,最后一个字符位置-第一个字符位置+1}。其中“+1”是补上最后一个数字位置减去第一个数字位置而减少的一个数字位。 三、解决方案及步骤 假定字符串输入在A2单元格。 ⑴确定A2中字符串的长度。 即用LEN函数计算出A2中字符串中字符的个数,这个字符个数值就是字符串中最后一个字符在字符串中的位置:=LEN(A2)。 ⑵确认字符串中的每一个字符位置序列数组成的新数组。 用INDIRECT函数返回一个由文本字符串指定的引用:

几种PHP提取字符串中的数字

第一种方法,使用正则表达式: function findNum($str=''){ $str=trim($str); if(empty($str)){return '';} $reg='/(\d{3}(\.\d+)?)/is';//匹配数字的正则表达式 preg_match_all($reg,$str,$result); if(is_array($result)&&!empty($result)&&!empty($result[1])&&!empty($result[1][0])){ return $result[1][0]; } return ''; } 第二种方法,使用in_array方法: function findNum($str=''){ $str=trim($str); if(empty($str)){return '';} $temp=array('1','2','3','4','5','6','7','8','9','0'); $result=''; for($i=0;$i

Excel轻松提取网上数据

网上信息采集工作,最头疼的便是从网页上一次次很枯燥地进行数据表格的复制,而且在复制过来之后还要进行很多修改,不但麻烦而且也很浪费时间,工作效率大打折扣。这时我们不妨用功能强大的Excel来试着解决一下问题。 对于比较规范的表格数据,我们完全可以在表格页面上点击右键,选择"导出到Microsoft Office Excel"(图1),此时系统会自动打开Office Excel,进行数据加载。这个过程仅需要几秒钟就把数据加载进来(图2)。如果你认为数据比较适合你的编辑要求,那么就可以直接保存了。否则,也可以做一下适当的修改,因为在表格处理方面,Excel要大大优于word。 图1 在网上表格或数据采集这一点上,Excel往往是较为智能化的,它在进行数据采集与加载时,只加载表格固定区域内的数据,而不是把整个网页都加载进来。这一点我试过很多次,都是很听话的,请看图片2的效果。

图2 当然,在网页中也有一些不太规范的数据与表格,这样的数据,Excel处理起来,稍稍有一点难度,不过只要熟悉Excel 的操作功能的话,还是可以轻松搞定的。先看一下这个页面(图3), 图3 图3这种不规范的页面数据,如果让Excel处理起来就会出现这样的结果(图4),看着是不是感觉很乱,所有的东西都错位了,一般的人会感到速手无策的。主要原因就是多出了文件数据的开头与结尾。

图4 不过,只要我们删除文件上下两头的不规范的区域,剩下的这些数据不就变得好处理了吗?这时,我们再执行一下菜单:"数据――分列――下一步",这样就可以把不规范的数据变得规范了。这是处理之后的结果(图5) 图5 对于那些本来就比较规范的表格,就简单得多了,只要执行"导出加载――略修――保存"就可以了。

EXCEL单元格中的唯一数字如何提取出来

单元格中的唯一数字如何提取出来? 一个数值和文字混排的单元格,如何计提数值参与计算?发哥gvntw给出了一个巧妙的公式: =LOOKUP(9E+307,--MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9 },A1&1234567890)),ROW(INDIRECT("1:"&LEN(A1))))) 1、FIND()告诉我,0-9在文本中第一次出现的位置。 用Find()在指定的文本中查找0-9,会返回第一次出现的位置,如果没有会返回一个错误值,聪明的gvntw,在文本后面连接上1234567890,让Find()不再有借口返回错误值,请放心,它不会影响后面的结果。在编辑栏中,像下面一样,用鼠标将这一段文本抹黑,然后按F9。 =LOOKUP(9E+307,--MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9 },A1&1234567890)),ROW(INDIRECT("1:"&LEN(A1))))) 2、对着Min(),王小丫说:恭喜你,答对了,第一个数字在第3位。 如果你还怀疑,可以这再次抹黑,并按F9。 =LOOKUP(9E+307,--MID(A1,MIN({7;8;5;12;13;3;4;16;17;18 }),ROW(INDIRECT("1:"&LEN(A1))))) 3、神奇魔术师Mid() ,一个文本变出许许多多。 让事实说话,继续抹抹黑,按F9。开始位置不变,长度依次

增1,形成一个数组,数组的个数等于文本长度(Row()的结果)。后面的会出现相同的情况,没关系,还是不影响结果的。=LOOKUP(9E+307,--MID(A1,3,ROW(INDIRECT("1:"&LEN( A1))))) 4、如果忽略了--,还是功亏一篑。 看看,它的结果会是什么呢? =LOOKUP(9E+307,--{"5";"56";"562";"562.";"562.0";"562.00"; "562.00元";"562.00元";"562.00元"}) 5、Lookup() 总是那么沉着,他闭着眼睛说,我就要最后面那个数字。 =LOOKUP(9E+307,{5;56;562;562;562;562.00;#V ALUE!;#V A LUE!;#V ALUE!}) 9E+307 是一个非常大的数,在任何时候都适用,如果你知道你的文本中最大数的范围,比如1000,文本中的数字不会超过1000的,那么,这个数字你用1000,也是行的,即:Lookup(1000,……) 9E+307是什么概念? 9E+307是科学记数,用普通记数法写是9后面有307个0, 9E+307就是9*10^307 在构思解题思路时,就有,把那串文本从第一个数字开始,

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字

e x c e l中一个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字 公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来?2011-04-13 11:25匿名?|?分类:?|?浏览1375次 如A1中 A本月电费收入(美兰供电所)(对帐标志: 想在B中表示为 最好能教一个方法十分感谢 我有更好的答案 按默认排序| 2条回答 |2011-04-13 11:32|十五级 在EXECL理,按ALT+F11,插入-模块,复制下列语句 Function SplitNumEng(str As String, sty As Byte) Dim StrA As String Dim StrB As String Dim StrC As String Dim i As Integer Dim SigS As String For i = 1 To Len(str) SigS = Mid(str, i, 1)

If SigS Like "[a-zA-Z]" Then StrA = StrA & SigS ElseIf SigS Like "#" Then StrB = StrB & SigS Else StrC = StrC & SigS End If Next i Select Case sty Case 1 SplitNumEng = StrA Case 2 SplitNumEng = StrB Case Else SplitNumEng = StrC End Select End Function 比如你的数据在A1

Excel在大数据中提取特定数据

Excel技巧:在大量数据中提取特定数据 自学考试考生成绩公布了,但上级下发到各报名点的是全地区所有考生的总成绩zcj.dbf,有80多万条记录,5万多名考生,而我们报名点参加考试的只有800多人,怎么从这“茫茫人海”中挑出我们考生的成绩呢? 情况分析 1. 根据zcj.dbf中的字段不能区分各报名点。 2. 我们报名点的考生准考证号并不连续,用附加条件的删除记录方法,不能完全准确地剔除其他报名点考生。 解决方案 1. 先从《高等教育自学考试考务管理系统·报考系统》中导出考生信息,生成文件ks.dbf。 具体方法:启动FoxPro,执行“系统→输出数据”命令,在随即出现的一系列对话框中,依次单击〔选择数据〕、〔生成Select语句〕、〔确定〕、〔提取数据〕按钮,在“数据输出”对话框“数据提取结果”项中,执行鼠标右键菜单“输出(不用于上报下发)”命令(如图1)。在随即出现的“另存为”对话框中,保存类型选择“可重新载入的DBF文件(*.dbf)”,文件名取为“ks”(如图2),单击〔保存〕按钮,退出报考系统。 图1

图2 2. 启动VF6.0,执行“文件→新建”命令,创建数据库tq.dbc。 3. 执行“数据库→添加表”命令,将ks.dbf、zcj.dbf两表添加至数据库tq.dbc (如图3)。 图3 4. 执行“数据库→新建本地视图→视图向导”命令,选择“ks.dbf”表中的“k s_zkz”、“ks_xm”字段和“zcj.dbf”表中的“kc_mc”、“bk_cj”字段作为视图输出时使用的字段(如图4)。 图4

5. 单击〔下一步〕按钮,进入建立表间关系的对话框,单击〔添加〕按钮,将关系表达式“ks.ks_zkz=zcj.ks_zkz”加入到关系列表(如图5)。 图5 6. 单击〔下一步〕按钮,视图输出时包含记录选择“仅包含匹配的行”。 7. 单击〔下一步〕按钮,进入筛选记录的对话框,不进行任何设置。继续单击〔下一步〕按钮,进入排序记录的对话框,单击〔添加〕按钮,将“ks.ks_zkz”添加到“选定字段”列表框,选择“升序”单选按钮(如图6)。 图6 8. 单击〔下一步〕按钮,进入限制记录的对话框,“部分类型”选择“所占记录百分比”,“数量”选择“所有记录”。 9. 单击〔下一步〕按钮,选择“保存本地视图”,单击〔完成〕按钮。在“视图名”文本框中,键入“view”,单击〔确认〕按钮。最终结果如图7。

Excel中英文及数字字符的提取技巧

中英文及数字字符的提取技巧 从混排文字中提取连续数字 如图1-1所示,A列中有一些产品规格型号,其中包含了连续数字,且数字均位于字符串的末尾,数字之后没有其他字符跟随。要从这样的文本字符串中提取连续数字,可在B2单元格中输入以下公式并向下填充: =-LOOKUP(9.9E+307,--RIGHT(A2,ROW($1:$99))) 图1-1 提取连续数字 公式解析: 公式通过依次提取字符串右侧的连续1~n个字符,形成一个数组,然后通过LOOKUP函数可以查找其中最大的数值的功能,找出其中包含连续数字最多的那个数。9.9E+307是科学计数法的表示方式,表示9.9乘以10的307次方,这是Excel里面超级大的一个数,以这个数作为LOOKUP函数的查询对象,只要数组中的数值小于它就能被查询得到。 事实上,这个公式还有不少局限性,例如一些数学符号会对结果产生影响,超过15位有效数字的连续数字也会不能被正确提取等等。 假设目标字符串的数字位于字符串中部,前后都有非数字字符与其相连,如图1-2中A列的型号所示。对于这种情况,在原公式基础上进行一些修改: =LOOKUP(9.9E+307,--MID(A2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A2&1234567890)), ROW($1:$99)))

图1-2 数字位于字符串中部 这个公式通过FIND函数来定位首个数字出现的位置,然后通过MID函数来依次取出连续的1~n个字符。再参照前面公式的思路得到最后结果。 从混排文字中提取连续字母 如图1-3表格所示,A列中有一些车牌编号,其中包含了连续英文字母,且字母均位于字符串的中部。不考虑字母后跟随数字的特殊性,要从这样的文本字符串中提取连续字母,可在B2单元格中输入以下数组公式并向下填充: {=MID(A2,MATCH("z",TEXT(CODE(MID(UPPER(A2),ROW($1:$99),1))-64,"[>26];;z") ,0),COUNT(N(INDIRECT(MID(A2,ROW($1:$99),1)&"1"))))} 图1-3 提取连续英文字母 公式解析: 此公式主体结构是通过MID函数取出字符串中的连续字符,其中包含了两种鉴别英文字母的方法。 CODE(MID(UPPER(A2),ROW($1:$99),1))可以返回字符串中每个字符的ASCII代码,其中在65~90之间的就是英文大写字母的ASCII码。 INDIRECT(MID(A2,ROW($1:$99),1)&"1")部分则是利用了字母+数字的形式在Excel中是

相关文档
最新文档