как удалить слова = непрерывный набор символов, где содержится фрагмент abc100de , чтобы получить ячейки вида
xyzzzzzzzzzzzzz
zyyyyxxxxxl
PS: удаляемое слово может быть в любом месте предложения Заранее большая благодарность! [moder]В файле покажите. И побольше различных вариантов расположения туда засуньте.
Уважаемые, прошу вашей помощи!
есть ячейки в таблице с текстом такого формата:
[abc100de]aaaaaaacccccccddddddd xyzzzzzzzzzzzzz
rrrrrabc100deiiiiiiiiiiiii zyyyyxxxxxl
как удалить слова = непрерывный набор символов, где содержится фрагмент abc100de , чтобы получить ячейки вида
xyzzzzzzzzzzzzz
zyyyyxxxxxl
PS: удаляемое слово может быть в любом месте предложения Заранее большая благодарность! [moder]В файле покажите. И побольше различных вариантов расположения туда засуньте.Jingo
Сообщение отредактировал Jingo - Среда, 16.03.2016, 21:44
Public Function DelWords(TText As String, DelString As String) As String
Dim Q As String
Q = Trim(TText) DelWords = ""
Do
N = InStr(Q, " ") If N = 0 Then N = Len(Q) + 1 S = Mid(Q, 1, N - 1) If Replace(S, DelString, "") = S Then DelWords = DelWords & S End If Q = Trim(Replace(Q, S, ""))
Loop Until Q = ""
End Function
[/vba]
Для произвольного расположения
[vba]
Код
Public Function DelWords(TText As String, DelString As String) As String
Dim Q As String
Q = Trim(TText) DelWords = ""
Do
N = InStr(Q, " ") If N = 0 Then N = Len(Q) + 1 S = Mid(Q, 1, N - 1) If Replace(S, DelString, "") = S Then DelWords = DelWords & S End If Q = Trim(Replace(Q, S, ""))
Только сейчас вижу, что пробел теряется в строке DelWords = DelWords & S
Но пора домой
уважаемые, да - для произвольного расположения (удаляемое слово может быть как первым так и вторым, третьим и так далее) [moder]Уважаемый, а я для кого написал в своем первом комментарии
Только сейчас вижу, что пробел теряется в строке DelWords = DelWords & S
Но пора домой
уважаемые, да - для произвольного расположения (удаляемое слово может быть как первым так и вторым, третьим и так далее) [moder]Уважаемый, а я для кого написал в своем первом комментарии
Public Function DelWords(TText As String, DelString As String) As String Dim Q As String Q = Trim(TText) DelWords = "" Do N = InStr(Q, " ") If N = 0 Then N = Len(Q) + 1 S = Mid(Q, 1, N - 1) If Replace(S, DelString, "") = S Then 'Вот тут поправила DelWords = WorksheetFunction.Trim(DelWords & " " & S) End If Q = Trim(Replace(Q, S, "")) Loop Until Q = "" End Function
Public Function DelWords(TText As String, DelString As String) As String Dim Q As String Q = Trim(TText) DelWords = "" Do N = InStr(Q, " ") If N = 0 Then N = Len(Q) + 1 S = Mid(Q, 1, N - 1) If Replace(S, DelString, "") = S Then 'Вот тут поправила DelWords = WorksheetFunction.Trim(DelWords & " " & S) End If Q = Trim(Replace(Q, S, "")) Loop Until Q = "" End Function
Function tt(Text As String, IgnoreText As String) Dim obj As Object With CreateObject("VBScript.RegExp") .ignorecase = True .Pattern = "(.+)?(?:(?:^| )(?:.+)?)" & IgnoreText & ".+?(?: |$)(.+)?" Set obj = .Execute(Text) If obj.Count > 0 Then tt = obj(0).Submatches(0) & " " & obj(0).Submatches(1) End With End Function
[/vba]
Или так [vba]
Код
Function tt(Text As String, IgnoreText As String) Dim obj As Object With CreateObject("VBScript.RegExp") .ignorecase = True .Pattern = "(.+)?(?:(?:^| )(?:.+)?)" & IgnoreText & ".+?(?: |$)(.+)?" Set obj = .Execute(Text) If obj.Count > 0 Then tt = obj(0).Submatches(0) & " " & obj(0).Submatches(1) End With End Function
Public Function DelWords1(TText As String, DelString As String) As String Dim Q, I As Long Q = Split(WorksheetFunction.Trim(TText)) For I = 0 To UBound(Q) If InStr(Q(I), DelString) <> 0 Then Q(I) = "" Next DelWords1 = Join(Q) End Function
[/vba] Если предполагается, что удаляемое слово только одно, можно добавить в цикл Exit For
Manyasha, мне кажется, тогда проще так [vba]
Код
Public Function DelWords1(TText As String, DelString As String) As String Dim Q, I As Long Q = Split(WorksheetFunction.Trim(TText)) For I = 0 To UBound(Q) If InStr(Q(I), DelString) <> 0 Then Q(I) = "" Next DelWords1 = Join(Q) End Function
[/vba] Если предполагается, что удаляемое слово только одно, можно добавить в цикл Exit ForМВТ