powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удаление слов в колонке согласно списку (библиотеки )
19 сообщений из 19, страница 1 из 1
Удаление слов в колонке согласно списку (библиотеки )
    #34711760
Салик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем.

Подскажите, необходимо удалить из колонки слова, словосочетания, буквы, знаки, согласно некоего списка (словаря) слов подлежащих удалению
Возможно ли это сделать макросом?
если да то полдскажите плиз
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34712787
Салик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попытаюсь разъяснить вопрос, видимо из-за не однозначности вопроса молчание :(
Основная мысль убрать из ячейки весь "мусор" согласно списка этих "мусорных" слов, словосочетаний и букв, текст для замены - это часть текста из удаляемой ячейки
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34712816
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
replace в цикле - тебе поможет
P.S.
Не отвечают потому-что слишком простая задача
Попробуй выложить, свои попытки, глядишь дело и пойдет.
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34712836
Салик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor
P.S.
Не отвечают потому-что слишком простая задача
Попробуй выложить, свои попытки, глядишь дело и пойдет.
Возможно, это и простая задача но проблема в том что я только изучаю Visual Basic причем кроме того как записать макрос макрорекордером я пока не умею и пытаюсь разобраться и все мои четные попытки пока не удачны.
Можно сказать если бы не было бы необходимости то наверно и не пришлось бы разбираться т.к. с программированием я на «Ты», можно сказать ученик по несчастью, вот по этому как раз и пришлось обратится к профессионалам, дабы на примерах разобраться что и как работает
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34712912
FAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саликкроме того как записать макрос макрорекордером я пока не умею
Боюсь, что макрорекордера в данном случае будет маловато-то
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34712961
Салик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FAndrew Саликкроме того как записать макрос макрорекордером я пока не умею
Боюсь, что макрорекордера в данном случае будет маловато-то
Не знаю я уже думал что по каждому слову запускать замену а в случае изменения или добавления новых или пропущеных слов дописывать строки в макрос
Selection.Replace What:="НОВОЕ СЛОВО", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713002
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СаликSelection.Replace What:="НОВОЕ СЛОВО", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
уже что-то
Запись макросов и что это дает
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713059
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Салик, не поверишь но 5 лет назад я начал изучние VB именно с того, что начал записывать макросы и именно для того чтобы удалить из обрабатываемого текста мусор.

Алгоритм удаления мусора предлагаю такой.

1. Найди самое длинное выражение в библиотеке мусорных слов (просто запомни его).
2. Включи запись макроса
3. Нажми в панели "Найти и заменить"
4. Введи удаляемое выражение и нажми "Заменить все"
5. Останови запись макроса
6. Войди в редактор VBA
7. Найди свой записаный макрос и просто проанализируй какая часть кода отвечает за то ЧТО ищется и заменяется.
8. Для того чтобы вставить следующее выражение тебе понадобятся такие приятные мелочи.
- Цикл FOR NEXT (например)
- Собственно база заменяемых выражений. Для начала их можно хранить в текстовом файле. Для чтения и записи в текстовые файлы поищи по форуму по "OPEN" "Line Input" "Append" "FreeFile"
9. Дальше все просто вместо явного указания заменяемого выражения ты подставляешь переменную, которая принимает значение одного из твоих выражений из базы.

Тонкости
При обработке текста частенько попадаются кавычки. Помни что для корректной работы понадобится удвоение кавычек
Четко разбей порядок замены, потому как в твоей базе могут попадаться выражения которые будут входить в более длинные. Именно поэтому желательно удалять по убыванию длины.
Думаю этого для начала хватит.
С уважением, Николай.
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713086
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
while do или repeat until
Циклы точно понадобятся, только, если список будет увеличиваться или уменьшаться (т.е. динамический), лучше использовать Do While
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713165
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и простенький пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub ClearFromDic()
 Dim iCel As Range, dicRng As Range
 Dim jCel As Range, clearRng As Range
   
    With Sheets("data")
         Set dicRng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    End With
      
    With Sheets("List")
         Set clearRng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    End With
    
    For Each iCel In dicRng
         clearRng.Replace What:=iCel.Value, _
                          Replacement:="", _
                          LookAt:=xlPart, _
                          SearchOrder:=xlByRows
    Next iCel
    
    
    For Each jCel In clearRng
         jCel.Value = Evaluate("=Trim(" & jCel.Address & ")")
    Next jCel
    
End Sub
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713191
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж простинький [][][]
Для начинающего With, Set, For Each да еще с Evaluate в одном примере.
Да он наверно сейчас убежал от компа.
Выполнение замены в указанном диапазоне Excel (VB)
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713328
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodorДа уж простинький [][][]
Для начинающего With, Set, For Each да еще с Evaluate в одном примере.
Да он наверно сейчас убежал от компа.
Выполнение замены в указанном диапазоне Excel (VB)

Простеньки в том плане, что он не учитывает особенностей конкретной задачи и вских нюансов, которые непременно возникнут, т.е. грубо, то что просили. Не так выразился я :-)
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713361
Салик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadПростеньки в том плане, что он не учитывает особенностей конкретной задачи и вских нюансов, которые непременно возникнут, т.е. грубо, то что просили. Не так выразился я :-)
Пока не могу определить честно, разбираюсь, простенький или нет но данный пример работает так как надо, спасибо
Буду разбираться
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713829
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае пусть даже и сложный, но в данном случае на примере будет гораздо легче и быстрее разобраться чем самому.
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713860
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправил один свой недочёт и добавил немного описания

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
' макрос для очистки (удаления) из диапазона всех слов из справочника
Sub ClearFromDic()
 Dim iCel As Range, dicRng As Range
 Dim jCel As Range, clearRng As Range
   
    ' определение диапазона со словами, которые необходимо очистить
    With Sheets("data")
         Set dicRng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    End With
    ' определение диапазона, который будем чистить
    With Sheets("List")
         Set clearRng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    End With
    
    ' замена всех слов из диапазона dicRng в диапазоне clearRng на "" (пусто) по  очереди
    ' конструкция For Each iCel In dicRng .... Next iCel перебирает все ячейки в диапазоне со словами по очерреди
    For Each iCel In dicRng
         clearRng.Replace What:=iCel.Value, _
                          Replacement:="", _
                          LookAt:=xlPart, _
                          SearchOrder:=xlByRows
    Next iCel
    
    ' удаление лишних пробелов в получившемся диапазоне
    For Each jCel In clearRng
         jCel.Value = Evaluate("=Trim(" & jCel.Address(, , , True) & ")")
    Next jCel
    
