2016-11-22 3 views
0

У меня есть эта проблема в Excel, где мне нужно извлечь данные из строки текста, как показано ниже. Все данные находятся в отдельных строках. Я пытаюсь извлечь только данные, находящиеся между косыми чертами, в формате x/y/z/a/b/c и игнорируя остальную часть данных спереди. Надеемся, что эту проблему можно решить с помощью vba.Как извлечь данные

Пример:

s1 167.4/164.2/172.0/165.8/162.5/165.6 s2 163.6/164.1/167.2/167.1/165.6/167.6 S#1:0.1682/0.1646/0.1641/0.1653/0.1622/0.1642 S#2:0.1623/0.1621/0.1667/0.1680/0.1667/0.1643 s24=1903/1881/1873/1903/1915/1891 s25=1872/1858/1904/1879/1854/1868 SLOT 24:0.2031/0.1991/0.1959/0.1989/0.1987/0.2051 SLOT 25:0.2014/0.2019/0.2014/0.2033/0.2001/0.2017

+0

Каков ожидаемый результат? – Andreas

+0

Я бы хотел ничего, кроме числа, которое находится между косами, поэтому 's1 167.4/164.2/172.0/165.8/162.5/165.6' станет «167.4/164.2/172.0/165.8/162.5/165.6' – JohnSmith

ответ

0

Посмотрите на это:

Public Sub RegExpExample() 
    Dim rng As Range 
    Dim c As Variant, arr As Variant 
    Dim k As Long 
    Dim regEx As Object 
    Dim Match, Matches 

    ' Uses late binding so no need to add references 
    Set regEx = CreateObject("VBScript.RegExp") 

    ' Change this to match your range where your values are 
    With Sheet2 
     Set rng = .Range(.Cells(1, 1), .Cells(8, 1)) 
    End With 
    ' Declare RegEx parameters 
    With regEx 
     .Pattern = "(?:\d*\.)?\d+" 
     .IgnoreCase = True 
     .Global = True 
    End With 
    ' Loop through each row 
    For Each c In rng 
     Set Matches = regEx.Execute(c) 
     If Matches.Count > 0 Then 
      ReDim arr(1 To Matches.Count) 
      k = 1 
      For Each Match In Matches 
       arr(k) = Match 
       k = k + 1 
      Next Match 
      ' Print back to worksheet 
      Range(c.Offset(0, 1), c.Offset(0, UBound(arr))) = arr 
     End If 
    Next c 

End Sub 

Вы должны решить, как обрабатывать первый столбец значений, которые возвращаются или ждать, пока кто-то, что лучше с RegEx мирится ответ

+0

Отличное решение Tom !! –

+0

Он отлично работает, спасибо! – JohnSmith

1

Регулярные выражения будет самым надежным ответом.

Требуется пользовательская функция VBA и выражение, соответствующее вашим требованиям.

Подробное руководство: How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops

Регулярное выражение можно использовать, может быть: (?: \ S |: | =) *

т.е. найти первый пробел или первый: или первый =, затем выберите все. после.

+0

Я пробовал Regex, но в конце концов я до сих пор не знаю, как это работает. – JohnSmith

Смежные вопросы