Удаление после пробела excel

Содержание

  1. Как удалить все до или после определенного символа в Excel
  2. С помощью функции «Найти и заменить»
  3. С помощью формул
  4. С помощью функции «Заполнить»
  5. С помощью Visual Basic
  6. Excel убрать все после пробела
  7. Простое разделение ячеек на несколько ячеек / строк (список столбцов) в Excel
  8. Как удалить символы После знака в Excel
  9. Видеоинструкция
  10. Как удалить знаки после символа в Excel
  11. Удаление знака после запятой в Эксель
  12. После пробела в Excel
  13. Вам также будет интересно
  14. Комментарии 2

Как удалить все до или после определенного символа в Excel

Люди, которые только начинают работать в Excel часто встречаются с таким вопросом.

Допустим, у нас есть такая табличка:

Примерно так выглядит удаление всех символов после «,».

Это можно сделать разными способами. Мы рассмотрим несколько.

С помощью функции «Найти и заменить»

Это, наверное, самый быстрый и удобный способ.

Допустим, у нас та же табличка и задача:

  • Копируем и вставляем столбик А в В;

  • Выделите столбик и щелкните «Главная»;

  • Далее — «Найти и выделить» -> «Заменить…»;

  • В первом параметре укажите «,*»;

  • Второй параметр не меняйте;

  • Щелкните «Заменить все».

Готово! Вот результат:

Как это работает?

Символ * означает неопределенное количество символов.

Так как мы используем «,*», то это значит, что программе нужно заменить запятую и все символы после неё на пустое место.

Это будет работать только если в каждой ячейке у вас одна запятая, если же у вас не одна, то первая и все остальные данные будут заменены на пустое место.

С помощью формул

Также, мы можем выполнить нашу задачу и с помощью формул.

Допустим, у нас есть такая табличка:

Формула принимает такой вид:

Функция НАЙТИ возвращает порядковый номер запятой.

Это простой пример, давайте рассмотрим кое-что посложнее.

Теперь у нас такая табличка:

Формула, для этого примера, принимает такой вид:

Итак, также как в прошлый раз — не получится. Так как НАЙТИ будет возвращать порядковый номер первой запятой, а нам надо найти его для второй.

Мы используем небольшую хитрость, а если конкретнее, то заменяем вторую запятую на восклицательный знак, а затем с ним уже проводим операции.

И все бы хорошо, только в этом примере в каждой строке у нас ровно 2 запятые. А что делать если их неопределенное количество? Ведь в больших данных вы не будете выверять сколько запятой в каждой строке.

Итак, нам нужно найти порядковый номер последней запятой, а после уже проводить с ней операции.

Для этого примера, формула принимает такой вид:

Итак, функция ДЛСТР сначала находит количество символов в строчке с запятыми, а потом без них.

А после вычитает из первого — второе. Таким образом мы получаем количество запятых в строчке.

А затем мы заменяем последнюю на восклицательный знак.

Вот так вот можно заменять все после определенного символа с помощью формул. Конечно, с небольшими хитростями.

Плюс этого метода в том, что данные будут динамичны. То есть если что-то поменяется в изначальных данных, все поменяется и в данных после обработки.

С помощью функции «Заполнить»

Функция «Заполнить», это довольно давний инструмент. Он может помочь нам и в этом случае.

Как он работает?

Очень просто — вы просто делаете что угодно и после используете функцию. Она пытается понять логику ваших действий и продолжить её.

Давайте рассмотрим пример.

Допустим, у нас есть та же табличка:

  • В первую ячейку столбика В введите то, что должно получиться после обработки;

  • В следующую ячейку, то же самое;

  • А теперь выделите столбик;

  • И щелкните на «Главная» -> «Заполнить» -> «Мгновенное заполнение»;

Готово! Вот результат:

Эту функцию, естественно, можно использовать не только для удаления текста после символа. Она работает там, где есть логика.

Однако, иногда, она может ошибаться. Поэтому всегда проверяйте то, что получилось после обработки.

С помощью Visual Basic

И, как обычно, разберем вариант с помощью Visual Basic.

Мы создадим свою собственную функцию и будем использовать её для обработки данных.

Это крайне удобно, если вы делаете что-либо очень часто. Например, как в нашем случае, удаляете данные после символа.

