Excel vba удалить до символа

Обновлено: 07.07.2024

netfrog » 19.05.2003 (Пн) 12:22

Сорри, клинит после гулянок в выходне , как определенное число символов считать - помню, а вот как читать строку до того как попадется нужное сочетание символов - не помню. Хелп, что ли. =================
Ничто так не ограничивает полет мысли программиста, как компилятор

RayShade » 19.05.2003 (Пн) 12:41

mysymbol - нудный символ до которого ты будешь читать строку

netfrog » 19.05.2003 (Пн) 12:46

=================
Ничто так не ограничивает полет мысли программиста, как компилятор

Firestorm » 19.05.2003 (Пн) 14:50

я гоняю этот mid только с тремя "данными"
типа mid(stroka,nachalo,kol-vosimv). этого хватает . просто гламурный падонак.
_________________
reborn! v.2
_________________

netfrog » 19.05.2003 (Пн) 14:57

2Fireshtorm не прокатит для первой порции данных. В моем, например, случае известно, что нужно взять строку, заканчивающуюся на ",". Сколько символов - неизвестно. Дальше да. Пример строки? "236005 Калининград, лялялялялял лялял ляля". Вот этот "Калининград" может замениться на "Тула" и песец =================
Ничто так не ограничивает полет мысли программиста, как компилятор

netfrog » 19.05.2003 (Пн) 14:59

=================
Ничто так не ограничивает полет мысли программиста, как компилятор

Firestorm » 19.05.2003 (Пн) 16:27

. просто гламурный падонак.
_________________
reborn! v.2
_________________

LsD85 » 20.05.2003 (Вт) 6:47

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

dim Stroka 'Там у тебя строчка с которой и производятся действия
for i = 0 to len(Stroka) - 1 'Тут мы как бы начинаем катать mid по строке, проверяя, где есть ","
if mid(Stroka, i, 1) = "," then ' Первый параметр у mid, оперируемая строка, втророй номер проверяемого символа, третий это обозначение, что проверяется один символ.
' Тут твои действия
' если обнаружена запятая
end if
next i

Вот так вот, если тебе надо вырезать то что находится до символа, то в действиях, напиши типа:
MyPerem = mid(Stroka, 0, i), и программа поместит содержимое до запятой в переменную MyPerem.

Ну вот вроде бы все детальнейшим образом обьяснил, вроде должно работать, если не будет, то попробуй искать от 1-го символа, а " - 1", после len убери.

netfrog » 20.05.2003 (Вт) 10:18

тоже вкусный вариант, особенно удобно. если надо несколько частей (>3) тянуть из строки. Код получается проще и удобочитаемым =================
Ничто так не ограничивает полет мысли программиста, как компилятор

waresok » 22.12.2008 (Пн) 17:49

например есть Text1.Text = "123,000"

Как содержимое до запятой, то есть "123", вырезать в отдельную переменную.

исходя из вешеописанного примера переделал так:

strA = Text1.Text
For I = 1 To Len(strA) - 1
If Mid(strA, I, 1) = "," Then
MyPerem = Mid(strA, 1, I)
Text2.Text = MyPerem
End If
Next I

возвращает "123," то есть зяпятая остается, а мне нужен только текст до зяпятой!

Эта функция извлекает левую часть строки с заданным количеством символов.

Синтаксис функции Left:

Left(строка, длина)

  • строка — обязательный аргумент: строковое выражение, из значения которого вырезается левая часть;
  • длина — обязательный аргумент: числовое выражение, указывающее количество извлекаемых символов.

Если аргумент «длина» равен нулю, возвращается пустая строка. Если аргумент «длина» равен или больше длины строки, возвращается строка полностью.

Функция Mid

Эта функция извлекает часть строки с заданным количеством символов, начиная с указанного символа (по номеру).

Синтаксис функции Mid:

Mid(строка, начало, [длина])

  • строка — обязательный аргумент: строковое выражение, из значения которого вырезается часть строки;
  • начало — обязательный аргумент: числовое выражение, указывающее положение символа в строке, с которого начинается извлекаемая часть;
  • длина — необязательный аргумент: числовое выражение, указывающее количество вырезаемых символов.

