如何在使用Excel公式或VBA的字符串中获取十进制(REAL)数字?

时间:2018-02-26 19:36:30

标签: excel excel-vba excel-formula vba

需要帮助:如何获取十进制(REAL)数字仅在使用Excel公式或VBA的字符串中? 我在“A列”中有一个只有一个十进制数字的字符串。我想仅提取该十进制(REAL)数字,但它正在提取字符串上的第一个数字。请参阅下面的详细信息......

现状:

我在B栏上使用公式:

=LOOKUP(9.9E+307,--LEFT(MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0}, $A1&"1023456789")),999),ROW(INDIRECT("1:999"))))

Column A                                                        |  Column B
"Some text"... The Value of Project 456 is 12.56 ... more text. | 456
Some Text"... Project 459 value is 13.5 ... "more text"         | 459

期望情况:

我想从字符串中获取十进制(REAL)数字,并忽略A列中不包含小数的数字。示例:

Column A                                                        |  Column B
"Some text"... The Value of Project 456 is 12.56 ... more text. | 12.56
Some Text"... Project 459 value is 13.5 ... "more text"         | 13.5

需要任何帮助,可以是excel公式或VBA解决方案。

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试将此UDF粘贴到标准公共模块代码表中。

Function realNum(str As String, _
                  Optional ndx As Integer = 1)
    Dim tmp As String
    Static rgx As Object

    'with rgx as static, it only has to be created once; beneficial when filling a long column with this UDF
    If rgx Is Nothing Then
        Set rgx = CreateObject("VBScript.RegExp")
    End If
    realNum = 0

    With rgx
        .Global = True
        .IgnoreCase = True
        .MultiLine = True
        .Pattern = "[0-9]{1,9}\.[0-9]{1,9}"
        If .Test(str) Then
            realNum = CDbl(.Execute(str)(ndx - 1))
        End If
    End With
End Function

请注意,虽然它默认为第一次出现(例如B2),但您可以应用可选参数来获取第二个,第三个等(例如B3)。

enter image description here

答案 1 :(得分:1)

此数组公式将对每个搅拌中包含.的所有数字求和。如果每个字符串只有一个,那么它只返回那个:

=SUM(IF((ISNUMBER(--TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",99)),ROW($1:$25)*99-98,99)))) * (ISNUMBER(FIND(".",TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",99)),ROW($1:$25)*99-98,99))))),--TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",99)),ROW($1:$25)*99-98,99))))

作为数组公式,必须在退出编辑模式时使用Ctrl-Shift-enter而不是Enter确认:

enter image description here