excel从字符串中提取数字——数字位于字符串开头

excel从字符串中提取数字——数字位于字符串开头

浏览次数:280890次
信息来源: 银河系资源网
更新日期: 2022-05-06
文章简介

本文主要研究从字符串开头提取数字的技术:1. 这些数字是连续的2. 这些连续的数字位于字符串的开头3. 想要的结果是将这些连续的数字返回到单个单元格对于下面研究的每种解决方案,我们需要在两种不同的情况下测试其健...

本文主要研究从字符串开头提取数字的技术:

1. 这些数字是连续的

2. 这些连续的数字位于字符串的开头

3. 想要的结果是将这些连续的数字返回到单个单元格

对于下面研究的每种解决方案,我们需要在两种不同的情况下测试其健全性:

1. 字符串中除开头外其他地方没有数字的情况,例如123ABC。

2. 字符串中除开头外其他地方也有数字,要么在末尾,要么在中间,例如123ABC456或123ABC456DEF。

无论字符串中除开头外是否还有其他数字,将要研究的某些解决方案都可以很好地工作,但有些解决方案则存在局限性。在分析每种解决方案时,将会明确说明。

LOOKUP与LEFT

公式1:

=-LOOKUP(1,-LEFT(A1,ROW(INDIRECT(“1:”& LEN(A1)))))

如果单元格A1中的内容为“123ABC”,那么上述公式1返回“123”。其解析过程如下:

ROW(INDIRECT(“1:” & LEN(A1)))

生成一个由1至单元格A1中字符串长度数的整数组成的单列数组:

{1;2;3;4;5;6}

这样,公式1变为:

=-LOOKUP(1,-LEFT(A1,{1;2;3;4;5;6}))

由于LOOKUP强制生成数组,因此LEFT在这里不是返回单个值,而是返回由六个值组成的数组,每个值对应于将LEFT的num_chars参数指定为1、2、3、4、5、6应用于A1中的字符串,即:

=-LOOKUP(1,-{“1″;”12″;”123″;”123A”;”123AB”;”123ABC”})

其中的数组乘以-1,得到:

