Удалить текст в ячейках excel vba

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

den45444

Дата: Вторник, 21.06.2016, 23:21 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 225


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Помогите с решение макроса.
Нужно удалить часть текста внутри ячейки. Текст начинается и заканчивается звездочкой «*»
Файл-пример прикрепил

К сообщению приложен файл:

ghbvth.xlsx
(11.5 Kb)

 

Ответить

wild_pig

Дата: Вторник, 21.06.2016, 23:57 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

[vba]

Код

Sub uuu()
    With CreateObject(«VBScript.RegExp»)
        .Pattern = «*.+*»
        For Each c In Range(«B4:B9»)
            c.Value = .Replace(c.Value, «»)
        Next
    End With
End Sub

[/vba]

 

Ответить

sv2014

Дата: Среда, 22.06.2016, 06:16 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 226


Репутация:

61

±

Замечаний:
0% ±


Excel 2013

den45444, вариант функции vvv в столбце P

[vba]

Код

Function vvv$(t$)
vvv = Replace(t, «*» & Split(t, «*»)(1) & «*», «»)
End Function

[/vba]

 

Ответить

_Boroda_

Дата: Среда, 22.06.2016, 07:45 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Еще вариант
[vba]

Код

Sub tt()
    Columns(«B:B»).Replace What:=»~**~*», Replacement:=»»
End Sub

[/vba]

Добавлено
При замене через Конрл+h звездочка является подстановочным знаком и обозначает любое количество произвольных символов (знак вопроса — один произвольный символ), а вот если нужно найти сам подстановочный символ, то перед ним нужно написать тильду «~», вот так: ~*
Тогда конструкцию ~**~* можно перевести на русский примерно так — «Все символы, начиная от первой и заканчивая последней звездочками (обе звездочки включительно)».


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Сообщение отредактировал _Boroda_Среда, 22.06.2016, 09:38

 

Ответить

den45444

Дата: Среда, 22.06.2016, 09:33 |
Сообщение № 5

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 225


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

_Boroda_, благодарю за помощь.
А как сделать, чтобы те строки, в которых текст со звездочками указан с новой строки, выравнивались по высоте?

 

Ответить

den45444

Дата: Среда, 22.06.2016, 09:52 |
Сообщение № 6

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 225


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

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

 

Ответить

_Boroda_

Дата: Среда, 22.06.2016, 09:58 |
Сообщение № 7

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Нууу, тут не я один отметился.
По поводу выравнивания — на первый взгляд — другой вопрос и нужно создавать новую тему, но, как оказалось, не совсем так и все немного усложняется
Вот такой вариант
[vba]

Код

Sub tt()
    With Columns(«B:B»)
        .Replace What:=Chr(10) & «~**~*», Replacement:=»»
        .Replace What:=»~**~*», Replacement:=»»
        .Rows.AutoFit
    End With
End Sub

[/vba]

Куда? Зачем?


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

den45444

Дата: Среда, 22.06.2016, 16:00 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 225


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

_Boroda_, Благодарю за помощь.

 

Ответить

Dimchec

Дата: Среда, 05.04.2023, 01:07 |
Сообщение № 9

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
20% ±


2016

Здраствуйте, |подскажите пожалуйста что нужно изменить в данном коде чтоб
На оборот текст между * * остался а все остальное уда лилось

[vba][code]

Sub uuu()
With CreateObject(«VBScript.RegExp»)
.Pattern = «*.+*»
For Each c In Range(«B4:B9»)
c.Value = .Replace(c.Value, «»)
Next
End With
End Sub[code][/vba]


DIMCHEC

 

Ответить

 

Помогите решить на VBA  

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

  Исходный текст  «листок корень дерево трава ветка листочек земля»  

  если ячейка содержит «дерево» удалить из ячейки «листок, ветка, листочек»  

  конечный результат  «корень дерево трава земля»

 

Помогите решить макросом  

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

  Исходный текст «листок корень дерево трава ветка листочек земля»  

  если ячейка содержит «дерево» удалить из ячейки «листок, ветка, листочек»  

  конечный результат «корень дерево трава земля»

 

{quote}{login=pash}{date=12.06.2012 09:02}{thema=}{post}Помогите решить макросом…{/post}{/quote}  
Похожая ситуация —

http://www.programmersforum.ru/showthread.php?t=204664

 
 

ikki

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

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

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

  полностью аналогичная ссылка.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

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

   Удаление   из   ячейки  определенного набора символов    
