Извлечь из строки указанные c числа с десятичными знаками? - PullRequest
0 голосов
/ 20 марта 2020

Я хотел бы извлечь числа из строки следующим образом:

string = "Vol. 20.0 4.44 406.5 419.3 419.3"

Я хочу иметь возможность указать c, который число, которое я хочу, т. е. GetNumber (строка, 2) = 4,44 или GetNumber (строка, 4) = 419,3

Хорошо с помощью функции VBA или решения формулы Excel.

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Этот код удаляет первую переменную массива и позволяет пользователю выбирать, какой элемент использовать.

Dim arrSep As Variant: arrSep = Split("Vol. 20.0 4.44 406.5 419.3 419.3", Space(1))

Const arrDelim As String = "||"

Dim temparr As String: temparr = Join(arrSep, arrDelim) 'build the temporary array

'Rebuilt the array, removing the first element group
arrSep = Split(Mid$(temparr, InStr(1, temparr, arrDelim) + Len(arrDelim), Len(temparr)), arrDelim)

'Allow user to select array element
Dim UserInput As Long: UserInput = InputBox("Input value from 0 to 4 to select specific array value")

'Set variable for user selected value
Dim Val As Variant: Val = CDbl(arrSep(UserInput))

'MsgBox Val
'Or
    ThisWorkbook.Sheets("Sheet1").Range("A37").Value = Val 'change sheet and range to your requirements
0 голосов
/ 20 марта 2020

Вы также можете использовать регулярные выражения

Public Function GetNumber(s As String, pos As Long) As String
' Add Microsoft VBScript Regular Expression 5.5 via Tools/References
    Dim regEx As RegExp
    On Error GoTo EH

    Set regEx = New RegExp

    With regEx
        .IgnoreCase = True
        .Global = True
        .Pattern = "-?\d*\.?\d+"

        If .Test(s) Then
            GetNumber = .Execute(s)(pos - 1)
        End If
    End With

    Exit Function

EH:
    GetNumber = ""

End Function


Sub TestIt()

Dim s As String

   s = "Vol. 20.0 4.44 406.5 419.3 419.3"    
   Debug.Print GetNumber(s, 2)

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