Код Visual Basic:

Код, чтобы он работал, нужно вставить в Visual Basic -> «Insert» -> «Module».

Давайте рассмотрим пример её использования.

Допустим, у нас есть такая табличка. Формула принимает такой вид:

В нашей функции, первым аргументом мы указали диапазон для поиска, а вторым символ, последнюю позицию которого нам нужно найти.

С помощью Visual Basic все проще.

Вот и все! Если вам нужно сделать что-то подобное 1-2 раза, то лучше всего использовать функцию «Найти и заменить…», а если вы делаете это постоянно, то используйте Visual Basic.

Надеюсь, эта статья оказалась полезна для вас!

Источник

Excel убрать все после пробела

Например, вы хотите удалить все символы после последнего пробела из ячеек, как вы могли бы легко сделать это в Excel? А если убрать все символы после первого пробела? Для вас есть несколько решений:

В этом разделе будут представлены формулы для удаления всех символов после первого или последнего пробела в Excel. Пожалуйста, сделайте следующее:

Удалите все символы после последнего пробела

Выберите пустую ячейку, введите формулу =LEFT(A2,FIND(«^^»,SUBSTITUTE(A2,» «,»^^»,LEN(A2)-LEN(SUBSTITUTE(A2,» «,»»))))-1) (A2 — это ячейка, в которой вы удалите все символы после последнего пробела) и перетащите маркер заполнения в нужный диапазон.

Формула слишком сложна для запоминания? Сохраните формулу как запись Auto Text для повторного использования одним щелчком мыши в будущем!
Подробнее . Бесплатная пробная версия

И тогда вы увидите все символы после удаления последнего пробела в каждой ячейке. Смотрите скриншот:

Удалите все символы после первого пробела

Выберите пустую ячейку, введите формулу = ЛЕВЫЙ (A2; НАЙТИ («»; A2) -1) (A2 — это ячейка, в которой вы удалите все символы после первого пробела), и перетащите маркер заполнения вниз до нужного диапазона.

Простое разделение ячеек на несколько ячеек / строк (список столбцов) в Excel

Обычно пользователи Excel могут применять Текст в столбцы функция разбить одну ячейку на несколько столбцов, но нет прямого метода преобразования одной ячейки в несколько строк. Однако Kutools для Excel Разделить клетки Утилита может помочь вам легко сделать это, как показано на скриншоте ниже.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30 -день, кредитная карта не требуется! Get It Now

Вы также можете применить функцию, определяемую пользователем, чтобы удалить все символы после последнего пробела из ячеек в Excel. Пожалуйста, сделайте следующее:

1. Нажмите другой + F11 одновременно клавиши, чтобы открыть окно Microsoft Visual Basic для приложений.

2. Нажмите Вставить > Модули, а затем скопируйте и вставьте следующий код в новое окно модуля.

VBA: удалить все символы после последнего пробела в Excel

3. Сохраните функцию, определяемую пользователем, и закройте окно Microsoft Visual Basic для приложений.

4. Выберите пустую ячейку и введите формулу. = RemoveAfterLastSpace (A2) (A2 — это ячейка, в которой вы удалите все символы после последнего пробела), и перетащите маркер заполнения в нужный диапазон.

И тогда вы увидите все символы после удаления последнего пробела из каждой ячейки. Смотрите скриншот:

Этот метод представит Kutools for Excel’s Разделить имена утилита для быстрого удаления всех символов после первого пробела из ячеек в Excel.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30 -день, кредитная карта не требуется! Бесплатная пробная версия сейчас!

Kutools for Excel — Combines more than 300 Advanced Functions and Tools for Microsoft Excel

1. Выберите диапазон, в котором вы удалите все символы после первого пробела из каждой ячейки, и щелкните Кутулс > Текст > Разделить имена. Смотрите скриншот:

2. В открывшемся диалоговом окне Split Names отметьте только Имя и нажмите Ok кнопку.

3. Затем укажите первую ячейку целевого диапазона во втором диалоговом окне «Разделить имена» и нажмите кнопку OK кнопку.

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

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30 -день, кредитная карта не требуется! Get It Now

Источник

Как удалить символы После знака в Excel

Возможность удаления знаков после символа или текста в Excel — это важная функция при работе с таблицами, позволяющая очистить нужные элементы от лишней информации.

