Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как удалить все ячейки, содержащие определенное слово - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как удалить все ячейки, содержащие определенное слово (Макросы/Sub)
Как удалить все ячейки, содержащие определенное слово
AdwordsDirect Дата: Вторник, 14.03.2017, 13:16 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Ребят, не всё так просто оказалось..
Кто подскажет, каким образом теперь мне удалить все ячейки, в которых встречается определенное слово??

Понятно надеюсь, что если я просто удалю столбец с этим словом, то останутся ещё другие ячейки где оно встречается по другим "ключевым словам".
[moder]Начало тут[/moder]


Сообщение отредактировал Manyasha - Четверг, 16.03.2017, 12:29
 
Ответить
СообщениеРебят, не всё так просто оказалось..
Кто подскажет, каким образом теперь мне удалить все ячейки, в которых встречается определенное слово??

Понятно надеюсь, что если я просто удалю столбец с этим словом, то останутся ещё другие ячейки где оно встречается по другим "ключевым словам".
[moder]Начало тут[/moder]

Автор - AdwordsDirect
Дата добавления - 14.03.2017 в 13:16
Perfect2You Дата: Вторник, 14.03.2017, 16:50 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
А удалить вообще отовсюду нужно или в исходном списке (столбец A) не трогать, а удалить только из рейтинговых перечислений (начиная со столбца B).
Удалить - это просто стереть значения, или еще подвинуть ячейки, чтоб не осталось пустот?
Как определить удаляемое слово: оно будет в какой-то определенной ячейке или нужно сделать запрос пользователю, чтобы он его ввел?


Сообщение отредактировал Perfect2You - Вторник, 14.03.2017, 16:50
 
Ответить
СообщениеА удалить вообще отовсюду нужно или в исходном списке (столбец A) не трогать, а удалить только из рейтинговых перечислений (начиная со столбца B).
Удалить - это просто стереть значения, или еще подвинуть ячейки, чтоб не осталось пустот?
Как определить удаляемое слово: оно будет в какой-то определенной ячейке или нужно сделать запрос пользователю, чтобы он его ввел?

Автор - Perfect2You
Дата добавления - 14.03.2017 в 16:50
Perfect2You Дата: Вторник, 14.03.2017, 22:20 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Не дождался ответа, сделал на предположениях. Просьба оценить: угадал ли, нет ли...
[vba]
Код
Sub WordDelete()
    With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlCalculationManual: End With
    Dim t: t = Timer
    Dim data, lR As Long, i As Long, j As Long, wD As String, dic As Object
    If (ActiveCell.Column = 1) Or (ActiveCell.Row > 1) Then Exit Sub
    wD = ActiveCell.Value
    If Len(wD) = 0 Then Exit Sub
    Set dic = CreateObject("scripting.dictionary")
    i = 2
    Do While Len(Cells(1, i).Value)
        If LCase(Cells(1, i).Value) Like "*" & wD & "*" Then
            Columns(i).Delete Shift:=xlToLeft
            GoTo NXT
        End If
        lR = Cells(Rows.Count, i).End(xlUp).Row
        If lR = 3 Then
            If LCase(Cells(3, i).Value) Like "*" & wD & "*" Then Cells(3, i).ClearContents
            GoTo NX1
        End If
        data = Cells(3, i).Resize(lR - 2).Value
        Cells(3, i).Resize(lR - 2).ClearContents
        dic.RemoveAll
        For j = 1 To UBound(data)
            If Not (LCase(data(j, 1)) Like "*" & wD & "*") Then
                dic(LCase(Trim(data(j, 1)))) = i
            End If
        Next j
        If dic.Count Then Cells(3, i).Resize(dic.Count) = Application.Transpose(dic.keys)
'        If dic.Count Then
'            Cells(3, i).Resize(dic.Count) = Application.Transpose(dic.keys)
'        Else
'            Columns(i).Delete Shift:=xlToLeft
'            GoTo NXT
'        End If
NX1:
        i = i + 1
