Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Rustam от 24 сентября 2018, 10:28

Название: Excel VBA: Очистка ячеек по условию с помощью макроса.
Отправлено: Rustam от 24 сентября 2018, 10:28
Помогите написать код для очистки ячеек в столбце, где кол-во слов больше 7.

Столбец D
шкаф трехдверный распашной (нужно оставить)
купить шкаф трехдверный распашной в интернет магазине недорого (здесь больше 7 слов, нужно эту строку очистить)
шкаф трехдверный распашной купить (нужно оставить)

Как видите нужно очистить только те ячейки, где больше 7 слов, а где меньше их нужно оставить.
Название: Re: Excel VBA: Очистка ячеек по условию с помощью макроса.
Отправлено: Администратор от 24 сентября 2018, 10:39
Макрос предполагает, что первая строка на листе это шапка таблицы, а данные начинаются со строки 2.

Это вставьте в самый верх модуля:
Option Explicit
Option Base 1
Option Compare Text

Это макрос
Sub макрос()

    Dim arr(), lr As Long, i As Long
   
   
    '1. Поиск последней строки в столбце D.
    ' End не ищет в скрытых строках.
    lr = Cells(Rows.Count, "D").End(xlUp).Row
   
    '2. Копирование столбца D в массив. С массивом макрос быстрее работает,
        ' чем с эксель-ячейками.
    If lr = 2 Then
        ReDim arr(1, 1): arr(1, 1) = Range("D2").Value
    Else
        arr() = Range("D2:D" & lr).Value
    End If
   
    '3. Очистка ячеек по условию.
    For i = 1 To UBound(arr)
        ' Split создаёт массив, в котором порядковый номер первого элемента 0.
            ' Поэтому UBound вернёт 6, а не 7.
        If UBound(Split(arr(i, 1), " ")) > 6 Then
            arr(i, 1) = Empty
        End If
    Next i
   
    '4. Вставка изменённого массива обратно на лист.
    Range("D2").Resize(UBound(arr)).Value = arr()
   
    '5. Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
[свернуть]
Название: Re: Excel VBA: Очистка ячеек по условию с помощью макроса.
Отправлено: Rustam от 24 сентября 2018, 10:49
Спасибо большое! Работает как нужно.