我在 Excel 中有一个如下所示的列:
Census Tract 2941.10 (part), Carson city, Compton CCD, Los Angeles County, California
Census Tract 5410.02, Carson city, Compton CCD, Los Angeles County, California
Census Tract 5431 (part), Carson city, Compton CCD, Los Angeles County, California
Census Tract 5432.02 (part), Carson city, Compton CCD, Los Angeles County, California
Census Tract 5433.04, Carson city, Compton CCD, Los Angeles County, California
我需要提取 2941.10、5410.02、5431 等...我尝试了以下公式:=MID(E4,MATCH(TRUE,ISNUMBER(1*MID(E4,ROW($3:$606),1)),0),COUNT(1*MID(E4,ROW($3:$606),1)))
但是,数字中间的小数导致最后两个数字被截断。并非所有数字都有小数,并且数字后的文本量因行而异(因此左公式和右公式不是选项)。我必须使用 excel 公式,而不是 VBA/宏。
有什么建议么?
答案1
用这个:
=--TRIM(SUBSTITUTE(MID(SUBSTITUTE(A1," ",REPT(" ",999)),2*999,999),",",""))
上述公式假设数字始终是文本中的第三个“单词”。如果不是这样和每个字符串只有一组数字,您可以使用此数组公式:
=SUM(IFERROR(--TRIM(SUBSTITUTE(MID(SUBSTITUTE(A1," ",REPT(" ",999)),(ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-1)*999+1,999),",","")),0))
作为数组公式,退出编辑模式时需要使用 Ctrl-Shift-Enter 而不是 Enter 进行确认。如果操作正确,Excel 会将{}
公式放在一边。
它遍历单词并返回所有数字组的总和,并且由于只有一个数字组,所以它只返回该数字组。
答案2
编辑: 我删除了我的第一个答案,因为我意识到你可能想要返回一串数字,包括前导 0 或尾随 0,并且至少可以想象数字串可能长于 15 位数字。
因此,以下公式将数字作为文本字符串返回,并保留所有前导零和尾随零。例如,2941.10
将按原样返回,而不是按2941.1
这是一个公式解决方案
首先定义seq
为命名公式:
seq Refers To: =ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))
seq
将返回一个数字数组与返回数组的方法{1...255}
不同ROW(INDIRECT(...
,此公式是非易失性的。
然后你可以使用这个数组公式,通过按住ctrl+shift并点击来输入enter
=MID(A1,MATCH(TRUE,ISNUMBER(-MID(A1,seq,1)),0),LOOKUP(2,1/ISNUMBER(-MID(A1,seq,1)),seq)-MATCH(TRUE,ISNUMBER(-MID(A1,seq,1)),0)+1)
或者,你可以使用这个稍长但通常输入的公式:
=MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LOOKUP(2,1/ISNUMBER(-MID(A1,seq,1)),seq)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))+1)
如果像你的例子一样,数字序列总是从第 14 位开始,那么您可以使用这个简化的、通常输入的公式:
=MID(A1,14,LOOKUP(2,1/ISNUMBER(-MID(A1,seq,1)),seq)-13)