NXT:
    Loop
    
    With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlCalculationAutomatic: End With
    MsgBox "Готово!"
End Sub
[/vba]

Исходные слова (столбец A) не трогает. Только выборные (столбец B и дальше).
К сообщению приложен файл: 9383429.xlsm (70.7 Kb)


Сообщение отредактировал Perfect2You - Вторник, 14.03.2017, 22:22
 
Ответить
СообщениеНе дождался ответа, сделал на предположениях. Просьба оценить: угадал ли, нет ли...
[vba]
Код
Sub WordDelete()
    With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlCalculationManual: End With
    Dim t: t = Timer
    Dim data, lR As Long, i As Long, j As Long, wD As String, dic As Object
    If (ActiveCell.Column = 1) Or (ActiveCell.Row > 1) Then Exit Sub
    wD = ActiveCell.Value
    If Len(wD) = 0 Then Exit Sub
    Set dic = CreateObject("scripting.dictionary")
    i = 2
    Do While Len(Cells(1, i).Value)
        If LCase(Cells(1, i).Value) Like "*" & wD & "*" Then
            Columns(i).Delete Shift:=xlToLeft
            GoTo NXT
        End If
        lR = Cells(Rows.Count, i).End(xlUp).Row
        If lR = 3 Then
            If LCase(Cells(3, i).Value) Like "*" & wD & "*" Then Cells(3, i).ClearContents
            GoTo NX1
        End If
        data = Cells(3, i).Resize(lR - 2).Value
        Cells(3, i).Resize(lR - 2).ClearContents
        dic.RemoveAll
        For j = 1 To UBound(data)
            If Not (LCase(data(j, 1)) Like "*" & wD & "*") Then
                dic(LCase(Trim(data(j, 1)))) = i
            End If
        Next j
        If dic.Count Then Cells(3, i).Resize(dic.Count) = Application.Transpose(dic.keys)
'        If dic.Count Then
'            Cells(3, i).Resize(dic.Count) = Application.Transpose(dic.keys)
'        Else
'            Columns(i).Delete Shift:=xlToLeft
'            GoTo NXT
'        End If
NX1:
        i = i + 1
NXT:
    Loop
    
    With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlCalculationAutomatic: End With
    MsgBox "Готово!"
End Sub
[/vba]

Исходные слова (столбец A) не трогает. Только выборные (столбец B и дальше).

Автор - Perfect2You
Дата добавления - 14.03.2017 в 22:20
AdwordsDirect Дата: Среда, 15.03.2017, 10:32 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Чтобы удалились все ячейки, содержащие это слово из первого, изначального столбца "А".
 
Ответить
СообщениеЧтобы удалились все ячейки, содержащие это слово из первого, изначального столбца "А".

Автор - AdwordsDirect
Дата добавления - 15.03.2017 в 10:32
Manyasha Дата: Среда, 15.03.2017, 15:54 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Друзья, а какое отношение удаление ячеек по слову имеет к составлению списков? Это уже другой вопрос!

AdwordsDirect, предлагайте название для новой темы, я разделю.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеДрузья, а какое отношение удаление ячеек по слову имеет к составлению списков? Это уже другой вопрос!

AdwordsDirect, предлагайте название для новой темы, я разделю.

Автор - Manyasha
Дата добавления - 15.03.2017 в 15:54
AdwordsDirect Дата: Четверг, 16.03.2017, 10:38 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Название : "Как удалить все ячейки, содержащие определенное слово?"
 
Ответить
СообщениеНазвание : "Как удалить все ячейки, содержащие определенное слово?"

