Страницы: 1
RSS
Макрос удаления строк в таблице, по значениям в ячейках столбца.
 
Код
Sub Макрос2()
    Cells.Select
    Range("I1").Activate
    Selection.ClearContents
    Sheets("Sheet1").Select
    Cells.Select
    Selection.Copy
    Sheets("БАЗА").Select
    Cells.Select
    Range("I1").Activate
    ActiveSheet.Paste
    Application.CutCopyMode = False
 
    Dim sSubStr As String 
    Dim lCol As Long 
    Dim lLastRow As Long, li As Long
    Dim arr   
    sSubStr = ""
    
    lCol = 26
    If lCol = 0 Then Exit Sub
 
    lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    arr = Cells(1, lCol).Resize(lLastRow).Value
 
    Application.ScreenUpdating = 0
    Dim rr As Range
    For li = 2 To lLastRow 
        If CStr(arr(li, 1)) <> sSubStr Then 
                Set rr = Cells(li, 1)
            Else
                Set rr = Union(rr, Cells(li, 1))
            End If
        End If
    Next li
    If Not rr Is Nothing Then rr.EntireRow.Delete
    Application.ScreenUpdating = 1
 End Sub
Есть макрос, который копирует таблицу из другого листа и удаляет строки по значениям из 26 столбца. Помогите с тем, чтоб макрос ссылался не только на столбец 26, но и к примеру 29 с теми же условиями.
Спасибо.
 
Код
    lCol = 26
    If lCol = 0 Then Exit Sub

А зачем нужна эта проверка???
Цитата
sirius0211 написал:
макрос ссылался не только на столбец 26, но и к примеру 29
Можно так
Код
    arr = Range(Cells(1, lCol), Cells(lLastRow, lCol + 3)).Value

Тогда условие проверки можно записать так
Код
        If CStr(arr(li, 1)) <> sSubStr And CStr(arr(li, 4)) <> sSubStr Then

или так в зависимости от того чего Вы хотите получить
Код
        If CStr(arr(li, 1)) <> sSubStr Or CStr(arr(li, 4)) <> sSubStr Then

или вообще прописать отдельным условием
Код
        If CStr(arr(li, 1)) <> sSubStr  Then
                If CStr(arr(li, 4)) <> sSubStr Then
Изменено: Msi2102 - 13.02.2022 15:57:01
 
Спасибо огромное за такое разнообразие вариантов!!! Если бы я ещё разбирался бы в этом!) Попробую методом "научного тыка" посмотреть на что влияют эти коды!!!))) Спасибо огромное за потраченное время на нуба в сфере excel. )
 
Вы не ответили
Цитата
Msi2102 написал:
А зачем нужна эта проверка???
Вы присвоили переменной lCol значение 26 и тут же проверяете: если lCol = 0. По вашему ваш компьютер может сразу засомневаться, а друг не 26, да?
Цитата
Msi2102 написал:
arr = Range(Cells(1, lCol), Cells(lLastRow, lCol + 3)).Value
присваиваем массиву aar диапазон "Z1:AC & ПОСЛЕДНЯЯ ЗАПОЛНЕННАЯ ЯЧЕЙКА". Или можно было написать как у Вас
arr = Cells(1, lCol).Resize(lLastRow, 4).Value
то есть мы присваиваем диапазону не один столбец, а с 26 по 29.
Цитата
Msi2102 написал:
If CStr(arr(li, 1)) <> sSubStr And CStr(arr(li, 4)) <> sSubStr Then
Этой записью мы проверяет 26 столбец И 29
Цитата
Msi2102 написал:
If CStr(arr(li, 1)) <> sSubStr Or CStr(arr(li, 4)) <> sSubStr Then
Этой записью мы проверяем условие ИЛИ
Ну и третьей сторкой мы просто проверяем вначале 26 столбец и если выполняется условие, то проверяем 29.
Эти условия Вы должны применять в зависимости от поставленных задач
Изменено: Msi2102 - 13.02.2022 19:13:18
 
Это не мой код, я его просто под себя немного "сколхозил" ). Я постараюсь разобраться и обязательно Вам сообщу! Не буду докучать своими вопросами. Просто этот макрос должен был удалить строки в таблице, если в столбце 26 и 29 есть хоть какие либо значения отличные от "" (пусто).

По поводу and и or ... - я в курсе...)))
Спасибо большое за помощь.
 
При замене кода
Код
If CStr(arr(li, 1)) <> sSubStr Then

на
Код
If CStr(arr(li, 1)) <> sSubStr Or CStr(arr(li, 4)) <> sSubStr Then

появляется ошибка на этом коде.

Вот пример файла. С макросом. Видимо я что-то делаю не так. Должны удалиться строки на листе "База", которые закрашены желтым цветом. В столбцах 26 и 29 в ячейках со значениями, удаляются строки по условию "ИЛИ".
 
Цитата
написал:
Вот пример файла.
Ваш пример = пустой файл. В файлах с расширением .xlsx макросы не живут.
 
Прошу прощения!!! Перепутал файл.
 
Вы читаете только часть сообщений? Это кто будет менять
Код
arr = Cells(1, lCol).Resize(lLastRow).Value

на это:
Код
arr = Range(Cells(1, lCol), Cells(lLastRow, lCol + 3)).Value

или это:
Код
arr = Cells(1, lCol).Resize(lLastRow, 4).Value
 
Этот момент я упустил, прошу прощения!!! Всё сработало! Огромное Вам спасибо за помощь!!!
Страницы: 1
Наверх