Как найти самые высокие и самые низкие значения в одной ячейке - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь найти самые высокие и самые низкие значения одной ячейки.

Есть много вариантов строк

Ячейка 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

Я нашел похожую проблему, но я не уверен, как настроить формулу в соответствии с моими потребностями. Извлечь максимальное число из строки

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Попробуйте этот код 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
0 голосов
/ 09 июля 2019

У меня есть ответ на Cell 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 ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...