=-LOOKUP(1,{-1;-12;-123;#VALUE!; #VALUE!; #VALUE!})

对于LOOKUP来说,如果在lookup_vector中未找到lookup_value,并且假设lookup_vector中没有大于lookup_value的值,则该函数将从lookup_vector中返回最后一个值(本例中为数字)。该函数还会忽略lookup_vector中的任何错误值。这就是在开始给lookup_vector(通过创建一个由负数、零(如果期望提取的字符串以0开头例如0123ABC)或错误值组成的数组)中的值添加负号的原因,可以确保lookup_value为1永远是一个充分而合法的选择。在这里,由于在lookup_vector中找不到1,公式返回数组中最后一个数值,即-123。

当然,这绝对不是处理这种公式结构的唯一方法,只要确保选择的lookup_value的值足够大。其实这并不困难,让lookup_value使用所谓的“大数”(即9.99999999999999E+307,这是Excel中允许的最大正数),确保这种公式构造有效。或者,有些人喜欢仅取“非常大”的值,例如10^10(其好处是看起来不像“大数”那么笨拙)。

由于公式1中LOOKUP函数返回-123,因此在前面添加一个负号使其变为想要的123。

但是,公式1并不可靠。因为某些字符串可能会返回其他结果,例如单元格中的值为12JUN,那么:

=-LOOKUP(1,-LEFT(A1,ROW(INDIRECT(“1:”& LEN(A1)))))

转换为:

=-LOOKUP(1,-LEFT(A1,{1;2;3;4;5}))

转换为:

=-LOOKUP(0,-{“1″;”12″;”12J”;”12JU”;”12JUN”})

此时,会转换为:

=-LOOKUP(0,{-1;-12;#VALUE!;#VALUE!;-43994})

这是由于在强制将“12JUN”转换成数字时,Excel认为其是日期“2020-6-12”,因此将其转换为相应的序列数字。此时,LOOKUP函数返回-43994。

当然,这不是唯一会出现这种情况的字符串,实际上,任何可以被Excel解释为日期的字母数字都会如此,例如30SEP、01FEB等,这也会导致不正确的结果。

此外,公式1对于诸如123E3等形式的字符串也无效,其结果将是123000。因为在通常情况下,将123E3输入单元格后,Excel会自动将其转换成科学计数格式。

LEFT与COUNT

公式2:

=0+LEFT(A1,COUNT(0+MID(A1,ROW(INDIRECT(“1:”&LEN(A1))),1)))

这是一个数组公式。

仍以单元格A1中的数据是“123ABC”为例。公式2可以转换为:

=0+LEFT(A1,COUNT(0+MID(A1,{1;2;3;4;5;6},1)))

转换为:

=0+LEFT(A1,COUNT(0+{“1″;”2″;”3″;”A”;”B”;”C”}))

转换为:

=0+LEFT(A1,COUNT({1;2;3;#VALUE!;#VALUE!;#VALUE!}))

COUNT函数忽略错误值,得到:

=0+LEFT(A1,3)

结果为:

123

下面,尝试一个公式2可不可以处理除字符串开头外其他位置还存在数字的情形,例如如果单元格A1中的数据是“123ABC45”,那么公式2可以转换为:

=0+LEFT(A1,COUNT(0+MID(A1,{1;2;3;4;5;6;7;8},1)))

转换为:

=0+LEFT(A1,COUNT(0+{“1″;”2″;”3″;”A”;”B”;”C”;”4″;”5″}))

转换为:

=0+LEFT(A1,COUNT({1;2;3;#VALUE!;#VALUE!;#VALUE!;4;5}))

转换为:

=0+LEFT(A1,5)

转换为:

=0+”123AB”

结果为:

#VALUE!

原因是字符串的末尾有其他数字,因此COUNT函数统计的数字个数大于字符串开头的数字个数,这样LEFT取值仍是字母数字混合的字符串。

LEFT、MATCH与ISNUMBER

公式3:

=0+LEFT(A1,MATCH(FALSE,ISNUMBER(0+MID(A1,ROW(INDIRECT(“1:”& LEN(A1))),1)),0)-1)

这是一个数组公式。

仍以单元格A1中的数据为“123ABC”,公式3可转换为:

=0+LEFT(A1,MATCH(FALSE,ISNUMBER({1;2;3;#VALUE!;#VALUE!;#VALUE!}),0)-1)

对于ISNUMBER函数来说,传递给它的如果是错误值则返回FALSE,因此上述公式可转换为:

=0+LEFT(A1,MATCH(FALSE,{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE},0)-1)

转换为:

=0+LEFT(A1,4-1)

转换为:

=0+LEFT(A1,3)

结果为:

123

在公式3中,MATCH/ISNUMBER组合确保字符串中除开头以外的数字不会影响最终的结果。例如如果单元格A1中的数据是“123ABC45”,那么公式3可以转换为:

=0+LEFT(A1,MATCH(FALSE,ISNUMBER({1;2;3;#VALUE!;#VALUE!;#VALUE!;4;5}),0)-1)

转换为:

=0+LEFT(A1,MATCH(FALSE,{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE},0)-1)

转换为:

=0+LEFT(A1,4-1)

转换为:

=0+LEFT(A1,3)

结果为:

123

LEFT、MATCH与ISERR

与公式3的构造一致,唯一的不同是使用ISERR函数代替了ISNUMBER函数,并强制返回由数字组成的数组。

公式4:

=0+LEFT(A1,MATCH(1,0+ISERR(0+MID(A1,ROW(INDIRECT(“1:”& LEN(A1))),1)),0)-1)

这是一个数组公式。

仍以单元格A1中的数据为“123ABC”,公式4可转换为:

=0+LEFT(A1,MATCH(1,0+ISERR({1;2;3;#VALUE!;#VALUE!;#VALUE!;4;5}),0)-1)

转换为:

=0+LEFT(A1,MATCH(1,0+{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE},0)-1)

转换为:

=0+LEFT(A1,MATCH(1,{0;0;0;1;1;1;0;0},0)-1)

转换为:

=0+LEFT(A1,4-1)

转换为:

=0+LEFT(A1,3)

结果为:

123

与公式3一样,字符串中除开头有数字外其它部位存在数字时不影响结果。

标签: 暂无标签
excel从字符串中提取数字——数字位于字符串末尾
« 上一篇
excel图表怎么将十进制数转换成指定进制的数
下一篇 »
  • 如何计算同一单元格中的Excel数据的公式和?
    750399阅读
    在某些表格中,我们需要将所有数据输入到一个单元格中来计算公式,而通用公式是在不同的单元格中计算的。我们应该如何计算这种情况?在这里,小王先生将与大家分享几种常用的方法。1.用户定义的名称首先,输入公式定...
  • 按日期记录的产品销量,SUMIFS帮你按月统计
    703253阅读
    今天,朋友传来EXCEL文件,内有两张工作表,一张是按照日期记录的商品销量,另一张是按月统计的模板,请帮忙统计每种产品的月销量。商品销量记录表:按月统计的模板:关键操作第一步:TEXT函数建立辅助列在日期列前插...
  • excel按类别分页打印,有时需要强制
    129524阅读
    今天,就有位朋友提出一个很实用的问题:有时候需要按照类别打印,比如以下数据样表,需要按地区分页打印:怎么办?两种方法:一、筛选后打印这种方法,可能大家都会用到:先按照不同地区筛选,筛选一次打印一次。如...
  • Excel表格日期公式和快捷技巧教程
    100535阅读
    Excel表格日期公式和快捷技巧教程1.excel日期的快捷键方法。首先,让我们介绍快捷键的方法(不需要公式)。方法很简单,在细胞里,同时按两个快捷键:Ctrl你可以得到当前日期。注意:1)不需要输入号码。2)其中;在英文...
  • excel公式教程:找到和的加数
    79914阅读
    有时候,我们给出一个目标值,想要知道这个值是已经提供的一系列值中哪几个值的和。如下图1所示,在单元格A2中给出了目标值47,在单元格C1:K1中有9个值,现在我们想知道这些值中哪些值相加等于47,在这些值的下方单元...
  • Excel中F8键的妙用
    47120阅读
    键盘上的键有什么用呢?今天我们一起来看看键在excel表中能发挥什么作用呢?1、使用F8键的功能选取单元格区域:比如:我要选中区域B2:D7这还不简单啊,直接用鼠标选取就行啦,对,没错,但是除了使用鼠标直接选取外,...
  • Excel中Rank函数排名
    31078阅读
    EXCEL中有一个很神奇的函数“RANK”,他能够将数字的排名单独显示在另一列,而且可以去除重名次。所显示的结果是有多少人就显示多少名。下面小编就来与大家分享一下,希望对大家有点帮助。1.返回一列数字的数字排位。...
  • “Excel批处理”成批修改文件名 以帮助您组织文件!
    30770阅读
    操作方法步骤1:首先定义名称,引用位置是[=FILES(‘D:\ my folder \ *。docx ‘)];自己设置驱动器号路径!查看您需要组织文件夹的位置,并设置它!然后,在单元格A1中输入[=INDEX(名称,行(A1))]的引...
  • Excel一学就会的饼图制作技巧
    19836阅读
    如何用饼图来展示任务完成百分比。先看效果:要实现这样的效果,其实很简单,接下来咱们就看看具体的操作过程:步骤1 准备数据源B1单元格中输入完成率,B2单元格中输入公式计算剩余量:=1-B1步骤2 插入饼图步骤3 设置...
  • Lookup函数经典的14种用法
    16833阅读
    在Excel查找函数中,Lookup是神一样的存在,它可以实现很多Vlookup无法完成的查找。今天小编带大家一起盘点一下它的14种最经典用法。1、普通查找(已排序)如果表格已按A列排序,可以直接用Lookup查找【例】查找香蕉...

如本文对您有帮助,随意赞赏一下!