2016-06-14 2 views
0

Я хочу извлечь (или отделить) десятичное число от string. Как:Как извлечь десятичное число в строке?

ширина (6,15)

Здесь я просто хочу, чтобы сохранить десятичное число.

Sub first_try() 

Dim a, b 
a = "width(5.55)" 
For i = 1 To Len(a) 
    If IsNumeric(Mid(a, i, 1)) Then 
     b = b & Mid(a, i, 1) 
    End If 
Next i 

'Debug.Print b 

End Sub 

Но в этом случае я могу сохранить только число (например, 555 для моего кода), но не десятичное число. И строка не всегда похожа на Width (5.55), регулярного следования нет. Поэтому, если у вас есть идея, пожалуйста, дайте мне несколько советов. Спасибо!

+1

Возможный дубликат [Поиск строки для цифр, включая десятичные в VBA] (http://stackoverflow.com/questions/17492500/search-a-string-for-numbers-including-decimals-in-vba) – Igoranze

+0

«Регулярно следовать». Там должно быть какое-то правило, иначе эта проблема не разрешима. – Bathsheba

+0

Можете ли вы просто добавить 'Or Mid (a, i, 1) =". " 'в ваш' if-statement'? –

ответ

1

Вот один из возможных способов:

Sub first_try() 

Dim a, b 
Dim i As Long 
a = "width(5.55)" 
For i = 1 To Len(a) 
    If IsNumeric(Mid(a, i, 1)) Then 
     b = Val(Mid(a, i)) 
     Exit For 
    End If 
Next i 

Debug.Print b 

End Sub 

предоставил информацию, которую вы предоставили. Если вам нужно разрешить отрицательные числа, которые должны быть простым изменением.

+0

Спасибо! Это работает хорошо. Но у меня есть вопрос, я не понимаю, понимают ли 'If IsNumeric (Mid (a, i, 1)) Then'. Мы проверяем каждое число (могу ли я сказать это?) В String, и если это число, тогда мы помещаем остальную строку в b. Поэтому я думаю, что это оставило бы только последнее число в b, но на самом деле это не так? Не могли бы вы объяснить это немного для меня? – Hiddenllyy

+1

Он проверяет каждый символ поочередно, один за другим. Если символ - это число, код использует Val в остальной части строки. Val вернет все до первого, что он не распознает как часть числа (он распознает запятые и десятичные точки). В этот момент код выходит из цикла и не продолжает тестирование. – Rory

+0

Я вижу, спасибо! – Hiddenllyy

1

Вот способ получить цифры и десятичная точка:

Sub first_try() 

Dim a, b 
a = "width(5.55)" 
For i = 1 To Len(a) 
    If IsNumeric(Mid(a, i, 1)) Or Mid(a, i, 1) = "." Then 
     b = b & Mid(a, i, 1) 
    End If 
Next i 

Debug.Print b 

End Sub 
+0

Ха-ха, это хороший метод! Спасибо! Почему я просто не понял эту идею! – Hiddenllyy

+0

Но если число действительно велико, например, 5555 (даже это невозможно в моем случае, но это может иметь некоторые ошибки ...), и этот метод терпит неудачу. – Hiddenllyy