Видеоинструкция

Как удалить знаки после символа в Excel

Для этого потребуется использовать формулу:

  • А1 — ячейка, которую мы будет проверять;
  • Символ — символ или текст, после которого будет обрезаться ячейка.

Также можно комбинировать этот способ с очисткой данных «До».

Удаление знака после запятой в Эксель

Выполнить эту задачу можно при помощи конструкции:

После пробела в Excel

Сделать это можно через формулу:

Подписывайтесь на наш канал в Яндекс.Дзен

Подписывайтесь на наш Telegram-канал

Подписывайтесь на наш Youtube-канал

Подписывайтесь на нашу группу ВКонтакте

Вам также будет интересно

Комментарии 2

А если после запятой надо оставить только (например) три знака в числовом формате, то надо так: =ПСТР(А3;1;ПОИСК(«,»;А3)+3)
При этом, (опять же например)
исходное значение: 23,558668; готовый результат: 23,558

Добрый день, спасибо за обратную связь, да думаю данная форума будет полезна многим. Также если речь идет о цифрах, как в примере можно воспользоваться округлением.

Источник

Как удалить все символы после первого / последнего пробела из ячеек в Excel?

Например, вы хотите удалить все символы после последнего пробела из ячеек, как вы могли бы легко сделать это в Excel? А если убрать все символы после первого пробела? Для вас есть несколько решений:

  • Удалите все символы после первого / последнего пробела с формулой
  • Удалите все символы после последнего пробела с помощью функции, определяемой пользователем
  • Удалите все символы после первого пробела с помощью Kutools for Excel

Удалите все символы после первого / последнего пробела с формулами

В этом разделе будут представлены формулы для удаления всех символов после первого или последнего пробела в Excel. Пожалуйста, сделайте следующее:

Удалите все символы после последнего пробела

Выберите пустую ячейку, введите формулу =LEFT(A2,FIND(«^^»,SUBSTITUTE(A2,» «,»^^»,LEN(A2)-LEN(SUBSTITUTE(A2,» «,»»))))-1) (A2 — это ячейка, в которой вы удалите все символы после последнего пробела) и перетащите маркер заполнения в нужный диапазон.
документ удалить после первого последнего пробела 1

И тогда вы увидите все символы после удаления последнего пробела в каждой ячейке. Смотрите скриншот:
документ удалить после первого последнего пробела 2

Удалите все символы после первого пробела

Выберите пустую ячейку, введите формулу = ЛЕВЫЙ (A2; НАЙТИ («»; A2) -1) (A2 — это ячейка, в которой вы удалите все символы после первого пробела), и перетащите маркер заполнения вниз до нужного диапазона.
документ удалить после первого последнего пробела 3

Простое разделение ячеек на несколько ячеек / строк (список столбцов) в Excel

Обычно пользователи Excel могут применять Текст в столбцы возможность разбить одну ячейку на несколько столбцов, но нет прямого метода преобразования одной ячейки в несколько строк. Однако, Kutools for ExcelАвтора Разделить клетки Утилита может помочь вам легко сделать это, как показано на скриншоте ниже.

объявление разделить ячейку на столбцы строк

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now

Удалите все символы после последнего пробела с помощью функции, определяемой пользователем

Вы также можете применить функцию, определяемую пользователем, чтобы удалить все символы после последнего пробела из ячеек в Excel. Пожалуйста, сделайте следующее:

1. Нажмите другой + F11 одновременно клавиши, чтобы открыть окно Microsoft Visual Basic для приложений.

2. Нажмите Вставить > Модули, а затем скопируйте и вставьте следующий код в новое окно модуля.

VBA: удалить все символы после последнего пробела в Excel

Function RemoveAfterLastSpace(Txt As String) As String
With CreateObject("VBScript.RegExp")
.Pattern = "s+w+$"
RemoveAfterLastSpace = .Replace(Txt, "")
End With
End Function

3. Сохраните функцию, определяемую пользователем, и закройте окно Microsoft Visual Basic для приложений.

4. Выберите пустую ячейку и введите формулу. = RemoveAfterLastSpace (A2) (A2 — это ячейка, в которой вы удалите все символы после последнего пробела), и перетащите маркер заполнения в нужный диапазон.
документ удалить после первого последнего пробела 4