End Sub
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713868
Салик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadВ любом случае пусть даже и сложный, но в данном случае на примере будет гораздо легче и быстрее разобраться чем самому.
Я с Вами абсолютно согласен, спасибо еще раз
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713909
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Sub ClearFromDic()

 Dim iCel As Range, dicRng As Range
 Dim jCel As Range, clearRng As Range
   
    ' определение диапазона со словами, которые необходимо очистить
    With Sheets("data")
         Set dicRng = .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
    End With
    ' вставка функции для определения длины текста
    dicRng.Offset(,  1 ).Formula = "=LEN(RC[-1])"
    'сортировка по длине текста в обратном порядке
    dicRng.Sort Key1:=dicRng.Worksheet.Range("B2"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:= 1 , MatchCase:=False, Orientation:=xlTopToBottom
    
    ' определение диапазона, который будем чистить
    With Sheets("List")
         Set clearRng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    End With
    
    ' замена всех слов из диапазона dicRng в диапазоне clearRng на "" (пусто) по  очереди
    ' конструкция For Each iCel In dicRng .... Next iCel перебирает все ячейки в диапазоне со словами по очерреди
    For Each iCel In dicRng
         clearRng.Replace What:=iCel.Value, _
                          Replacement:="", _
                          LookAt:=xlPart, _
                          SearchOrder:=xlByRows
    Next iCel
    
    ' удаление лишних пробелов в получившемся диапазоне
    For Each jCel In clearRng
         jCel.Value = Evaluate("=Trim(" & jCel.Address(, , , True) & ")")
    Next jCel
    
End Sub
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34713922
Салик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В закромах соей библиотеке макросов нарыл один макрос так же по замене
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub ЗаменаСлов()
Dim СписокСлов
Dim a As String
    ' ниже перечисляем список слов которые необходимо заменить через запятую
СписокСлов = Array(" ", " ")
For y =  1  To UBound(СписокСлов)

a = СписокСлов(y)
    Selection.Replace What:=a, Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False

Next y
End Sub

Вопросы в следующем:
В моем варианте необходимо через запятую перечислять те нужные слова для замены не удобно когда этот список динамичный, следовательно его можно заменить на Ваш вариант
Код: plaintext
1.
2.
3.
4.
    ' определение диапазона со словами, которые необходимо очистить
    With Sheets("data")
         Set dicRng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    End With
Но тут возникает еще один вопрос привязки к именам листов и к колонкам в которых находятся список и следовательно колонка для замены
Предполагаю что можно воспользоваться следующим
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim UR2 As Variant
Dim UR1 As Variant
' и 
On Error GoTo e
Set UR1 = Application.InputBox("Где словарь", , , , , , ,  8 )
Set UR2 = Application.InputBox("Где заменять", , , , , , ,  8 )
On Error GoTo  0 
Но как это все состыковать не могу сообразить :/
...
Рейтинг: 0 / 0
Удаление слов в колонке согласно списку (библиотеки )
    #34714104
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вот вариант

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
' макрос для очистки (удаления) из диапазона всех слов из справочника
Sub ClearFromDic2()
 Dim iCel As Range, dicRng As Range
 Dim jCel As Range, clearRng As Range
   
    ' определение диапазона со словами, которые необходимо очистить, в один столбец
    Set dicRng = Application.InputBox("Где словарь", , , , , , ,  8 )
    ' определение диапазона, который будем чистить
    Set clearRng = Application.InputBox("Где заменять", , , , , , ,  8 )
        
    ' вставка функции для определения длины текста
    dicRng.Offset(,  1 ).Formula = "=LEN(RC[-1])"
    'сортировка по длине текста в обратном порядке, столбец справа должен быть свободен
    Debug.Print dicRng.Resize(,  2 ).Address
    dicRng.Resize(,  2 ).Sort Key1:=Range(dicRng( 1 ).Offset(,  1 ).Address(, , , True)), _
                            Order1:=xlDescending, Header:=xlNo, _
                            OrderCustom:= 1 , _
                            MatchCase:=False, _
                            Orientation:=xlTopToBottom

    ' замена всех слов из диапазона dicRng в диапазоне clearRng на "" (пусто) по  очереди
    ' конструкция For Each iCel In dicRng .... Next iCel перебирает все ячейки в диапазоне со словами по очерреди
    For Each iCel In dicRng
         clearRng.Replace What:=iCel.Value, _
                          Replacement:="", _
                          LookAt:=xlPart, _
                          SearchOrder:=xlByRows
    Next iCel
    
    ' удаление лишних пробелов в получившемся диапазоне
    For Each jCel In clearRng
         jCel.Value = Evaluate("=Trim(" & jCel.Address(, , , True) & ")")
    Next jCel
    
End Sub
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удаление слов в колонке согласно списку (библиотеки )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]