Как извлечь числа из строки и разделить их запятой (или другим разделителем) (подставить, заменить, стереть, указать номер, удалить, удалить,...)

Мне нужно извлечь числа из строки в Excel, и числа должны быть разделены запятой, как показано в строке 3 (или любым другим разделителем).

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

      =SUMPRODUCT(MID(0&A1, LARGE(INDEX(ISNUMBER(--MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)) * ROW(INDIRECT("1:"&LEN(A1))), 0), ROW(INDIRECT("1:"&LEN(A1))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A1)))/10)´´´

Или во второй строке:

      =SUM(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)

Однако мне нужно, чтобы их как-то разделили.

ПРИМЕЧАНИЕ. У меня есть до 200 различных комбинаций чисел и марок автомобилей, из-за которых простые функции замены достигают своих пределов. Я предпочитаю решение на основе формул без скрытых промежуточных столбцов, если это возможно (конечно, без щелчка мышью вручную). У меня низкие навыки VBA, но я открыт для новых задач!

1 ответ

Изменить:
кажется, что реальные данные сложнее, чем первоначально представленный образец. Самый простой способ запрограммировать это — использовать регулярные выражения для извлечения чисел.

  • Извлеките любую строку цифр, следующую за началом строки; илиcommaнеобязательно, за которым следует один или несколькоspaces

Edit2. Преобразованный в позднюю привязку после того, как я прочитаю, шаблон будет распространен.

      Option Explicit
Function extrNums(cellRef) As String
    Dim RE As Object, MC As Object, M As Object
    Dim sTemp As Variant
    Const sPat As String = "(?:^|,\s*)(\d+)\b"
    
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .MultiLine = True
    .Pattern = sPat
    If .Test(cellRef) Then
        Set MC = .Execute(cellRef)
        For Each M In MC
            sTemp = sTemp & ", " & M.SubMatches(0)
        Next M
    End If
End With

extrNums = Mid(sTemp, 3)

End Function


Числа извлечения объяснений регулярных выражений
(?:^|,\s*)(\d+)\b

Опции: совпадение ^$ в разрывах строк.

Создано с помощью RegexBuddy

Другие вопросы по тегам