И тогда вы увидите все символы после удаления последнего пробела из каждой ячейки. Смотрите скриншот:
документ удалить после первого последнего пробела 5


Удалите все символы после первого пробела с помощью Kutools for Excel

Этот метод представит Kutools for ExcelАвтора Разделить имена утилита для быстрого удаления всех символов после первого пробела из ячеек в Excel.

1. Выберите диапазон, в котором вы удалите все символы после первого пробела из каждой ячейки, и щелкните Кутулс > Текст > Разделить имена. Смотрите скриншот:
документ удалить после первого последнего пробела 01

2. В открывшемся диалоговом окне Split Names отметьте только Имя и нажмите Ok кнопку.
документ удалить после первого последнего пробела 7

3. Затем укажите первую ячейку целевого диапазона во втором диалоговом окне «Разделить имена» и нажмите кнопку OK кнопку.

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

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now


Демо


Статьи по теме:

Легко удаляйте цифры, буквы или специальные символы (маркеры) из текстовой строки в Excel

Kutools for Excel’s Удалить символы Утилита предназначена для легкого удаления всех букв, всех цифр или специальных символов (таких как маркеры) из текстовых строк. Он также может легко удалять все нечисловые символы, не буквенные символы или не буквенно-цифровые символы из указанных текстовых строк.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel для Mac 2011 Excel Starter 2010 Еще…Меньше

В этой статье описаны синтаксис формулы и использование функции СЖПРОБЕЛЫ в Microsoft Excel.

Описание

Удаляет из текста все пробелы, за исключением одиночных пробелов между словами. Функция СЖПРОБЕЛЫ используется для обработки текстов, полученных из других прикладных программ, если эти тексты могут содержать лишние пробелы.

Важно: Функция СЖПРОБЕЛЫ предназначена для удаления из текста знаков пробела 7-разрядного кода ASCII (значение 32). В наборе знаков Юникода существует дополнительный знак пробела, который называется знаком неразрывного пробела и имеет десятичное значение 160. Этот знак обычно используется на веб-страницах как сущность HTML  . Сама по себе функция СЖПРОБЕЛЫ не удаляет этот знак неразрывного пробела. Пример обрезки обоих пробелов из текста см. в десяти лучших способах очистки данных.

Синтаксис

СЖПРОБЕЛЫ(текст)

Аргументы функции СЖПРОБЕЛЫ описаны ниже.

  • Текст    Обязательный. Текст, из которого удаляются пробелы.

Пример

Скопируйте образец данных из следующей таблицы и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — клавишу ВВОД. При необходимости измените ширину столбцов, чтобы видеть все данные.

Формула

Описание

Результат

=СЖПРОБЕЛЫ(» Доход за первый квартал «)

Удаляет начальные и конечные пробелы из текста в формуле («Доход за первый квартал»)

Доход за первый квартал

Нужна дополнительная помощь?

Помогите плиз не могу разобраться с ормулой

Пример
Герметик прокладок серый
ФИЛЬТР

Нужно удалить все после первого пробела, если 2 слова и более , то формула работает
А вот если слово одно, то выдает #ЗНАЧ!

Помогите пожалуйста с формулой
Спасибо


=ЕСЛИ((ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";"")))>0;ЛЕВСИМВ(ПОДСТАВИТЬ(A1;" ";"!";1);НАЙТИ("!";ПОДСТАВИТЬ(A1;" ";"!";1))-1);A1)


=ЛЕВБ(A1;ПОИСК(" ";A1&" ")-1)


ctrl+h→найти » *»→заменить на пусто.

Я, как всегда, чертовски адекватен… Email: kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728, E332314026771


=СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(A1;" ";ПОВТОР(" ";50));50))


На чтение 5 мин Просмотров 11.3к. Опубликовано 16.05.2022

Люди, которые только начинают работать в Excel часто встречаются с таким вопросом.

Допустим, у нас есть такая табличка:

Примерно так выглядит удаление всех символов после «,».

Это можно сделать разными способами. Мы рассмотрим несколько.

Итак, начнём!

Содержание

  1. С помощью функции «Найти и заменить»
  2. С помощью формул
  3. С помощью функции «Заполнить»
  4. С помощью Visual Basic