Если аргумент «начало» больше, чем количество символов в строке, функция Mid возвращает пустую строку. Если аргумент «длина» опущен или его значение превышает количество символов в строке, начиная с начального, возвращаются все символы от начальной позиции до конца строки.

Функция Right

Эта функция извлекает правую часть строки с заданным количеством символов.

Синтаксис функции Right:

Right(строка, длина)

  • строка — обязательный аргумент: строковое выражение, из значения которого вырезается правая часть;
  • длина — обязательный аргумент: числовое выражение, указывающее количество извлекаемых символов.

Если аргумент «длина» равен нулю, возвращается пустая строка. Если аргумент «длина» равен или больше длины строки, возвращается строка полностью.

Пример

В этом примере будем использовать все три представленные выше функции для извлечения из ФИО его составных частей. Для этого запишем в ячейку «A1» строку «Иванов Сидор Петрович», из которой вырежем отдельные компоненты и запишем их в ячейки «A2:A4».

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

В зависимости от этих условий, решение может быть простым, а может потребовать использование довольно сложных формул и процедур.

В этой статье я подробно опишу известные мне варианты. Поехали!

Удалить текст до последнего символа

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

  • Выделить диапазон
  • Вызвать процедуру поиска и замены со вкладки «Главная» или сочетанием клавиш Ctrl+H
  • использовать подстановочный символ * (звездочку) прямо перед искомым в строке поиска
  • оставить пустым второе поле и нажать ОК

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

Удалить текст до первого пробела — формула

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

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

Удалить текст до первого пробела - формула

Результат применения формулы

Формулы для других символов аналогичны:

Убрать текст в ячейке до первой запятой:

А чтобы удалить текст до вхождения последовательности символов, например, слова, нужно использовать в формуле длину этой последовательности, сократив ее на 1:

Здесь из адресов удаляется текст до номера дома. Длина текста в кавычках — 3 символа (д, точка и пробел):


Удалить текст в ячейке до определенного слова

Удалить текст до первой цифры

Пожалуй, вы уже догадались, но я все же объясню, как работают формулы выше:

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

Следовательно, чтобы удалить текст до первой цифры, нужно вычислить позицию первой цифры в строке. Поскольку цифр не одна, а 10, простая формула уже не подойдет. Но можно сделать это вот такой формулой массива:

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

Что за числа 48 и 57, можно прочитать подробнее тут:

Обратите внимание на фигурные скобки! Их не нужно вводить, они появятся сами при вводе формулы сочетанием клавиш Ctrl+Shift+Enter.

Формула выдаст ошибку, если цифр в строке нет.

Результат применения формулы для удаления текста до первой цифры

Убираем текст до первой цифры в ячейках формулами массива

Удаление текста в 1-2 клика с !SEMTools

Каждый из перечисленных способов хорош по-своему, но всем им недостает одного важного фактора — скорости исполнения.

В каждом из случаев нужно вводить много символов и производить много действий.

Для экономии времени я включил быстрые процедуры в меню своей надстройки для Excel — !SEMTools.

Теперь удалить текст до первого или последнего вхождения конкретного символа или подстроки, включая и не включая сам текст, можно в считанные мгновения!

При этом можно как менять данные на месте, так и автоматически выводить в соседний столбец — за это отвечает глобальный чекбокс.

Удаляем символы в тексте до первого или последнего вхождения определенного текста с !SEMTools

Хотите так же быстро обращаться с текстовыми данными в Excel и испытать на практике еще более 500 похожих процедур?

Жмите на кнопку ниже, чтобы бесплатно скачать и подключить пробную версию надстройки !SEMTools. Процедура займет пару минут.

При работе с текстовыми данными в Excel вам может потребоваться удалить текст до или после определенного символа или текстовой строки.

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


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

В этом уроке я покажу вам, как удалить текст до или после определенного символа в Excel (на разных примерах).

Итак, давайте начнем с нескольких простых примеров.

Удаление текста после символа с помощью функции поиска и замены

Если вы хотите быстро удалить весь текст после определенной текстовой строки (или перед текстовой строкой), вы можете сделать это с помощью «Найти и заменить» и подстановочных знаков.

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


Ниже приведены шаги для этого:

Вышеупомянутые шаги позволят найти запятую в наборе данных и удалить весь текст после запятой (включая запятую).


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

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

Когда я использую его после запятой (в поле «Найти»), а затем нажимаю кнопку «Заменить все», он находит первую запятую в ячейке и считает ее совпадением.

Это связано с тем, что знак звездочки (*) считается соответствием всей текстовой строке, следующей за запятой.

Поэтому, когда вы нажимаете кнопку «Заменить все», она заменяет запятую и весь последующий текст.

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

Если вы хотите удалить все символы перед запятой, измените запись в поле поиска, поставив перед запятой знак звездочки (* вместо *)

Удалить текст с помощью формул

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

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


Ниже приведена формула для этого:


В приведенной выше формуле используется функция FIND (НАЙТИ), чтобы найти положение запятой в ячейке.

Этот номер позиции затем используется функцией LEFT для извлечения всех символов перед запятой. Поскольку мне не нужна запятая как часть результата, я вычел 1 из результирующего значения формулы поиска.

Это был простой сценарий.

Возьмем немного сложный.

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


Вот формула, которая сделает это:


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

Мне нужно как-то узнать положение второй запятой, а затем извлечь все, что находится слева от второй запятой.

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

Эта позиция восклицательного знака используется в функции LEFT для извлечения всего, что находится до второй запятой.

Все идет нормально!

Но что, если в наборе данных непоследовательное количество запятых.


В этом случае мне нужно как-то определить позицию последнего вхождения запятой, а затем извлечь все, что находится слева от нее.

Ниже приведена формула, которая сделает это


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

Когда я вычитаю эти два значения, получается общее количество запятых в ячейке.

Таким образом, это дало бы мне 3 для ячейки A2 и 2 для ячейки A4.

Это значение затем используется в формуле SUBSTITUTE для замены последней запятой восклицательным знаком. И затем вы можете использовать левую функцию для извлечения всего, что находится слева от восклицательного знака (где раньше была последняя запятая)

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

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

Удаление текста с помощью заливки Flash

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

Поэтому, если вы хотите удалить текст до или после определенного символа, вам просто нужно показать flash fairy, как будет выглядеть результат (введя его вручную пару раз), и flash fill автоматически распознает узор и даст вам результаты.

Позвольте показать вам это на примере.

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


Вот шаги, чтобы сделать это с помощью Flash Fill:

Вышеупомянутые шаги дадут вам результат, как показано ниже:


Вы также можете использовать сочетание клавиш Control + E для Flash Fill после выбора ячеек в столбце результатов (столбец B в нашем примере)

Так что не забудьте еще раз проверить результаты Flash Fill.

И точно так же, как мы удалили весь текст после определенного символа с помощью флэш-заливки, вы можете использовать те же шаги, чтобы удалить текст перед определенным символом. просто покажите вручную в соседнем столбце flash fill, как результат должен выглядеть как мой Интернет, и он сделает все остальное.

Удалить текст с помощью VBA (пользовательская функция)

Вся концепция удаления текста до или после определенного символа зависит от нахождения позиции этого символа.

Как показано выше, найти последнее вхождение этого символа хорошим означает использовать смесь формул.

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

После создания вы можете повторно использовать эту функцию снова и снова. Это также намного проще и проще в использовании (поскольку большая часть тяжелой работы выполняется кодом VBA в серверной части).

Ниже кода VBA, который можно использовать для создания настраиваемой функции в Excel:

For i = rLen To 1 Step -1

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

Эта функция принимает 2 аргумента:

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

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

Ниже приведена формула, которая сделает это:


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

Как видите, это намного короче и проще в использовании по сравнению с формулой с длинным текстом, которую мы использовали в предыдущем разделе.

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

Вот некоторые из писем, которые вы можете использовать для быстрого удаления текста до или после определенного символа в Excel.

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

Читайте также: