К сожалению, замена не допускает использования диких символов
При использовании SEARCH
и REPLACE
единственное, что я мог придумать, это следующая формула:
=IF(ISNUMBER(SEARCH("????-, ",A1)),REPLACE(A1,SEARCH("????-, ",A1),7,""),IF(ISNUMBER(SEARCH(", ????-",RIGHT(A1,7))),REPLACE(A1,LEN(A1)-6,7,""),A1))
, которая удаляет только первое вхождение строк, которые вы хотите удалить.
В качестве утешения я предлагаю простое решение VBA, которое по по умолчанию удаляет все подстроки 5-character
в ", "-delimited
строка.
В VBA (CTRL-F11) вставьте новый модуль в рабочую книгу, где он вам нужен. В кодовом листе модуля (возможно, Module1) скопируйте / вставьте следующий код:
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose: From a delimited string, removes all sub strings containing
' a specified number of characters and returns the remainder
' of the string.
' Returns: A string, if there are any substrings with a different number
' of characters than the specified number of characters,
' or "", if not.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function FilterC(SourceValue As Variant, _
Optional NumberOfCharacters As Long = 5, _
Optional Delimiter As String = ", ") As String
Dim vntS As Variant ' Source Array
Dim vntT As Variant ' Target Array
Dim i As Long ' Source Array Elements Counter
Dim iTA As Long ' Target Array Elements Counter
Dim strC As String ' Current String
' Check if SourceValue is text.
If VarType(SourceValue) <> vbString Then Exit Function
' Check if SourceValue is "". For a cell in Excel this refers to an empty
' cell or a cell with a formula evaluating to "".
If SourceValue = "" Then Exit Function
' Initialize Target Array Elements Counter.
iTA = -1
' Write SourceValue to elements of Source Array (using 'Split').
vntS = Split(SourceValue, Delimiter)
' Loop through elements of Source Array.
For i = 0 To UBound(vntS)
' Write current element in Source Array to Current String.
strC = vntS(i)
' Check if the length of Current String is NOT equal
' to NumberOfCharacters.
If Len(strC) <> 5 Then GoSub TargetArray
Next
' If only 'NumberOfCharacters' character strings are found.
If iTA = -1 Then Exit Function
' Write elements of Target Array to FilterC (using "Join").
FilterC = Join(vntT, Delimiter)
Exit Function
' Write String to Target Array.
TargetArray:
' Increase Target Array Elements Counter.
iTA = iTA + 1
' Check if Target Array Elements Counter is greater than 0 i.e. if
' there already are any elements in Target Array.
If iTA > 0 Then
' All, except the first element.
ReDim Preserve vntT(iTA)
Else
' Only the first element.
ReDim vntT(0)
End If
' Write Current String to Target Array.
vntT(iTA) = strC
' Note: Target Array Elements Counter (iTA) was initalized with -1, so when
' the first time the code redirects to TargetArray (Subroutine),
' iTA will be 0 and only this time run through the Else clause
' and finally write Current String to Target Array.
Return
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
В Excel для результата из A1
используйте следующую формулу:
=FilterC(A1)
что является коротким поведением по умолчанию полностью определенной формулы:
=FilterC(A1,5,", ")