С помощью функции «Найти и заменить»

Это, наверное, самый быстрый и удобный способ.

Допустим, у нас та же табличка и задача:

Пошаговая инструкция:

  • Копируем и вставляем столбик А в В;

  • Выделите столбик и щелкните «Главная»;

  • Далее — «Найти и выделить» -> «Заменить…»;

  • В первом параметре укажите «,*»;

  • Второй параметр не меняйте;

  • Щелкните «Заменить все».

Готово! Вот результат:

Как это работает?

Символ * означает неопределенное количество символов.

Так как мы используем «,*», то это значит, что программе нужно заменить запятую и все символы после неё на пустое место.

Это будет работать только если в каждой ячейке у вас одна запятая, если же у вас не одна, то первая и все остальные данные будут заменены на пустое место.

С помощью формул

Также, мы можем выполнить нашу задачу и с помощью формул.

Допустим, у нас есть такая табличка:

Формула принимает такой вид:

=ЛЕВСИМВ(A2;НАЙТИ(",";A2)-1)

Функция НАЙТИ возвращает порядковый номер запятой.

Это простой пример, давайте рассмотрим кое-что посложнее.

Теперь у нас такая табличка:

Формула, для этого примера, принимает такой вид:

=ЛЕВСИМВ(A2;НАЙТИ("!";ПОДСТАВИТЬ(A2;",";"!";2))-1)

Итак, также как в прошлый раз — не получится. Так как НАЙТИ будет возвращать порядковый номер первой запятой, а нам надо найти его для второй.

Мы используем небольшую хитрость, а если конкретнее, то заменяем вторую запятую на восклицательный знак, а затем с ним уже проводим операции.

И все бы хорошо, только в этом примере в каждой строке у нас ровно 2 запятые. А что делать если их неопределенное количество? Ведь в больших данных вы не будете выверять сколько запятой в каждой строке.

Вот пример:

Итак, нам нужно найти порядковый номер последней запятой, а после уже проводить с ней операции.

Для этого примера, формула принимает такой вид:

=ЛЕВСИМВ(A2;НАЙТИ("!";ПОДСТАВИТЬ(A2;",";"!";ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;",";","))))-1)

Итак, функция ДЛСТР сначала находит количество символов в строчке с запятыми, а потом без них.

А после вычитает из первого — второе. Таким образом мы получаем количество запятых в строчке.

А затем мы заменяем последнюю на восклицательный знак.

Вот так вот можно заменять все после определенного символа с помощью формул. Конечно, с небольшими хитростями.

Плюс этого метода в том, что данные будут динамичны. То есть если что-то поменяется в изначальных данных, все поменяется и в данных после обработки.

С помощью функции «Заполнить»

Функция «Заполнить», это довольно давний инструмент. Он может помочь нам и в этом случае.

Как он работает?

Очень просто — вы просто делаете что угодно и после используете функцию. Она пытается понять логику ваших действий и продолжить её.

Давайте рассмотрим пример.

Допустим, у нас есть та же табличка:

Пошаговая инструкция:

  • В первую ячейку столбика В введите то, что должно получиться после обработки;

  • В следующую ячейку, то же самое;

  • А теперь выделите столбик;

  • И щелкните на «Главная» -> «Заполнить» -> «Мгновенное заполнение»;

Готово! Вот результат:

Эту функцию, естественно, можно использовать не только для удаления текста после символа. Она работает там, где есть логика.

Однако, иногда, она может ошибаться. Поэтому всегда проверяйте то, что получилось после обработки.

С помощью Visual Basic

И, как обычно, разберем вариант с помощью Visual Basic.

Мы создадим свою собственную функцию и будем использовать её для обработки данных.

Это крайне удобно, если вы делаете что-либо очень часто. Например, как в нашем случае, удаляете данные после символа.

Код Visual Basic:

Function LastPosition(rCell As Range, rChar As String) 
'This function gives the last position of the specified character 
'This code has been developed by Sumit Bansal (https://trumpexcel.com) 
Dim rLen As Integer 
rLen = Len(rCell)   

For i = rLen To 1 Step -1   
If Mid(rCell, i - 1, 1) = rChar Then 
LastPosition = i - 1 
Exit Function 
End If   

Next i   E

nd Function

