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

Excel 2007 find the largest number in text string

我有 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_Support\SS0\ , 14375 ],[ E:\DATA\SQL_Support\SS1\ , 30711 ]]

我不是编码员,但我可以通过一些基本说明来完成。如果有一个公式可以做到这一点,那就太好了!如果执行此操作的最佳方法是某种后端代码,请告诉我。谢谢你的时间。

我确实有以下公式几乎可以让我到达那里:

=SUMPRODUCT(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN($A))),1))*ROW(INDIRECT("1:"&LEN($A))),0),ROW(INDIRECT("1:"&LEN($A))))+1,1)*10^ROW(INDIRECT("1:"&LEN($A)))/10)

对于包含上述字符串的单元格,它将起作用。但是,使用包含以下内容的字符串:

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

我最终会得到最大值 19198934678。

其中 c 是要从中查找最大值的字符串

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) 无法转换为 LONG 数字时,可以忽略错误行。

我必须说这是非常特定于您的字符串格式的,对于更全面的装饰,您希望将分隔符作为变量并可能使用 "IsNumeric" 函数来扫描整个字符串。

如果前后总有一个space,可以用这个公式。该公式是一个数组公式,必须通过按住 ctrl + shift 的同时按 enter[ 来确认=14=]

A1 中的字符串:

=MAX(IFERROR(--TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",99)),IF(seq=1,1,(seq-1)*99),99)),0))

seq 是定义的名称,指的是:

=ROW(INDEX(Sheet1!:536,1,1):INDEX(Sheet1!:536,255,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 and Regular expressions 当需要使用内置电子表格函数无法实现的更复杂功能时,VBA 用于 excel。 正则表达式是一种用于告诉程序如何从文本中提取有用信息的语言,在这种情况下我们可以提取文本中的所有数字。使用以下正则表达式。

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

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

你可以在这里测试。在这种情况下,正则表达式匹配 19 个数字。

http://www.regextester.com/

一旦你有了一个包含 19 个匹配项的集合(参见 link 正则表达式),你需要做的就是遍历每个匹配项以找出哪个数字是最高的:

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

highestNumber 将是结果!为了在简单的自定义函数中使用此代码 运行,您可以遵循此 Microsoft 教程 (https://support.office.com/en-us/article/Create-Custom-Functions-in-Excel-2007-2f06c10b-3622-40d6-a1b2-b6748ae8231f?ui=en-US&rs=en-US&ad=US&fromAR=1)

您可以使用这个 UDF:

Function MaxInString(rng As String) As Double
Dim splt() As String
Dim i&

splt = Split(rng)
For i = LBound(splt) To UBound(splt)
    If IsNumeric(splt(i)) Then
        If splt(i) > MaxInString Then
            MaxInString = splt(i)
        End If
    End If
Next i
End Function

将其放入工作簿附带的模块中。 NOT 在工作表或 ThisWorkbook 代码中。

然后您可以像调用任何其他公式一样调用它:

=MaxInString(A1)