Есть текст в ячейке:  
Фрукт/ Apple» 123=  

  Нужно чтобы стало:  
Apple123  

   Sub ReplaceSymbols()  
Dim objRegExp As Object, sOlsString As String, sNewString As String  
sOlsString = «Фрукт/ Apple»»»» 123=»  
Set objRegExp = CreateObject(«VBScript.RegExp»)  
objRegExp.Global = True: objRegExp.IgnoreCase = True  
objRegExp.Pattern = «[«»»»,=,,/, а-я,ё]»
sNewString = objRegExp.Replace(sOlsString, «»)  
End Sub

 

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

 

Hugo

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

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

Мало информации.  
Давайте по правилам — пример, что есть, как надо.  
А то иначе Ctrl+H и 3 раза замена, записать в макрос (или не записывать, нафига, если работа уже сделана?)

 

Прикладываю файл, то что необходимо получить, после обработки массива  
Заранее спасибо за помощь

 

Hugo

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

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

Офигеть…  
А начинали «листок, ветка, листочек» :)  
Вопрос требует времени, которого нет… не на 5 минут задачка.

 

Hugo

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

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

Задачка интересная.  
Критерии отбора могут меняться/дополняться?  
Работа не разовая?  
Если ответы ДА, то есть мысли… с учётом объёма, должно быть сравнительно быстро.  
Для разовой задачи можно сделать проще и медленнее.  
Но сейчас писать некогда.  
Если есть интерес — напишите на почту (внизу замаскирована, на nxt), через неделю могу заняться :)

 

ikki

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

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

«не 5 минут» свободных было, набросал пока вот так.  
но немного сомневаюсь — сейчас условия проверяются все и независимо друг от друга.  
возможно, логика подразумевается несколько иная.  
и я даже могу догадаться — какая, но хотелось бы услышать ТС.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

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

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

У меня есть мысль вообще не использовать InStr() и Replace(), т.к. не отслеживается слово целиком.  
В общем, словари и массивы, массивы и словари :)

 

ikki

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

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

Hugo, я бы с большим интересом посмотрел на твою реализацию этой задачи со словарями — ибо пока я такой необходимости не вижу, что называется, «в упор». :(

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

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

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

Некогда сейчас.  
Но файлик отложил, и написал в нём себе такую памятку (может позже займусь):  

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

  А необходимость может возникнуть, если например    
«если ячейка содержит PG1C» — а в ячейке GPG1C или PG1CM… и аналогично при замене.

 

Hugo

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

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

Дмитрий, я думаю надёжнее замену делать не заменой, а отбором :)  
Т.е. проверяем каждое слово на отсутствие в словаре исключений, отбираем нужные в новый массив.  
Как по скорости — не знаю, может Replace и будет быстрее, но зато гарантированно не будет накладок.

 

nerv

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

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

с латиницей можно так  

  Sub example()  
   Dim text As String  
   text = «GPG1C PG1C PG1CM»  
   text = ReplaceRE(text, «PG1C»)  
End Sub  

    Private Function ReplaceRE(ByRef expression As String, _  
                         ByRef find As String, _  
                         Optional ByRef replace As String) As String  
   Static re As Object  
   If re Is Nothing Then  
       Set re = CreateObject(«vbscript.regexp»)  
   End If  
   re.pattern = «b» & find & «b»  
   ReplaceRE = re.replace(expression, replace)  
End Function

 

Hugo

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

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

Во, це дило :)  

  Sub example()  
   Dim text As String  
   text = «GPG1C PG1C 1CM PG1CM»  
   text = Application.Trim(ReplaceRE(text, «PG1C 1CM»))  
   MsgBox text  
End Sub  

    Private Function ReplaceRE(ByRef expression As String, _  
                          ByRef find As String, _  
                          Optional ByRef replace As String) As String  
   Static re As Object  
   Dim f  
   If re Is Nothing Then  
       Set re = CreateObject(«vbscript.regexp»)  
   End If  
   For Each f In Split(find)  
       re.Pattern = «b» & f & «b»  
       expression = re.replace(expression, replace)  
   Next  
   ReplaceRE = expression  
End Function  

    Можно прикрутить…

 

Hugo

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

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

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

 

ОГРОМНОЕ СПАСИБО!!! ВСЕМ КТО ОТКЛИКНУЛСЯ !  

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

    СПАСИБО!!!

 

nerv

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

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