Код, чтобы он работал, нужно вставить в Visual Basic -> «Insert» -> «Module».

Давайте рассмотрим пример её использования.

Допустим, у нас есть такая табличка. Формула принимает такой вид:

=ЛЕВСИМВ(A2;LastPosition(A2;",")-1)

В нашей функции, первым аргументом мы указали диапазон для поиска, а вторым символ, последнюю позицию которого нам нужно найти.

С помощью Visual Basic все проще.

Вот и все! Если вам нужно сделать что-то подобное 1-2 раза, то лучше всего использовать функцию «Найти и заменить…», а если вы делаете это постоянно, то используйте Visual Basic.

Надеюсь, эта статья оказалась полезна для вас!

 

ateccc

Пользователь

Сообщений: 7
Регистрация: 17.10.2014

Заранее прошу прощения, если решение уже есть. Но по поиску не нашел.
Суть задачи:
Есть список названий товаров, последнее слово после пробела — это код товара. Он может быть разным и текст и цифры.
Необходимо: удалить слово после последнего пробела.
А в иделе — еще и поместить его в соседний столбец.
Excel 2003

Прикрепленные файлы

  • пример.xls (28.5 КБ)

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#2

18.10.2014 00:03:43

Код
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПСТР(A2;ПОИСК("/";ПОДСТАВИТЬ(A2;" ";"/";ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;" ";))));50);")";);"(";)
 

ateccc

Пользователь

Сообщений: 7
Регистрация: 17.10.2014

Может не совсем понятно сформулировал, но мне важно получить значения Названия товара без слова после последнего пробела, а выделить последнее слово в отдельный столбец это уже не главная а второстепенная задача.
Было: Портмоне мужской Armani (11082)
Стало: Портмоне мужской Armani

Поможете ?

Изменено: ateccc18.10.2014 00:20:54

 

Doober

Пользователь

Сообщений: 2204
Регистрация: 09.04.2013

#4

18.10.2014 00:12:30

Не успеешь за формулистами.  :D  .
Удаляет с первого столбца и переносит в соседний

Код
Sub Extract()
    Dim Rng As Range
    Set RegExp = CreateObject("VBScript.RegExp")
    RegExp.Pattern = "s(S+)$"
    For Each Rng In ActiveSheet.UsedRange.Columns(1).Cells
        If Rng.Value <> "" Then
            bRes = RegExp.test(Rng.Value)
            If bRes Then
                Set oMatches = RegExp.Execute(Rng.Value)
                Rng.Offset(0, 1) = Replace(Replace(oMatches(0).subMatches(0), "(", ""), ")", "")
                Rng.Value = RegExp.Replace(Rng.Value, "")
            End If
        End If
    Next
End Sub
 

<#0>

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Это проще. Как там у скульпторов? Отсекаете у показанной формулы лишнее — и получаете… если не шедевр, то нужную формулу   :)  
=ЛЕВСИМВ(A2;ПОИСК(«/»;ПОДСТАВИТЬ(A2;» «;»/»;ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;» «;))))-1)

 

ateccc

Пользователь

Сообщений: 7
Регистрация: 17.10.2014

vikttur, у меня Ваша формула не работает, предлагает внести исправления по количеству скобок, можете скинуть файл с формулой уже.
Doober, спасибо. Макрос работает)

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

ateccc, тут в соседней теме говорили про избыточное цитирование — у Вас та же проблема. Зачем вообще процитировали, да ещё всё целиком?

 

ateccc

Пользователь

Сообщений: 7
Регистрация: 17.10.2014

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#9

18.10.2014 01:36:15

Цитата
— Вы за меня и кушать будете?
Двое_из_ларца:
— Ага! :)

Прикрепленные файлы

  • коды.xls (29.5 КБ)

 

ateccc

Пользователь

Сообщений: 7
Регистрация: 17.10.2014

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#11

20.10.2014 23:51:32

Цитата
Doober пишет: Не успеешь за формулистами. Удаляет с первого столбца и переносит в соседний RegExp.Pattern =   «s(S+)$»

Doober , это, наверно, я ещё не успеваю понимать так быстро… но весь код прочитать смогла     :oops:    кроме главного нюанса… вижу: s

