如何从单元格字符串中提取六位数字?

3

我有一列数据:

New York非常美丽,456983 美食不错
北京很棒 678932,文化很好。
...等等

我想提取其中的六位数字并将其放在原列旁边的一列中。

共有n行。

是否有一种公式的方式可以做到这一点,而不需要使用VBA?


@Carol 我已经尝试过了,但没有得到任何帮助...即使是从之前提出的堆栈交换问题中。 - pan dong
4个回答

5

如果没有VBA,您可以使用以下Excel公式,假设A1是包含文本的单元格。

=MID(A1,FIND("------",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"0","-"),"1","-"),"2","-"),"3","-"),"4","-"),"5","-"),"6","-"),"7","-"),"8","-"),"9","-")),6)

这个能适用于单元格中的任何文本和6位数字吗? - pan dong
@pandong 是的,除非你的文本包含 ------(6个破折号),例如 ------ 真的很好,456983 好吃的食物。 - cbasah
非常感谢,我实现并检查后会通知您并接受您的答案。 - pan dong

2
这个公式适用于您提供的两个例子: =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&1234567890)),6)

@ barry houdini 谢谢 - pan dong
这个几乎可以工作,但是在像“New York 64 is really nice, 456983 Good food”这样的字符串上失败了(它找到了“64 rea”,而不是6位整数)。OP要求在字符串中找到“唯一的6位整数”,但没有指定它必须是字符串中的第一个/唯一的整数,只是说字符串只能包含一个6-d整数。如果您知道字符串仅包含一个整数(且该整数为6-d),或者6-d整数将始终是字符串中的第一个整数,则此方法非常有效,因为它只查找前缘。在我的用例中,这是可以接受的,因此仍然有帮助。 - mschultz
我需要从完整的注释中提取5位数字的工作号码,类似于邮政编码“30005”...非常完美地解决了问题,比许多帖子都要小得多...谢谢。 - zzipper72

0

这对我有用。这将查找字符串中的所有数字。-您当然可以添加限制。

Sub numberExtract()
    x = ActiveCell
    Dim valIs As String
    Dim a As String
    For i = 1 To Len(x)
        a = Mid(x, i, 1)
        If IsNumeric(a) Then
            valIs = valIs & a
        End If
    
    Next i
    MsgBox valIs
End Sub

1
请确保所有代码都在框内。在文本结束和代码开始之间留一行空格。 - QHarr
令人烦恼的是,它无法按要求格式化代码。 - gavin

0

你可以使用这个,输入为数组公式:

=MID(A2,MIN(IFERROR(FIND({0,1,2,3,4,5,6,7,8,9},A2),"")),SUMPRODUCT(--ISNUMBER(MID(A2,ROW($A$1:$A$200),1)+0)))

谢谢,但我打算接受我先前收到的答案。 - pan dong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接