Excel 2007查找文本字符串中的最大数字

Excel 2007查找文本字符串中的最大数字,excel,excel-formula,excel-2007,Excel,Excel Formula,Excel 2007,我有Excel 2007。我试图在包含以下内容的单元格中查找最大的数字: [[E:\DATA\SQL\SY0\,19198],[E:\,18872],[E:\DATA\SQL\ST0\,26211],[E:\DATA\SQL\ST1\,26211],[E:\DATA\SQL\SD0\,9861],[E:\DATA\SQL\SD1\,11220],[E:\DATA\SQL\SL0\,3377],[E:\DATA\SQL\SL1\,1707],[E:\DATA\SQL\SS0\,14375],[E:

我有Excel 2007。我试图在包含以下内容的单元格中查找最大的数字:

[[E:\DATA\SQL\SY0\,19198],[E:\,18872],[E:\DATA\SQL\ST0\,26211],[E:\DATA\SQL\ST1\,26211],[E:\DATA\SQL\SD0\,9861],[E:\DATA\SQL\SD1\,11220],[E:\DATA\SQL\SL0\,3377],[E:\DATA\SQL\SL1\,1707],[E:\DATA\SQL\SS0\,14375],[E:\DATA\SQL\SS1\,30711]]

我不是一个编码员,但我可以通过一些基本的指示。如果有一个公式可以做到这一点,太好了!如果最好的方法是使用某种后端代码,请告诉我。谢谢你抽出时间

我有下面的公式几乎可以让我达到目的:

=SUMPRODUCT(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN($A$2))),1))*ROW(INDIRECT("1:"&LEN($A$2))),0),ROW(INDIRECT("1:"&LEN($A$2))))+1,1)*10^ROW(INDIRECT("1:"&LEN($A$2)))/10)
对于包含如上所述字符串的单元格,它将正常工作。但是,使用包含以下内容的字符串:

[[E:\DATA\SQL\SY0\,19198.934678],[E:\,18872.2567]]


我最终得到的最大值是19198934678。

其中c是查找max的字符串

Dim qwe() As String
qwe = Split(c, ", ")
maxed = 0
For x = LBound(qwe) To UBound(qwe)
    qwe(x) = Left(qwe(x), InStr(1, qwe(x), " ", vbBinaryCompare))
    On Error Resume Next
    If CLng(qwe(x)) > maxed Then maxed = CLng(qwe(x))
Next x
    MsgBox maxed
当qwe(x)无法转换为长数值时,错误行可以忽略


我必须说,这是非常具体的字符串格式,对于更全面的dooda,您希望将分割分隔符作为变量,并可能使用“IsNumeric”函数扫描整个字符串。

其中c是查找max的字符串

Dim qwe() As String
qwe = Split(c, ", ")
maxed = 0
For x = LBound(qwe) To UBound(qwe)
    qwe(x) = Left(qwe(x), InStr(1, qwe(x), " ", vbBinaryCompare))
    On Error Resume Next
    If CLng(qwe(x)) > maxed Then maxed = CLng(qwe(x))
Next x
    MsgBox maxed
当qwe(x)无法转换为长数值时,错误行可以忽略


我必须说,这是非常具体的字符串格式,对于更全面的dooda,您希望将分割分隔符作为变量,并可能使用“IsNumeric”函数扫描整个字符串。

如果前后始终有空格,您可以使用此公式。该公式是一个数组公式,必须在按住ctrl+shift键的同时按enter键进行确认

使用A1中的字符串:

=MAX(IFERROR(--TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",99)),IF(seq=1,1,(seq-1)*99),99)),0))
seq
是一个定义名称,指:

=行(索引(Sheet1!$1:$65536,1,1):索引(Sheet1!$1:$65536255,1))

如果VBA UDF更可取,我建议如下。正则表达式将匹配任何可能是数字的内容。数字的格式应为iiii.dddd。整数部分和小数点都是可选的

Option Explicit
Function LargestNumberFromString(S As String) As Double
    Dim RE As Object, MC As Object, M As Object
    Dim D As Double
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .Pattern = "\b[0-9]*\.?[0-9]+\b"
    If RE.test(S) = True Then
        For Each M In MC
            D = IIf(D > CDbl(M), D, CDbl(M))
        Next M
    End If
End With
End Function

如果前后始终有空格,则可以使用此公式。该公式是一个数组公式,必须在按住ctrl+shift键的同时按enter键进行确认

使用A1中的字符串:

=MAX(IFERROR(--TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",99)),IF(seq=1,1,(seq-1)*99),99)),0))
seq
是一个定义名称,指:

=行(索引(Sheet1!$1:$65536,1,1):索引(Sheet1!$1:$65536255,1))

如果VBA UDF更可取,我建议如下。正则表达式将匹配任何可能是数字的内容。数字的格式应为iiii.dddd。整数部分和小数点都是可选的

Option Explicit
Function LargestNumberFromString(S As String) As Double
    Dim RE As Object, MC As Object, M As Object
    Dim D As Double
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .Pattern = "\b[0-9]*\.?[0-9]+\b"
    If RE.test(S) = True Then
        For Each M In MC
            D = IIf(D > CDbl(M), D, CDbl(M))
        Next M
    End If
End With
End Function

对于没有编程背景的人来说,这将是一个相当复杂的答案,因此,如果您真的希望实现一个在excel中查找字符串中最大数字的函数,请准备花费大量时间来涵盖和研究此主题

解决方案,需要使用和 当需要使用内置电子表格功能无法实现的更复杂功能时,VBA将在excel中使用。 正则表达式是一种告诉程序如何从文本中提取有用信息的语言,在这种情况下,我们可以提取文本中的所有数字。使用以下正则表达式

(\d+。?\d*)/g

这大致意味着:将一个或多个数字与可选句点和后续可选数字匹配。 解释这一点的程序将执行以下操作:查找数字,如果您看到一个,则这是一个匹配,获取所有连续的数字并将它们添加到匹配中。一旦您找到一个不是数字的字符,就开始寻找新的匹配项。如果你在任何一点上找到了一个点,把它添加到匹配中,但只需一次,然后继续寻找数字。冲洗并重复,直到文字结束

你可以在这里测试。在本例中,正则表达式匹配19个数字

一旦您有了一个包含19个匹配项的集合(请参阅正则表达式链接),您所需要做的就是在每个匹配项上循环,以找出哪个数字最高:

for each number in matches
    if number > highestNumber then
        highestNumber = number
    end if
next

结果将是最高的数字!为了让这段代码在一个简单的自定义函数中运行,您可以遵循本microsoft教程()

对于没有编程背景的人来说,这将是一个相当复杂的答案,因此,如果您真的希望实现一个在excel中查找字符串中最大数字的函数,请准备花费大量时间来涵盖和研究这个主题

解决方案,需要使用和 当需要使用内置电子表格功能无法实现的更复杂功能时,VBA将在excel中使用。 正则表达式是一种告诉程序如何从文本中提取有用信息的语言,在这种情况下,我们可以提取文本中的所有数字。使用以下正则表达式

(\d+。?\d*)/g

这大致意味着:将一个或多个数字与可选句点和后续可选数字匹配。 解释这一点的程序将执行以下操作:查找数字,如果您看到一个,则这是一个匹配,获取所有连续的数字并将它们添加到匹配中。一旦您找到一个不是数字的字符,就开始寻找新的匹配项。如果你在任何一点上找到了一个点,把它添加到匹配中,但只需一次,然后继续寻找数字。冲洗并重复,直到文字结束

你可以在这里测试。在本例中,正则表达式匹配19个数字

一旦您有了一个包含19个匹配项的集合(请参阅正则表达式链接),您所需要做的就是在每个匹配项上循环,以找出哪个数字最高:

for each number in matches
    if number > highestNumber then
        highestNumber = number
    end if
next
最高数字