У Карана в учебной тетради много текстовых данных. Некоторые из этих текстовых данных содержат даты. Ей нужен способ удалить любые даты, но оставить любой другой текст, который может быть в ячейке. Например, то, что начинается как «15.04.16, тест выполнено успешно» или «Тест выполнено 15.04.16», после удаления будет выглядеть как «

тест прошел успешно» и «Тест запущен».

Если ваши даты всегда следуют простому шаблону, вы можете использовать функцию ЗАМЕНА, чтобы удалить их. Например, если дата всегда состоит из однозначного числа месяца и двузначного дня, вы можете использовать следующее, чтобы удалить его:

=SUBSTITUTE(A1,MID(A1,SEARCH("?/??/??",A1),7),)

У такой формулы есть несколько проблем. Во-первых, он возвращает значение ошибки, если в ячейке A1 нет даты или если дата в ячейке A1 состоит только из однозначного числа. Кроме того, если в дате указан месяц из двух цифр, первая цифра остается неизменной (при условии, что в дате используется день из двух цифр) или возвращается значение ошибки (если в дате используется день из одной цифры).

Если ваша дата появляется в начале или в конце текста в ячейке, вы можете использовать другой тип формулы:

=IFERROR( IF( VALUE( LEFT( A1, 1)) > 0, RIGHT( A1, LEN(A1) - 7), ""), LEFT( A1, FIND( "/", A1) - 2))

Проблема с этим подходом состоит в том, что он также требует точного шаблона M / DD / YY или MM / D / YY. Таким образом, он имеет те же проблемы, что и предыдущая формула.

Более универсальный подход — использовать макрос для поиска даты, а затем удалить ее из строки. Следующий пример макроса смотрит на содержимое ячейки и разбивает его на «слова» с помощью функции Split. Затем он начинает складывать слова вместе, если слово не является датой.

Function RemoveDates(ByVal vC As String)

Dim arr As Variant     Dim s As String     Dim i As Integer

RemoveDates = ""

If vC > "" Then         arr = Split(vC, " ")

For i = LBound(arr) To UBound(arr)

If Not IsDate(arr(i)) Then                 s = s & arr(i) & " "

End If         Next i         RemoveDates = Left(s, Len(s) - 1)

End If End Function

Вы используете макрос в качестве пользовательской функции на листе следующим образом:

=RemoveDates(A1)

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

Function RemoveDates(MyRange As Range) As String     Dim sRaw As String     Dim sPattern As String     Dim regEx As New RegExp

sRaw = MyRange.Value

sPattern = "[0-9]{1,2}[-.\\/][0-9]{1,2}[-.\\/][0-9]{2}"



With regEx         .Global = True         .MultiLine = True         .IgnoreCase = False         .pattern = sPattern     End With

If regEx.Test(sRaw) Then         RemoveDates = regEx.Replace(sRaw, "")

Else         RemoveDates = "Not matched"

End If     Set regEx = Nothing End Function

Эта функция используется на вашем листе так же, как и ранее определенная пользователем функция:

=RemoveDates(A1)

Некоторым использование регулярных выражений может показаться черным искусством, но это конкретное использование довольно прямолинейно. В шаблоне (хранящемся в переменной sPattern) говорится, что одна или две цифры, за которыми следует символ разделителя (тире, точка, обратная косая черта или косая черта), за которыми следуют еще одна или две цифры, за которыми следует другой символ разделителя, за которым следуют две цифры, считаются Дата. Если такое совпадение обнаруживается в ячейке, оно удаляется.

Чтобы использовать обычный подход espressions, вам необходимо убедиться, что вы включили ссылку на следующую библиотеку в редакторе Visual Basic (выберите «Ссылки» в меню «Инструменты»):

Microsoft VBScript Regular Expressions 5.5

Вы также должны отметить, что функция возвращает «Not matched», если дата не была расположена в ячейке, на которую вы ссылаетесь.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (7768) применим к Microsoft Excel 2007, 2010, 2013 и 2016.