пробел — ( — без пробела несколько символов — ) — окончание строки…

 но ведь  «(»  соответствует  последовательность «(» синтаксисом регулярок …  правильно ли я вижу?? или «s(» по логике «пробел и скобка» тоже правильно?… или  символ всегда пишется между слэшем и скобкой   (например, n( -новая строка начинающаяся со скобки или что-нибудь ещё) или скобка всегда понятна и без слэша?… пользовалась

подсказкой Максима

, но подумала многое, а уверенности никакой  :(  … ребята, извините, но я уже по буквам начинаю разбираться… p.s. с клавиатурой мы летом разобрались  8)   вашими стараниями…

Изменено: JeyCi20.10.2014 23:52:01

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#12

10.12.2014 17:43:11

всё-таки сработало…
— не могу не поддержать ветку идеей

отсюда

— вошла во вкус к Replace’у   :)

Код
Sub t()
  With CreateObject("vbscript.regexp")
    .ignorecase = True: .Global = True: .MultiLine = True: .Pattern = "(s(S+)$)"
    For Each c In Selection: c.Value = .Replace(c.Value, ""): Next 
  End With
End Sub

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#13

10.12.2014 21:15:52

Так?

Код
' Без последней части
Function FixCell(cell As Range)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True: .Pattern = "^(.+)s+(?.+)?$"
        FixCell = .Execute(cell.Value)(0).SubMatches(0)
    End With
End Function

' Последняя часть
Function LastPart(cell As Range)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True: .Pattern = "^.+s+(?(.+?))?$"
        LastPart = .Execute(cell.Value)(0).SubMatches(0)
    End With
End Function 

Прикрепленные файлы

  • пример.xls (74 КБ)

There is no knowledge that is not power

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

#14

10.12.2014 22:15:36

тогда попробую расшифровать — чтобы понять

Цитата
Johny пишет: Pattern = «^(.+)s+(?.+)?$»

? распознаём: (шаблон любое количество символов), пробел или несколько пробелов, открывающая скобка, несколько символов, закрывающая скобка, символ, конец строки… точки означают отношение к объекту ( VBScript.RegExp)… ^ значит исключаем это рег. выражение…  FixCell = .Execute(cell.Value)(0).SubMatches(0) — вобщем убираем? (SubMatches(0)) первое встретившееся такое выражение: всё что в скобках (.+), пробелы s+, открывающую скобку (?, закрывающая скобка после нескольких символов .+)? за которыми конец строки $

Цитата
Johny пишет: Pattern = «^.+s+(?(.+?))?$»

вобщем убираем первое встретившееся (SubMatches(0)) такое выражение: любое количество символов .+, пробел или несколько s+, открывающую скобку (?, за которой шаблон (.+?), который не совсем понимаю ЗАЧЕМ вносить в исключения, после чего закрывающая скобка )? за которыми конец строки $

Johny

признайтесь честно что написали  :) , а то лишили меня спокойного сна… если я неверно расшифровываю, то предупредите please… а то ведь не усну… особенно выделенное зелёным смущает… и скажу честно, я не ТС и на вопрос «так ли?» — ответить всё равно не смогу  :oops:  а понять интересно

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#15

10.12.2014 22:40:48

Кстати, в FixCell (? и )? необязательны — их можно удалить.  :)  Привожу пояснение с этой поправкой.

Код
 .Pattern = "^(.+)s+.+$"

Всё очень просто.
^ и $ определяют всю строку.
Раз нам надо «до последнего пробела», то мы знаем, что первый пробел с конца.
Символ $ нам даёт конец текста. .+ даёт весь текст в конце, а s+ и есть наш последний пробел.
Всё, что до него — это наша искомая строка, то есть с начала строки ^ до последнего пробела s+.

LastPart.

Код
"^.+s+(?(.+?))?$"
 

Тут принцип такой же, что и в FixCell, но я увидел, что в некоторых словах нет скобок вокруг последнего слова. А так как автору нужен текст без скобок, то (? и )? помогают нам исключить их, если таковые есть. Другими словами, если их не написать, то (.+?) заберёт и скобки, но они нам не нужны. Остальное — всё как в FixCell.
Что касается SubMatches(0), то это просто наш искомый текст, заключённый в скобки. Он считается слева направо: первый — 0, второй — 1 и так далее.
Если использовать Early Binding, то можно расписать попонятней и подробней. Для этого указываем библиотеку (Tools -> References ->Microsoft VBScript Regular Expressions 5.5).

Код
 Function LastPart(cell As Range)
    
    Dim re As RegExp
    Dim mc As MatchCollection
    Dim m As Match
    Dim submc As SubMatches
    
    Set re = New RegExp
    re.Pattern = "^.+s+(?(.+?))?$"
    Set mc = re.Execute(cell.Value)
    Set m = mc.Item(0)
    Set submc = m.SubMatches
    LastPart = submc.Item(0)
    
End Function

Изменено: Johny10.12.2014 22:43:29

There is no knowledge that is not power

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

Можно и по попроще
разбиваем сплитом на массив, переоределям размерность массива и джоиним новый массив

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#17

10.12.2014 23:00:58

Цитата
B.Key пишет: Можно и по попроще

Я дико извиняюсь, но какой смысл вкладывается в слово «попроще»?

There is no knowledge that is not power

 

JeyCi

Пользователь

Сообщений: 3357
Регистрация: 27.11.2013

ой, господа, мне это до следующего года занятие — уложить всё это в мозг… поэтому не ждите быстрого понимания  :)  … но всё равно большое спасибо за ответ!.. теперь засну… потому что в общем и целом