Автор - AdwordsDirect
Дата добавления - 16.03.2017 в 10:38
Perfect2You Дата: Четверг, 16.03.2017, 11:56 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Насколько понимаю, требование модератора выполнено...
В добавление к предыдущему посту с подпрограммой WordDelete.
Для удаления ТОЛЬКО из первого столбца:
[vba]
Код
Sub WordDelete1()
    With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlCalculationManual: End With
    Dim t: t = Timer
    Dim data, lR As Long, i As Long, j As Long, wD As String, dic As Object
    If (ActiveCell.Column = 1) Or (ActiveCell.Row > 1) Then Exit Sub
    wD = ActiveCell.Value
    If Len(wD) = 0 Then Exit Sub
    Set dic = CreateObject("scripting.dictionary")
        lR = Cells(Rows.Count, 1).End(xlUp).Row
        If lR = 3 Then
            If LCase(Cells(3, 1).Value) Like "*" & wD & "*" Then Cells(3, 1).ClearContents
            Exit Sub
        End If
        data = Cells(3, 1).Resize(lR - 2).Value
        Cells(3, 1).Resize(lR - 2).ClearContents
        dic.RemoveAll
        For j = 1 To UBound(data)
            If Not (LCase(data(j, 1)) Like "*" & wD & "*") Then
                dic(LCase(Trim(data(j, 1)))) = i
            End If
        Next j
        If dic.Count Then Cells(3, 1).Resize(dic.Count) = Application.Transpose(dic.keys)
        If lR > dic.Count + 2 Then Rows((dic.Count + 3) & ":" & lR).Delete Shift:=xlUp
        
'        If dic.Count Then
'            Cells(3, i).Resize(dic.Count) = Application.Transpose(dic.keys)
'        Else
'            Columns(i).Delete Shift:=xlToLeft
'            GoTo NXT
'        End If
    
    With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlCalculationAutomatic: End With
    MsgBox "Готово!"
End Sub
[/vba]

Для удаления отовсюду:
[vba]
Код
Sub WordDeleteVse()
    If ActiveCell.Column = 1 Then
        WordDelete
        WordDelete1
    Else
        WordDelete1
        WordDelete
    End If
End Sub
[/vba]
 
Ответить
СообщениеНасколько понимаю, требование модератора выполнено...
В добавление к предыдущему посту с подпрограммой WordDelete.
Для удаления ТОЛЬКО из первого столбца:
[vba]
Код
Sub WordDelete1()
    With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlCalculationManual: End With
    Dim t: t = Timer
    Dim data, lR As Long, i As Long, j As Long, wD As String, dic As Object
    If (ActiveCell.Column = 1) Or (ActiveCell.Row > 1) Then Exit Sub
    wD = ActiveCell.Value
    If Len(wD) = 0 Then Exit Sub
    Set dic = CreateObject("scripting.dictionary")
        lR = Cells(Rows.Count, 1).End(xlUp).Row
        If lR = 3 Then
            If LCase(Cells(3, 1).Value) Like "*" & wD & "*" Then Cells(3, 1).ClearContents
            Exit Sub
        End If
        data = Cells(3, 1).Resize(lR - 2).Value
        Cells(3, 1).Resize(lR - 2).ClearContents
        dic.RemoveAll
        For j = 1 To UBound(data)
            If Not (LCase(data(j, 1)) Like "*" & wD & "*") Then
                dic(LCase(Trim(data(j, 1)))) = i
            End If
        Next j
        If dic.Count Then Cells(3, 1).Resize(dic.Count) = Application.Transpose(dic.keys)
        If lR > dic.Count + 2 Then Rows((dic.Count + 3) & ":" & lR).Delete Shift:=xlUp
        
'        If dic.Count Then
'            Cells(3, i).Resize(dic.Count) = Application.Transpose(dic.keys)
'        Else
'            Columns(i).Delete Shift:=xlToLeft
'            GoTo NXT
'        End If
    
    With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlCalculationAutomatic: End With
    MsgBox "Готово!"
End Sub
[/vba]

Для удаления отовсюду:
[vba]
Код
Sub WordDeleteVse()
    If ActiveCell.Column = 1 Then
        WordDelete
        WordDelete1
    Else
        WordDelete1
        WordDelete
    End If
End Sub
[/vba]

Автор - Perfect2You
Дата добавления - 16.03.2017 в 11:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как удалить все ячейки, содержащие определенное слово (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!