{quote}{login=The_Prist}{date=14.06.2012 02:16}{thema=}{post}nerv, не совсем понял, как такая замена будет работать…может голова уже забилась или я что не так понимаю…Надо:  
-есть текст «B33 BM4 WB7 WS4 GBR PMSK 2W7 LLEL»  
-если в тексте встречается «PMSK», то удаляем из строки значения «B33 BM4 WB7 WS4 2W7″{/post}{/quote}  
все правильно, это я на солнце перегрелся : )  

  p.s.: на почту опять не отвечаешь. Если не нужно, так и скажи. Надоедать я не буду. Неопределенность хуже всего )

 

Hugo

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

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

Александр, теперь я не понял — ты перегрелся? :)  
Мне кажется, что с RegExp как раз правильно, то что нужно получается.  
Я там ниже чуть поэксперементировал с удалением — как раз удаляет нужные слова и не калечит ненужные.  
Теперь ещё сперва аналогичный поиск прикрутить (целого слова, а не части) — и считай готов надёжный вариант.  
Но мне кажется, что на словаре всёж получилось бы быстрее — тут ведь тоже на каждый поиск нужна своя строка, или вернее по каждой строке нужно делать кучу поисков, потом кучу замен…

 

Hugo

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

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

Дмитрий, да это синтетический пример, какая разница, что удалять.  
Главное, чтоб из «GPG1C PG1C» осталось «GPG1C», а не куцее «G», как после Replace.

 

Hugo

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

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

Вот:  

  Sub test()  
Dim s$  
s = «GPG1C PG1C»  
MsgBox s  
s = Replace(s, «PG1C», «»)  
MsgBox s  
End Sub

 

ikki

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

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

можно добавить в начало-конец исходной строки по одному пробелу — и заменять так:  
s = Replace(s, » PG1C «, » «)  
искать — аналогично.  
после всех поисков/замен — убрать по одному пробелу в начале/конце строки.  

  в принципе, в своем примерчике я что-то подобное начал делать, но до конца не додумал — добавлял только конечные пробелы.  
а теперь думаю — что, вкупе с начальными, всё должно получиться.  

  останется вопрос сравнения по скорости.  
на 55000 строк.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

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

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

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

 

Hugo

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

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

Хм, заменил средний критерий на  
P A B C D E F G  
получил из средней строки результат  
33 53 K2 Y0 68 W7 WWM L3 N K34 K1 P1 P1W P1 P1 PM22 KK0 S96 SR SSK 26 2 2W5 2Z 3  
Это ведь совсем не то, что должно было бы быть, если бы было так…

 

Hugo

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

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

Вот тут пробелов не хватало.  
Так нужно, иначе в начале-конце не заменяет:  
    avArr(lr, lc) = Replace(» » & avArr(lr, lc) & » «, » » & sStr(le) & » «, «»)  

  Тогда да, работает.

 

nerv

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

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

#30

15.06.2012 21:34:02

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

  The_Prist, все правильно, последнее письмо от 2-го числа: «Поиск не находит. Мне все равно, где он будет, главное чтобы сообщения успели загрузиться, т.е. были до него.»

Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина — самый громкий звук
https://github.com/nervgh

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.

Community's user avatar

asked Jul 28, 2015 at 16:44

Cory Gegg's user avatar

To create a macro to perform the above follow the below steps:

  1. Click the «Developer» tab on the top menu.
  2. You will find an option «Record Macro».
  3. 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).

  4. Click on «Use Relative References».

  5. 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.

  6. 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.

  7. Now you are ready with a macro to replicate the same without you performing the operation.

  8. 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

Sudhanshu Agrawal's user avatar

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.

Community's user avatar

answered Jul 28, 2015 at 17:02

Scott T's user avatar

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's user avatar

shA.t

16.4k5 gold badges53 silver badges111 bronze badges

answered Jul 28, 2015 at 16:58

KFichter's user avatar

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")

Обращение к ячейке 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


Студворк — интернет-сервис помощи студентам

Доброго времени суток!

Подскажите, есть ли какой-то макрос чтобы удалить в строке все слова кроме последнего?

Пример:

Есть —
Duracell MN2400-4 (LR03) Size»AAA», 1.5V, щелочной (alkaline) <уп. 4 шт.> 123456

Должно получится —

123456



0



toiai

3217 / 966 / 223

Регистрация: 29.05.2010

Сообщений: 2,085

17.09.2014, 20:15

2

Вот пример из множества:

Visual Basic
1
2
3
Sub pr()
    Cells(1, 1) = Split(Cells(1, 1))(UBound(Split(Cells(1, 1))))
End Sub



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 или вы хотите формулами?
Но кажется вы же хотели

Цитата
Сообщение от neexon
Посмотреть сообщение

есть ли какой-то макрос



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

Visual Basic
1
s=mid$(s,instrrev(s," ")+1)

Не по теме:

а два шплита на такой задаче — это круто, но не очень рационально=-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,
что же вы в раздел VBA полезли если хотите формулами Excel все сделать

формула

Visual Basic
1
=ПСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";СИМВОЛ(13);ДЛСТР(СЖПРОБЕЛЫ(A1))-ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";"")));НАЙТИ(СИМВОЛ(13);ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";СИМВОЛ(13);ДЛСТР(СЖПРОБЕЛЫ(A1))-ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";""))))+1;100)

предпалагается что инфа находится в ячейке А1

До кучи еще один вариант на VBA

Visual Basic
1
2
3
Public Function pr(asd as string) as string
pr=strRevese(mid(StrRevese(trim(asd)),1,instr(1,StrRevese(trim(asd))," ")-1))
end function

Добавлено через 36 минут
В операторе strRevese допустил ошибку
правильно будет так StrReverse



1



balance

0 / 0 / 1

Регистрация: 17.09.2014

Сообщений: 2

19.09.2014, 15:43

12

Лучший ответ Сообщение было отмечено neexon как решение

Решение

предпалагается что инфа находится в столбце А, сплошняком без пустых строк начиная с «A1». Результат будет в столбце B.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub pr()
 
Dim mass() As String
Dim i As Integer
Dim MyRange As Range
 
 
Set MyRange = Range("A1", Range("A1").End(xlDown))
 
For i = 1 To Range("A1").End(xlDown).Row
 
    mass = Split(MyRange.Cells(i).Text, " ")
 
    MyRange.Offset(0, 1).Cells(i).Value = mass(UBound(mass))
 
Next i
 
 
End Sub



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

Помогаю со студенческими работами здесь

Код редактировании ячейки работает во всех случаях, кроме клика по соседней строке, как исправить?
Знаю, что тема избитая, но всё же рискну спросить.
Читаю из ini файла в StringGrid значения. Нужно…

Вывод всех элементов массива, кроме последнего
Доброго времени суток, ребята! Подскажите пожалуйста, как задать условие, что бы пробел и символ &amp;…

отнять последний столбец из всех кроме последнего
из двухмерного массива отнять последний столбец из всех кроме последнего

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

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

15

Содержание:

  1. Удаление текста после символа с помощью функции поиска и замены
  2. Удалить текст с помощью формул
  3. Удаление текста с помощью заливки Flash
  4. Удалить текст с помощью VBA (пользовательская функция)

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

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

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

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

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

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

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

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

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

  1. Скопируйте и вставьте данные из столбца A в столбец B (это также необходимо для сохранения исходных данных)
  2. Выделив ячейки в столбце B, перейдите на вкладку «Главная».
  3. В группе «Редактирование» нажмите «Найти и выбрать».
  4. В параметрах, которые появляются в раскрывающемся списке, щелкните параметр «Заменить». Откроется диалоговое окно «Найти и заменить».
  5. В поле «Найти» введите ,* (т.е. запятая, за которой следует звездочка)
  6. Оставьте поле «Заменить на» пустым.
  7. Нажмите кнопку «Заменить все».

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

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

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

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

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

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

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

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

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

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

Если вам нужно больше контроля над поиском и заменой текста до или после определенного символа, лучше использовать встроенные текстовые формулы в 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:

  1. В ячейке B2, которая является соседним столбцом наших данных, вручную введите «Jeffery Haggins» (что является ожидаемым результатом).
  2. В ячейке B3 введите «Тим Скотт» (ожидаемый результат для второй ячейки).
  3. Выберите диапазон B2: B10
  4. Перейдите на вкладку «Главная»
  5. В группе «Редактирование» щелкните раскрывающийся список «Заливка».
  6. Нажмите на 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 аргумента:

  1. Ссылка на ячейку, для которой вы хотите найти последнее вхождение определенного символа или текстовой строки.
  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

Понравилась статья? Поделить с друзьями:
  • Удалить текст в рисунке word
  • Удалить текст в word от закладки до закладки
  • Удалить таблицу оставив содержимое word
  • Удалить таблицу в word 2010
  • Удалить структуру в word