Johny

, кажется мне, вы за сегодня успели дать мне и статью почитать и сами по-быстрому резюме той статьи составили… respect… успехов вам по жизни — чтобы всё было так же быстро, (очень) полномасштабно и с пользой    8)  
p.s.

B.Key

мы тут просто случайно за рэгэксп зацепились (не судите строго) ради интереса для общего развития — на примере этой ветки… и кстати очень простые объяснения получились у

Johny

… читать приятнее, чем нобелевских лауреатов или ещё кого — там вообще ничего не понять… а тут на форуме очень многих очень приятно читать :)

Изменено: JeyCi10.12.2014 23:13:56

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

Попроще это  без регэкспа :)
———
Для меня это просто, для обычного поль зователя это вынос мозга.

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#20

10.12.2014 23:10:11

Цитата
B.Key пишет: Попроще этобез регэкспа

Феерично!  :D  Ну хотя да — огород из джоинов и сплитов, действительно, будет попроще.  :)  Лет десять назад я бы так и сделал.  :D

There is no knowledge that is not power

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

#21

11.12.2014 00:23:48

Johny, куда уж мне до Вас с Вашим опытом и 10 летним стажем.

Скрытый текст

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#22

11.12.2014 00:48:55

B.Key,   :D

Код
Function insTxt(txt)
insTxt = Left$(txt, InStrRev(txt, " ") - 1)
End Function

Изменено: RAN11.12.2014 00:49:22

 

B.Key

Пользователь

Сообщений: 633
Регистрация: 26.02.2014

#23

11.12.2014 00:56:13

Я согласен полностью, instr еще быстрее и проще, меня удивило другое:

Цитата
Johny пишет: Лет десять назад я бы так и сделал.
 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#24

11.12.2014 21:37:12

Цитата
B.Key пишет: меня удивило другое:

Ну вот через 10 лет и поймёте…

There is no knowledge that is not power

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

Я имел ввиду, что B.Key через 10 лет прокачает скилл и будет использовать регэкспы.  :D

There is no knowledge that is not power

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

 Может и будет, но показанный им пример говорит о том, что по скорости выигрыш не за Вами))
На моей машине:
0,0625 split
6,796875 regexp
===
Вот и хотелось бы понять, почему лет через 10 B.Key должен будет перейти на регулярки? :-)

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Где наш главный защитник крепких регулярных выражений? Саша!!! Ты где?!  :)
0,0546875 split
6,773438 regexp

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

А с Early Binding? :)

There is no knowledge that is not power

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#30

12.12.2014 00:01:59

Цитата
vikttur пишет: Саша!!! Ты где?!

Я за него.
Всего 1 строчка, и если не сравнялись, то существенно приблизились.

Скрытый текст

Like this post? Please share to your friends:
  • Удаление пользовательских стилей excel
  • Удаление повторяющихся строк в excel vba
  • Удаление повторяющихся значений в excel в одном столбце
  • Удаление повторов в ячейке excel
  • Удаление переносов строк в word