Excel VBA: Как извлечь число из строки? - PullRequest
3 голосов
/ 12 ноября 2011

Я хочу извлечь числа из строки. Строки записываются в каждую ячейку следующим образом.

1, 1
1, 2
1, 3

Числа просто делятся запятыми.

Как извлечь из них числа в Excel VBA?

Большое спасибо.

Ответы [ 3 ]

6 голосов
/ 12 ноября 2011

Если я правильно понял ваш вопрос, у вас есть «1, 1» в ячейке A1, «1, 2» в ячейке A2, «1, 3» в ячейке A3.

Если вы хотите соответственночисла перед запятой в ячейках B1, B2 и B3 и числа после запятой в ячейках C1, C2 и C3 вы можете сделать следующее:

VBA SOLUTION:

Public Sub test()
    'the variables' declaration has been corrected, check 
    'the post's comments below to find out which correction were made
    Dim lngLeft as Long, lngRight as Long, lngCommaPos As Long
    Dim intI As Integer
    For intI = 1 To 3
        lngCommaPos = InStr(1, Range("A" & intI).Value, ",")
        lngLeft = Left(Range("A" & intI).Value, lngCommaPos - 1)
        lngRight = Right(Range("A" & intI).Value, Len(Range("A" & intI).Value) - lngCommaPos - 1)
        Range("B" & intI).Value = lngLeft
        Range("C" & intI).Value = lngRight
    Next intI
End Sub

NON VBA решение:

Вставьте следующую формулу в ячейку B1:
= ЗНАЧЕНИЕ (ВЛЕВО (A1, НАЙТИ (",", A1) -1))

Вставьте следующую формулу в ячейку C1:
= VALUE (RIGHT (A1, LEN (A1) -FIND (",", A1) -1))

Копироватьячейки B1 и C1 Вставьте в ячейки B2 до C3

Если вы хотите, чтобы в столбцах B и C были строки (вместо цифр), вы можете удалить функцию VALUE, и формулы в ячейках B1 и C1 будут
= ВЛЕВО (A1, НАЙТИ (",", A1) -1)
= ВПРАВО (A1, LEN (A1) -FIND (",", A1) -1)

4 голосов
/ 12 ноября 2011

* Предполагается, что желаемый результат равен 11, 12 и 13.

Нижеследующее было написано как функции, но вместо этого может быть легко заменено на подпрограммы. Я не хотел входить в диапазон настройки и просто сосредоточиться на функции.

Если ваши данные - это просто числа, разделенные запятыми и пробелами, просто используйте replace:

Function ExtractNumber(ByVal text As String) As String

ExtractNumber = Replace(text, ", ", "")

End Function

Если вам нужна более сложная функция, которая будет извлекать все числа независимо от того, что еще может быть в строке , вот моя функция RegexExtract. По умолчанию я настроил его так, что он будет разделять запятыми все захваты, но вы можете указать его как ничего:

=RegexExtract(A1, "(\d)", "")
  • (\ d) означает захват любых чисел 0-9
  • 3-й параметр - это то, как вы хотите разделить все захваты (если вообще)

Вот функция:

Function RegexExtract(ByVal text As String, _
                      ByVal extract_what As String, _
                      Optional seperator As String = ", ") As String

Application.ScreenUpdating = False
Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
Dim i As Long, j As Long
Dim result As String

RE.Pattern = extract_what
RE.Global = True
Set allMatches = RE.Execute(text)

For i = 0 To allMatches.Count - 1
    For j = 0 To allMatches.Item(j).submatches.Count - 1
        result = result & (seperator & allMatches.Item(i).submatches.Item(j))
    Next
Next

If Len(result) <> 0 Then
    result = Right$(result, Len(result) - Len(seperator))
End If

RegexExtract = result
Application.ScreenUpdating = True

End Function
1 голос
/ 22 июня 2012

Если вы не хотите использовать VBA, вы также можете использовать текст в столбцах, см .: http://support.microsoft.com/kb/214261

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