Как извлечь числа из строки и разделить их запятой (или другим разделителем) (подставить, заменить, стереть, указать номер, удалить, удалить,...)
Мне нужно извлечь числа из строки в 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
Опции: совпадение ^$ в разрывах строк.
- Сопоставьте регулярное выражение ниже
(?:^|,\s*)
- Сопоставьте регулярное выражение ниже и запишите его совпадение в обратную ссылку номер 1.
(\d+)
- Утверждать позицию на границе слова
\b
Создано с помощью RegexBuddy