Я хотел бы заменить некоторый текст в строке в excel на другую строку.
Данные выглядят так: "текст еще текст 0,00 текст еще текст 0,00 текст"
Текст может быть любым, но не содержит десятичных знаков. 0,00 — это пример числа, которое может принимать значения от 0,00 до 9999,99. С помощью формулы я хотел бы изменить приведенный выше пример на:
Данные выглядят так: "текст еще текст 0,00 | текст еще текст 0,00 | текст"
Как это оформить в excel?
Ищете что-то вроде замены регулярного выражения или что-то в этом роде


С исходной текстовой строкой в формате A2 попробуйте,
=REPLACE(REPLACE(A2, FIND(",", A2, FIND(",", A2)+1)+3, 1, " | "), FIND(",", A2)+3, 1, " | ")
Нет собственного регулярного выражения рабочего листа, но его можно легко выполнить в пользовательской функции VBA.
Нет, вам нужно будет создать пользовательскую функцию с помощью VBA и RegEx.Replace для этого.
Регулярное выражение (UDF, определяемая пользователем функция):
Function ReplaceText(cell)
With CreateObject("VBScript.RegExp")
.Pattern = "(\d\s)": .Global = True
ReplaceText = .Replace(cell, "$1| ")
End With
End Function
Может быть немного более надежным в использовании \b(\d{1,4},\d{2}\s+), учитывая его характеристики: в диапазоне от 0,00 до 9999,99
Вы можете легко сделать это с помощью определяемой пользователем функции, написанной на VBA:
Option Explicit
Function addPipes(S As String) As String
Dim V As Variant
Dim I As Long
V = Split(S)
For I = 0 To UBound(V)
If V(I) Like "*#,#*" Then V(I) = V(I) & " |"
Next I
addPipes = Join(V)
End Function
Хотя, если ваша конечная цель состоит в том, чтобы разбить строку на конвейеры, и если вы все равно работаете в VBA, вы можете просто сделать разбиение с помощью простого макроса.
Кроме того, если у вас есть слова, содержащие образец d,d (где d — цифра, нам придется изменить сравнение Like.
Это также работает для строки, которая имеет около 15 или 20 значений «0,00»? Или это работает только для моего первоначального примера «текст еще текст 0,00 | текст еще текст 0,00 | текст»?