我正在尝试查找单个单元格的最高和最低值。
字符串有很多变化
单元E9
a)63Ra b)64Ra c)65Ra d)62Ra e)61Ra f)63Ra g)60Ra h)62Ra
单元E10
a)45° b)44.5° c)45° d)45° e)45.2° f)44.7°
单元格E11
a)Ø14.290 b)Ø14.286 c)Ø14.283
单元格F9> 65
单元格G9> 60
单元格F10> 44.5
单元格G10> 45.2
单元格F11> 14.290
单元格G11> 14.283
我发现了类似的问题,但是我不确定如何根据自己的需要调整公式。 Extract maximum number from a string
答案 0 :(得分:1)
尝试此vba代码
Option Explicit
Sub cut_my_number_Please()
Dim reg As Object
Dim MY_match
Dim Matches
Dim my_max As Double: my_max = -1
Dim i%, lr%: lr = Cells(Rows.Count, 5).End(3).Row
Dim k%: k = 6
Union(Range("D9:D50"), Range("F9:R50")).ClearContents
Set reg = CreateObject("VBscript.RegExp")
With reg
.Pattern = "([\d\.]+)"
.Global = True
End With
For i = 9 To lr
If reg.test(Range("E" & i)) Then
Set Matches = reg.Execute(Range("E" & i))
For Each MY_match In Matches
Cells(i, k) = MY_match * 1
If MY_match * 1 >= my_max Then my_max = MY_match * 1
k = k + 1
Next
End If
Cells(i, "D") = my_max
my_max = -1
k = 6
Next i
End Sub
答案 1 :(得分:0)
我对单元E9有一个答案。希望这会帮助您获得一个想法。
请插入模块,然后将下面的VBA代码复制到其中。
Public Function SplitText(pWorkRng As Range, pIsNumber As Boolean) As String
'Updateby Extendoffice
Dim xLen As Long
Dim xStr As String
xLen = VBA.Len(pWorkRng.Value)
For i = 1 To xLen
xStr = VBA.Mid(pWorkRng.Value, i, 1)
If ((VBA.IsNumeric(xStr) And pIsNumber) Or (Not (VBA.IsNumeric(xStr)) And Not (pIsNumber))) Then
SplitText = SplitText + xStr
End If
Next
End Function
然后使用下面的功能从中识别出最高价值。
=MAX(IF(LEN(SplitText(E9,TRUE))>1,+MID(SplitText(E9,TRUE),1,2),0),IF(LEN(SplitText(E9,TRUE))>3,+MID(SplitText(E9,TRUE),3,2),0),IF(LEN(SplitText(E9,TRUE))>5,+MID(SplitText(E9,TRUE),5,2),0),,IF(LEN(SplitText(E9,TRUE))>7,+MID(SplitText(E9,TRUE),7,2),0),IF(LEN(SplitText(E9,TRUE))>9,+MID(SplitText(E9,TRUE),9,2),0),IF(LEN(SplitText(E9,TRUE))>11,+MID(SplitText(E9,TRUE),11,2),0),IF(LEN(SplitText(E9,TRUE))>13,+MID(SplitText(E9,TRUE),13,2),0),IF(LEN(SplitText(E9,TRUE))>15,+MID(SplitText(E9,TRUE),15,2),0),IF(LEN(SplitText(E9,TRUE))>17,+MID(SplitText(E9,TRUE),17,2),0),IF(LEN(SplitText(E9,TRUE))>19,+MID(SplitText(E9,TRUE),19,2),0),IF(LEN(SplitText(E9,TRUE))>21,+MID(SplitText(E9,TRUE),21,2),0))
对于最小值,请使用MIN()。