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

我有Excel 2007年。我试图find包含如下所示的单元格中的最大数字:

[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$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) 

使用包含上面的string的单元格,它将起作用。 但是,使用包含以下内容的string:

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

最终的价值是19198934678。

你可以使用这个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 

把它放在连接到工作簿的模块中。 不在工作表或ThisWorkbook代码中。

那么你可以像任何其他公式一样称呼它:

= MaxInString(A1)

在这里输入图像说明

如果之前和之后总是有空格,则可以使用此公式。 该公式是一个数组公式,并且必须通过按住Ctrl + Shift同时按Enter来确认

用你的stringA1:

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

seq是一个定义的名字,指的是:

=ROW(INDEX(Sheet1!$1:$65536,1,1):INDEX(Sheet1!$1:$65536,255,1))

如果VBA UDF更好,我build议如下。 正则expression式将匹配任何可能是一个数字。 数字预期为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中find一个string中最大的数字,那么准备花大量的时间来研究这个话题。

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

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

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

你可以在这里testing它。 在这种情况下,正则expression式匹配19个数字。

http://www.regextester.com/

一旦你有了19个匹配的集合(见正则expression式的链接),你所需要做的就是遍历每个匹配,找出哪个数字是最高的:

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

最高的数字将是结果! 为了让这个代码运行在一个简单的自定义函数中,您可以按照这个微软教程( https://support.office.com/zh-cn/article/Create-Custom-Functions-in-Excel-2007-2f06c10b- 3622-40d6-a1b2-b6748ae8231f?ui = en-US&rs = en-US&ad = US&fromAR = 1 )

其中c是你的string来查找最大值

 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数字时,错误行将被忽略。

我必须说这是非常具体到你的string格式,一个更全面的装饰品,你希望将分隔符作为variables,并可能使用“IsNumeric”函数来扫描整个string。