Нередко мне нужно вырезать весь текст вплоть до определенного символа. Например, в списке судебных дел в форме «Истец против ответчика» я мог бы снять все, вплоть до «против», чтобы получить список ответчиков.

Это легко сделать, используя комбинацию функций FIND , RIGHT и LEN следующим образом (используя A1 в качестве ячейки, из которой поступает текст):

=RIGHT(A1,LEN(A1)-FIND("text",A1)-1)

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

2 ответа2

1

Использование VBA является законной стратегией! Скрывает эти детали и бремя их отзыва. Также позволяет вам использовать более простые строковые функции (например, версия Mid () в VBA не нуждается в подсчете подстрок - по умолчанию она будет поставляться в конец строки.) [Примечание 1]
Функция, которую вы пишете, становится доступной для легкого применения в раскрывающемся списке функций Excel.

Alt-F11 для входа в VBA (Alt-F11 для переключения назад).
В VBAP-проекте для текущей рабочей книги Вставьте> Модуль (правая операция меню). Это будет иметь функцию, легко доступную по всей вашей книге.

Вставьте это:

Function RightOfToken(sSource As String, sToken As String) As String
Dim sTarget As String
Dim iPos As Integer

' Return the characters after the first occurence of sToken in sSource

iPos = InStr(sSource, sToken)
If iPos > 0 Then
    sTarget = Mid(sSource, Len(sToken) + iPos)
Else
    sTarget = ""
End If
RightOfToken = sTarget
End Function

Alt-F11 вернулся. В любой ячейке = RightofToken(«ABC v. DEF», «v.») Выдаст "DEF". (Вы можете использовать LTrim() в VBA для удаления пробелов или, если это подходит, сделать TRIM в Excel)

[Примечание 1] Если в VBA вам нужна версия функции для Excel или функция рабочего листа, относящаяся к Excel, вы можете добавить к ней префикс Application.WorksheetFunction. ,

0

Найти и заменить может работать на вас. Это самый быстрый. Для вашего примера "хочу раздеть все до и включая" v. "чтобы получить список ответчиков", я скопировал бы информацию в новый столбец (столбцы), а затем выделил только эти столбцы. Затем используйте Find and Replace или CTRL H.

В поле поиска введите «* v.» Или « звездочка v.». В поле замены оставьте его пустым. (Символ звездочки * является символом подстановки, поэтому он будет выделять все до V.) Нажмите кнопку ОК, чтобы запустить, и он должен удалить все, прежде чем и в том числе «v.».

Если у вас есть все, что вы хотите изменить в первую очередь, вы должны быть в состоянии сделать все одним махом очень быстро.

Надеюсь, это имеет смысл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .