Удалить часть текста внутри ячейки |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Помогите решить на VBA Удалить из ячейки определенные слова если ячейка содержит слово Исходный текст «листок корень дерево трава ветка листочек земля» если ячейка содержит «дерево» удалить из ячейки «листок, ветка, листочек» конечный результат «корень дерево трава земля» |
|
Помогите решить макросом Удалить из ячейки определенные слова если ячейка содержит слово Исходный текст «листок корень дерево трава ветка листочек земля» если ячейка содержит «дерево» удалить из ячейки «листок, ветка, листочек» конечный результат «корень дерево трава земля» |
|
{quote}{login=pash}{date=12.06.2012 09:02}{thema=}{post}Помогите решить макросом…{/post}{/quote} http://www.programmersforum.ru/showthread.php?t=204664 |
|
ikki Пользователь Сообщений: 9709 |
ну так и там тоже был нужен макрос. полностью аналогичная ссылка. фрилансер Excel, VBA — контакты в профиле |
нужно что то типа, у меня массив 50 000 из которого автоматически надо удалить слова если ячейка содержит слово. Удаление из ячейки определенного набора символов Нужно чтобы стало: Sub ReplaceSymbols() |
|
Помогите кто может очень нужно для работы, я с макросами не знаком. |
|
Hugo Пользователь Сообщений: 23257 |
Мало информации. |
Прикладываю файл, то что необходимо получить, после обработки массива |
|
Hugo Пользователь Сообщений: 23257 |
Офигеть… |
Hugo Пользователь Сообщений: 23257 |
Задачка интересная. |
ikki Пользователь Сообщений: 9709 |
«не 5 минут» свободных было, набросал пока вот так. фрилансер Excel, VBA — контакты в профиле |
Hugo Пользователь Сообщений: 23257 |
У меня есть мысль вообще не использовать InStr() и Replace(), т.к. не отслеживается слово целиком. |
ikki Пользователь Сообщений: 9709 |
Hugo, я бы с большим интересом посмотрел на твою реализацию этой задачи со словарями — ибо пока я такой необходимости не вижу, что называется, «в упор». фрилансер Excel, VBA — контакты в профиле |
Hugo Пользователь Сообщений: 23257 |
Некогда сейчас. для каждой строки создаём свой словарь! А необходимость может возникнуть, если например |
Hugo Пользователь Сообщений: 23257 |
Дмитрий, я думаю надёжнее замену делать не заменой, а отбором |
nerv Пользователь Сообщений: 3071 |
с латиницей можно так Sub example() Private Function ReplaceRE(ByRef expression As String, _ |
Hugo Пользователь Сообщений: 23257 |
Во, це дило Sub example() Private Function ReplaceRE(ByRef expression As String, _ Можно прикрутить… |
Hugo Пользователь Сообщений: 23257 |
Дмитрий, я думаю о том, как обезопаситься и от нахождения в тексте того, чего нет, и от удаления того, чего не нужно. |
ОГРОМНОЕ СПАСИБО!!! ВСЕМ КТО ОТКЛИКНУЛСЯ ! Вариант The_Prist работает так как я и хотел чтобы он работал. обрабатывает именно тот столбец который нужен, и можно задать большой список соответствий при этом он это делает довольно быстро. СПАСИБО!!! |
|
nerv Пользователь Сообщений: 3071 |
{quote}{login=The_Prist}{date=14.06.2012 02:16}{thema=}{post}nerv, не совсем понял, как такая замена будет работать…может голова уже забилась или я что не так понимаю…Надо: p.s.: на почту опять не отвечаешь. Если не нужно, так и скажи. Надоедать я не буду. Неопределенность хуже всего ) |
Hugo Пользователь Сообщений: 23257 |
Александр, теперь я не понял — ты перегрелся? |
Hugo Пользователь Сообщений: 23257 |
Дмитрий, да это синтетический пример, какая разница, что удалять. |
Hugo Пользователь Сообщений: 23257 |
Вот: Sub test() |
ikki Пользователь Сообщений: 9709 |
можно добавить в начало-конец исходной строки по одному пробелу — и заменять так: в принципе, в своем примерчике я что-то подобное начал делать, но до конца не додумал — добавлял только конечные пробелы. останется вопрос сравнения по скорости. фрилансер Excel, VBA — контакты в профиле |
Hugo Пользователь Сообщений: 23257 |
Да, с пробелами должно получиться. Но их нужно и к заменяемым прибавлять, а после замен всё равно application.trim нужен. |
Hugo Пользователь Сообщений: 23257 |
Хм, заменил средний критерий на |
Hugo Пользователь Сообщений: 23257 |
Вот тут пробелов не хватало. Тогда да, работает. |
nerv Пользователь Сообщений: 3071 |
#30 15.06.2012 21:34:02 по теме: регой сперва можно проверить, содержит ли строка нужную подстроку, а затем заменить. Для проверки есть метод Test The_Prist, все правильно, последнее письмо от 2-го числа: «Поиск не находит. Мне все равно, где он будет, главное чтобы сообщения успели загрузиться, т.е. были до него.» Чебурашка стал символом олимпийских игр. А чего достиг ты? |
I am trying to create an Excel VBA that would delete only a specific part of the cell in only one column.
In Column A, I have a directory values:
For example:
Directoryof K:dataAdmin
What I would like to do is remove the «Directoryof
» from all the cells in column A and leave only the remaining text that follows it.
asked Jul 28, 2015 at 16:44
To create a macro to perform the above follow the below steps:
- Click the «Developer» tab on the top menu.
- You will find an option «Record Macro».
-
Click the Record Macro ->
a. A dialog box appears, give your macro a name
b. Shortcut key (if you want) can give by pressing (shift and any key such as
letters)
c. Store macro in : This workbook (this allows your macro to run on this sheet). -
Click on «Use Relative References».
-
Once you are done, just perform the delete operation ( by removing the portion you do not want) on one of the column so that the macro may record the process which you are performing.
-
Once done, below at the lowest pane you will find Stop Macro option (a small blue square box). Click it to stop the recording of the macro.
-
Now you are ready with a macro to replicate the same without you performing the operation.
-
Just goto any other column where you want to perform the operation and click on «Macro» option on the developer tab and then click on your created marco, and you will see the magic happen.
answered Jul 28, 2015 at 17:24
You could probably use regex to accomplish what you are going for. Regular Expressions are often used for finding patterns. If all of your follows the same format, you could break your strings apart into two capture groups with something like:
(.+)([A-Z]:\.+)
https://regex101.com/r/uD4uJ0/2 <— this will show you your capture groups
Edit: I updated this link, sorry, originally had the wrong one.
This here How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops will show you how to split up capture groups if you are interested.
answered Jul 28, 2015 at 17:02
Scott TScott T
2332 gold badges5 silver badges14 bronze badges
You could use something like text to columns, fixed width, and split the columns after Directoryof and then copy/paste the values back into column A.
I’m not sure if there’s a method to do this without a helper column without VBA. If you can afford to use a second column, you can also use =LEFT(Cell, # of characters)
assuming that the part you want to strip off is always «Directoryof» and then copy/paste values back into column A.
shA.t
16.4k5 gold badges53 silver badges111 bronze badges
answered Jul 28, 2015 at 16:58
KFichterKFichter
7534 silver badges15 bronze badges
Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.
Обращение к ячейке по адресу
Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.
В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:
Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Range(«C5») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, 3) Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, «C») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).[C5] |
Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.
Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:
ActiveCell Range(«A1») Cells(1, 1) Cells(1, «A») [A1] |
Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».
Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:
‘по основному имени листа Лист2.Cells(2, 7) ‘по имени ярлыка Sheets(«Имя ярлыка»).Cells(3, 8) |
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.
Обращение к ячейке по индексу
К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.
Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.
Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.
По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):
Обращение к ячейке Range("A1:C3").Cells(5)
соответствует выражению Range("B2")
.
Обращение к ячейке по имени
Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.
Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range("Итого")
.
Запись информации в ячейку
Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:
Cells(2, 4).Value = 15 Cells(2, 4) = 15 Range(«A1») = «Этот текст записываем в ячейку» ActiveCell = 28 + 10*36 |
Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».
Чтение информации из ячейки
Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:
Sub Test() Dim a1 As Integer, a2 As Integer, a3 As Integer Range(«A3») = 6 Cells(2, 5) = 15 a1 = Range(«A3») a2 = Cells(2, 5) a3 = a1 * a2 MsgBox a3 End Sub |
Точно также можно обмениваться информацией между ячейками:
Cells(2, 2) = Range(«A4») |
Очистка значения ячейки
Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля. пустой строки или Empty:
Cells(10, 2).ClearContents Range(«D23») = 0 ActiveCell = «» Cells(5, «D») = Empty |
0 / 0 / 0 Регистрация: 17.09.2014 Сообщений: 7 |
|
1 |
|
17.09.2014, 19:30. Показов 5834. Ответов 14
Доброго времени суток! Подскажите, есть ли какой-то макрос чтобы удалить в строке все слова кроме последнего? Пример: Есть — Должно получится — 123456
0 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||
17.09.2014, 20:15 |
2 |
|||
Вот пример из множества:
1 |
0 / 0 / 0 Регистрация: 17.09.2014 Сообщений: 7 |
|
17.09.2014, 20:38 [ТС] |
3 |
Это visual basic видимо, а хотелось бы средствами эксель это сделать, если возможно
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
17.09.2014, 20:40 |
4 |
А этот код и написан в Excel или вы хотите формулами?
есть ли какой-то макрос
1 |
0 / 0 / 0 Регистрация: 17.09.2014 Сообщений: 7 |
|
17.09.2014, 20:44 [ТС] |
5 |
Я видимо что-то не совсем понимаю… у меня есть xls файлик в котором 2 колонки, в одной из них куча строк подобного вида где нужно оставить в каждой строке только последние цифры. Куда этот код нужно поместить чтобы сработало не подскажите?
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
17.09.2014, 20:52 |
6 |
Выложите пример файла
0 |
Заблокирован |
||||
17.09.2014, 20:57 |
7 |
|||
Не по теме: а два шплита на такой задаче — это круто, но не очень рационально=-O
1 |
0 / 0 / 0 Регистрация: 17.09.2014 Сообщений: 7 |
|
17.09.2014, 21:11 [ТС] |
8 |
…
0 |
0 / 0 / 0 Регистрация: 17.09.2014 Сообщений: 7 |
|
17.09.2014, 21:33 [ТС] |
10 |
12.xlsx пример файла,
0 |
snipe 4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
||||||||
18.09.2014, 07:37 |
11 |
|||||||
neexon, формула
предпалагается что инфа находится в ячейке А1 До кучи еще один вариант на VBA
Добавлено через 36 минут
1 |
balance 0 / 0 / 1 Регистрация: 17.09.2014 Сообщений: 2 |
||||
19.09.2014, 15:43 |
12 |
|||
Сообщение было отмечено neexon как решение Решениепредпалагается что инфа находится в столбце А, сплошняком без пустых строк начиная с «A1». Результат будет в столбце B.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
19.09.2014, 16:47 |
13 |
Выделить диапазон, заменить пробелзвёздочка на ничего.
0 |
0 / 0 / 1 Регистрация: 17.09.2014 Сообщений: 2 |
|
19.09.2014, 16:56 |
14 |
Replace All: *пробел на ничего. Идеальный код — отсутствие такового)
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
19.09.2014, 17:04 |
15 |
Да, сослепу не заметил что у меня после звёздочки пробел был забит — ещё удивлялся, чего это оно нелогично работает
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
19.09.2014, 17:04 |
Помогаю со студенческими работами здесь Код редактировании ячейки работает во всех случаях, кроме клика по соседней строке, как исправить? Вывод всех элементов массива, кроме последнего отнять последний столбец из всех кроме последнего В строке, состоящей из слов, определить количество слов имеющих длину, равную длине последнего слова. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 15 |
Содержание:
- Удаление текста после символа с помощью функции поиска и замены
- Удалить текст с помощью формул
- Удаление текста с помощью заливки Flash
- Удалить текст с помощью VBA (пользовательская функция)
При работе с текстовыми данными в Excel вам может потребоваться удалить текст до или после определенного символа или текстовой строки.
Например, если у вас есть данные об именах и обозначениях людей, вы можете удалить обозначение после запятой и оставить только имя (или наоборот, если вы сохраните обозначение и удалите имя).
Иногда это можно сделать с помощью простой формулы или быстрого поиска и замены, а иногда требуются более сложные формулы или обходные пути.
В этом уроке я покажу вам, как удалить текст до или после определенного символа в Excel (на разных примерах).
Итак, давайте начнем с нескольких простых примеров.
Удаление текста после символа с помощью функции поиска и замены
Если вы хотите быстро удалить весь текст после определенной текстовой строки (или перед текстовой строкой), вы можете сделать это с помощью «Найти и заменить» и подстановочных знаков.
Предположим, у вас есть набор данных, показанный ниже, и вы хотите удалить обозначение после символа запятой и оставить текст перед запятой.
Ниже приведены шаги для этого:
- Скопируйте и вставьте данные из столбца A в столбец B (это также необходимо для сохранения исходных данных)
- Выделив ячейки в столбце B, перейдите на вкладку «Главная».
- В группе «Редактирование» нажмите «Найти и выбрать».
- В параметрах, которые появляются в раскрывающемся списке, щелкните параметр «Заменить». Откроется диалоговое окно «Найти и заменить».
- В поле «Найти» введите ,* (т.е. запятая, за которой следует звездочка)
- Оставьте поле «Заменить на» пустым.
- Нажмите кнопку «Заменить все».
Вышеупомянутые шаги позволят найти запятую в наборе данных и удалить весь текст после запятой (включая запятую).
Поскольку при этом заменяется текст из выбранных ячеек, рекомендуется скопировать текст в другой столбец, а затем выполнить эту операцию поиска и замены или создать резервную копию ваших данных, чтобы исходные данные остались нетронутыми.
Как это работает?
* (знак звездочки) — это подстановочный знак, который может представлять любое количество символов.
Когда я использую его после запятой (в поле «Найти»), а затем нажимаю кнопку «Заменить все», он находит первую запятую в ячейке и считает ее совпадением.
Это связано с тем, что знак звездочки (*) считается соответствием всей текстовой строке, следующей за запятой.
Поэтому, когда вы нажимаете кнопку «Заменить все», она заменяет запятую и весь последующий текст.
Примечание: Этот метод работает хорошо, тогда у вас есть только одна запятая в каждой ячейке (как в нашем примере). Если у вас несколько запятых, этот метод всегда найдет первую запятую, а затем удалит все после нее. Таким образом, вы не можете использовать этот метод, если хотите заменить весь текст после второй запятой и оставить первый как есть.
Если вы хотите удалить все символы перед запятой, измените запись в поле поиска, поставив знак звездочки перед запятой (* вместо, *)
Удалить текст с помощью формул
Если вам нужно больше контроля над поиском и заменой текста до или после определенного символа, лучше использовать встроенные текстовые формулы в Excel.
Предположим, у вас есть приведенный ниже набор данных, из которого вы хотите удалить весь текст после запятой.
Ниже приведена формула для этого:
= ЛЕВЫЙ (A2; НАЙТИ (";"; A2) -1)
В приведенной выше формуле используется функция НАЙТИ, чтобы найти положение запятой в ячейке.
Этот номер позиции затем используется функцией LEFT для извлечения всех символов перед запятой. Поскольку мне не нужна запятая как часть результата, я вычел 1 из полученного значения формулы поиска.
Это был простой сценарий.
Возьмем немного сложный.
Предположим, у меня есть этот набор данных ниже, из которого я хочу удалить весь текст после второй запятой.
Вот формула, которая сделает это:
= ЛЕВЫЙ (A2; НАЙТИ ("!", ПОДСТАВИТЬ (A2, ",", "!", 2)) - 1)
Поскольку в этом наборе данных есть несколько запятых, я не могу использовать функцию НАЙТИ, чтобы получить позицию первой запятой и извлечь все, что находится слева от нее.
Мне нужно как-то узнать положение второй запятой, а затем извлечь все, что находится слева от второй запятой.
Для этого я использовал функцию ЗАМЕНА, чтобы заменить вторую запятую восклицательным знаком. Теперь это дает мне уникальный персонаж в камере. Теперь я могу использовать положение восклицательного знака, чтобы извлечь все, что находится слева от второй запятой.
Эта позиция восклицательного знака используется в функции LEFT для извлечения всего, что находится до второй запятой.
Все идет нормально!
Но что, если в наборе данных есть непоследовательное количество запятых.
Например, в приведенном ниже наборе данных в некоторых ячейках есть две запятые, а в некоторых — три запятые, и мне нужно извлечь весь текст до последней запятой.
В этом случае мне нужно как-то определить позицию последнего вхождения запятой, а затем извлечь все, что находится слева от нее.
Ниже приведена формула, которая сделает это
= ЛЕВЫЙ (A2; НАЙТИ ("!", ПОДСТАВИТЬ (A2, ",", "!", LEN (A2) -LEN (ПОДСТАВИТЬ (A2, ",", "")))) - 1)
В приведенной выше формуле функция LEN используется для определения общей длины текста в ячейке, а также длины текста без запятой.
Когда я вычитаю эти два значения, получается общее количество запятых в ячейке.
Таким образом, это дало бы мне 3 для ячейки A2 и 2 для ячейки A4.
Это значение затем используется в формуле ЗАМЕНА для замены последней запятой восклицательным знаком. И затем вы можете использовать левую функцию для извлечения всего, что находится слева от восклицательного знака (где раньше была последняя запятая)
Как вы можете видеть в примерах, использование комбинации текстовых формул позволяет обрабатывать множество различных ситуаций.
Кроме того, поскольку результат связан с исходными данными, при изменении исходных данных результат будет автоматически обновляться.
Удаление текста с помощью заливки Flash
Flash Fill — это инструмент, который был представлен в Excel 2013 и доступен во всех последующих версиях.
Он работает, выявляя закономерности, когда вы вручную вводите данные, а затем экстраполируете их, чтобы получить данные для всего столбца.
Поэтому, если вы хотите удалить текст до или после определенного символа, вам просто нужно показать flash fairy, как будет выглядеть результат (введя его вручную пару раз), и flash fill автоматически распознает узор и даст вам результаты, достижения.
Позвольте показать вам это на примере.
Ниже у меня есть набор данных, из которого я хочу удалить весь текст после запятой.
Вот шаги, чтобы сделать это с помощью Flash Fill:
- В ячейке B2, которая является соседним столбцом наших данных, вручную введите «Jeffery Haggins» (что является ожидаемым результатом).
- В ячейке B3 введите «Тим Скотт» (ожидаемый результат для второй ячейки).
- Выберите диапазон B2: B10
- Перейдите на вкладку «Главная»
- В группе «Редактирование» щелкните раскрывающийся список «Заливка».
- Нажмите на Flash Fill.
Вышеупомянутые шаги дадут вам результат, как показано ниже:
Вы также можете использовать сочетание клавиш Flash Fill. Ctrl + E после выбора ячеек в столбце результатов (столбец B в нашем примере)
Flash Fill — замечательный инструмент, и в большинстве случаев он способен распознать узор и дать вам правильный результат. но в некоторых случаях он может не распознать шаблон правильно и может дать неверные результаты.
Так что не забудьте еще раз проверить результаты Flash Fill.
И точно так же, как мы удалили весь текст после определенного символа с помощью флэш-заливки, вы можете использовать те же шаги, чтобы удалить текст перед определенным символом. просто покажите вручную в соседнем столбце flash fill, как результат должен выглядеть как мой Интернет, а все остальное сделает он.
Удалить текст с помощью VBA (пользовательская функция)
Вся концепция удаления текста до или после определенного символа зависит от нахождения позиции этого символа.
Как показано выше, найти последнее вхождение этого символа хорошим означает использовать смесь формул.
Если это то, что вам нужно делать довольно часто, вы можете упростить этот процесс, создав настраиваемую функцию с помощью VBA (называемую функциями, определяемыми пользователем).
После создания вы можете повторно использовать эту функцию снова и снова. Это также намного проще и проще в использовании (поскольку большая часть тяжелой работы выполняется кодом VBA в серверной части).
Ниже кода VBA, который можно использовать для создания настраиваемой функции в Excel:
Функция LastPosition (rCell As Range, rChar As String) 'Эта функция выдает последнюю позицию указанного символа' Этот код был разработан 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 Выход из функции End If Next i End Function
Вам необходимо поместить код VBA в обычный модуль редактора VB или в личную книгу макросов. Когда он у вас есть, вы можете использовать его как любую другую обычную функцию рабочего листа в книге.
Эта функция принимает 2 аргумента:
- Ссылка на ячейку, для которой вы хотите найти последнее вхождение определенного символа или текстовой строки.
- Символьная или текстовая строка, позицию которой вам нужно найти
Предположим, теперь у вас есть приведенный ниже набор данных, и вы хотите удалить весь текст после последней запятой и иметь только текст до последней запятой.
Ниже приведена формула, которая сделает это:
= ЛЕВЫЙ (A2; LastPosition (A2; ",") - 1)
В приведенной выше формуле я указал, чтобы найти позицию последней запятой. Если вы хотите найти положение какого-либо другого символа или текстовой строки, вы должны использовать это как второй аргумент в функции.
Как видите, это намного короче и проще в использовании по сравнению с формулой с длинным текстом, которую мы использовали в предыдущем разделе.
Если вы поместите код VBA в модуль в книге, вы сможете использовать эту настраиваемую функцию только в этой конкретной книге. Если вы хотите использовать это во всех книгах в вашей системе, вам необходимо скопировать и вставить этот код в личную книгу макросов.
Вот некоторые из писем, которые вы можете использовать для быстрого удаления текста до или после определенного символа в Excel.
Если это простая разовая задача, вы можете сделать это с помощью функции поиска и замены. что, если это немного сложнее, тогда вам нужно использовать комбинацию встроенных формул Excel или даже создать свою собственную формулу с помощью VBA.
Надеюсь, вы нашли этот урок полезным.
I want to trim a string in MS Excel each cell to 100 characters in a column with 500 cells.
Starting with first cell, check if string length is or equal 100 characters. If the words are more than 100, then remove 1 word in the cell, then check again, if it’s more than 100 remove another word until the string is less to 100. Then paste the less than 100 character string into the same cell replacing previous more than 100 character string.
Then move to another cell and replete the previous step.
The words to be removed are in an array
Here is my code so far
Sub RemoveWords()
Dim i As Long
Dim cellValue As String
Dim stringLenth As Long
Dim myString As String
Dim words() As Variant
words = Array("Many", "specific ", "Huawei", "tend", "Motorolla", "Apple")
myString = "Biggest problem with many phone reviews from non-tech specific publications is that its reviewers tend to judge the phones in a vacuum"
For i = 1 To 13
cellValue = Cells(i, 4).Value
If Not IsEmpty(cellValue) Then
stringLength = Len(cellValue)
' test if string is less than 100
If stringLength > 100 Then
Call replaceWords(cellValue, stringLength, words)
Else
' MsgBox "less than 100 "
End If
End If
Next i
End Sub
Public Sub replaceWords(cellValue, stringLength, words)
Dim wordToRemove As Variant
Dim i As Long
Dim endString As String
Dim cellPosition As Variant
i = 0
If stringLength > 100 Then
For Each wordToRemove In words
If InStr(1, UCase(cellValue), UCase(wordToRemove )) = 1 Then
MsgBox "worked word found" & " -- " & cellValue & " -- " & key
Else
Debug.Print "Nothing worked" & " -- " & cellValue & " -- " & key
End If
Next wordToRemove
Else
MsgBox "less than 100 "
End If
End Sub