我有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$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的值作为最大值。
答案 0 :(得分:1)
如果前后总是有空格,您可以使用此公式。该公式是一个数组公式,必须通过按住 ctrl + shift 确认,同时按输入
你的字符串在A1:
=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,我建议如下。正则表达式将匹配任何可能是数字的东西。预计数字的格式为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
答案 1 :(得分:1)
对于没有编程背景的人来说,这将是一个相当复杂的答案,所以如果你真的希望实现一个能够找到字符串中最大数字的函数,那么请准备好花大量时间来研究和讨论这个主题。 Excel中。
解决方案需要使用VBA和Regular expressions 当需要使用内置电子表格函数无法实现的更复杂功能时,在Excel中使用VBA。 正则表达式是一种用于告诉程序如何从文本中提取有用信息的语言,在这种情况下,我们可以提取文本中的所有数字。使用以下正则表达式。
(\ d +。?\ d *)/ G
大致意味着:将一个或多个数字与可选句点和后续可选数字匹配。 解释它的程序将执行以下操作:查找数字,如果您看到数字,那么这是一个匹配,抓取所有连续数字并将它们添加到匹配中。找到不是数字的字符后,开始寻找新的匹配项。如果在任何时候你找到一个点,将它添加到匹配,但只需一次,并继续寻找数字。冲洗并重复,直到文本结束。
你可以在这里测试一下。在这种情况下,正则表达式匹配19个数字。
一旦你有一个包含19个匹配项的集合(参见正则表达式的链接),你需要做的就是遍历每个匹配项以找出哪个数字最高:
for each number in matches
if number > highestNumber then
highestNumber = number
end if
next
而最高数字将是结果!为了让这个代码在一个简单的自定义函数中运行,你可以按照这个微软教程(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)
答案 2 :(得分: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
将其放在工作簿附带的模块中。工作表或ThisWorkbook代码中的 NOT 。
然后你可以像任何其他公式一样调用它:
= MaxInString(A1)
答案 3 :(得分:0)
其中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数时,错误行会被忽略。
我必须说这是非常具体的字符串格式,对于更全面的doodad,您希望将拆分分隔符作为变量并且可能使用" IsNumeric"用于扫描整个字符串的功能。