从Excel中的非数值移除前导零的最佳方法


13

我在Excel工作表中有很多单元格,使用9个0-9和AZ字符,其中包含一些前缀零:

000000123 
000001DA2 
0000009Q5
0000L210A
0000014A0
0000A5500
00K002200

我想删除前导零,以便值变为:

123 
1DA2 
5Q9
L210A
14A0
A5500
K002200

我将如何在Excel公式中执行此操作?我宁愿避免使用VBA宏。


如果数据上还有其他矛盾之处,我也许可以提出更具体的解决方案。
Lance Roberts

谢谢。这些值具有前导零,因此总共为9个字符。除此之外,这些值是由0-9的数字字符串和大写字母AZ混合而成。可能存在尾随零,并且该尾随零是实际值的一部分,不应进行修剪。
克里斯·法默

明确地说,从来没有嵌入的空间。只有0-9和AZ。
克里斯·法默

编辑为包括那些结尾为零的示例
克里斯·法默

@Chris,如果我们知道将出现在字符串中或在字符串之后出现的最大零个数,则可以这样做(尽管这将是一个很长的公式)。
兰斯·罗伯茨

Answers:


14

这是一个占用大量细胞但正确的解决方案。

将您的数据放在A列中。

在B1中,输入公式:

=IF(
    LEFT(A1) = "0" ,
    RIGHT(A1, LEN(A1)-1),
    A1)

这将检查单个前导零并将其删除。

将此公式复制到尽可能多的列中,以使数据中可以包含字符(在这种情况下为9,因此将转到J列)。向下复制每一行数据。

最后一列包含您的数据,除去前导零。


经过多次尝试,这是唯一无需借助VBA即可运行的版本。
skamradt

@Richard的评论:我喜欢以撒的解决方案。如果有多个前导零,请继续从包含他的公式并粘贴值的单元格复制到原始单元格:每次都会剥离另一个前导零(如果有)。
Ivo Flipse

8

以下公式既不需要其他单元格,也不必作为数组公式输入:

=RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(A1&" ","0",""),1),A1&" ")+1)

如果对于类似0或的字符串应返回一个零00,则可以使用以下公式:

=IF(A1="","",RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(LEFT(A1,LEN(A1)-1)&" ","0",""),1),LEFT(A1,LEN(A1)-1)&" ")+1))

该答案适用于多个前导零,并且似乎是此处提到的答案中最完整,最简单的答案。
彼得

5

对于工作表功能,这是一个棘手的问题。下面的方法可以解决问题,但前提是没有出现的零一次只能出现一个,并且没有尾随零,也没有嵌入空格。

它用空格替换所有零,修剪它们(除嵌入的单个空格以外的所有空格),然后替换回零。

=SUBSTITUTE(TRIM(SUBSTITUTE(A1,"0"," "))," ","0")

为什么只有不加零的零点一次只出现一个呢?以及如何处理=CLEAN(SUBSTITUTE(TRIM(SUBSTITUTE(A1 & CHAR(9),"0"," "))," ","0"))(希望CLEAN将删除Tabs;否则,请使用)中的其他值CHAR
Arjan

@Arjan,我测试了TRIM,它确实用一个空格代替了嵌入的多个空格,但是现在我将研究您的信息,看看能找到什么。(我正在使用2003)。
Lance Roberts

CLEAN函数可以保存嵌入的空间,但也可以保存除第一个前导空间以外的所有空间。
Lance Roberts

我添加了CLEAN来删除我添加的CHAR(9);在TRIMmed值上使用CLEAN不应有前导空格...?
Arjan

是的,但是当将CHAR(9)添加到(每个零)时,它也将自己添加到了前导零。我看到您仅使用它来保存尾随零,并将其合并到答案中。
Lance Roberts

5

此解决方案适用于所有正好为9个字符的输入值。

首先建立一个固定的十行表,其中包含以下数字格式为文本。

000000000

000000001

000000010

000000100

000001000

000010000

000100000

001000000

010000000

1亿

假设表格位于A1到A10单元格中

假设您的输入值在单元格B1中,结果单元格在C1中

在单元格C1中使用以下公式

=右(B1,MATCH(B1,$ A $ 1:$ A $ 10,1)-1)


聪明!至于MATCH函数中的第三个参数:1 =查找小于或等于lookup_value的最大值
Arjan

4

对于A1中的数据,请使用以下公式:

= RIGHT(A1,LEN(A1)-MAX((FINDB(REPT(“ 0”,ROW(A $ 1:A $ 100)),A1&“-”&REPT(“ 0”,100))= 1)* ROW(A $ 1:A $ 100)))

通过Ctrl + Shift + Enter输入。它适用于最多100个字符的字符串。


哇!一些小注意事项:Ctrl-Shift-Enter(在Mac上为Cmd-Shift-Return)创建数组公式。照常粘贴公式,但不要按Enter,而是按Ctrl-Shift-Enter进行保存。然后它将显示在花括号之间。在Mac上的OpenOffice.org中,我无法向下拖动下一行的公式(因为这样会产生一些超级数组公式)。但是复制和粘贴确实可以,所以我敢肯定还有一些捷径。而且OpenOffice.org不知道FINDB;使用FIND似乎也可以。
Arjan

优雅的解决方案!
威尔逊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.