Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2012, 18:58   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию Удаление строк по цвету заливки

Добрый день, уважаемые форумчане!
Имеется лист, в котором строки залиты разными цветами (во вложении). Имеется вот такой макрос, который проверяет ячейки Столбца А и, если залиты темно-зеленым цветом, то удаляет строку:

Код:
Sub Макрос2()
Dim sh As Worksheet, i As Long
  Set sh = Sheets("CSV")
  For i = sh.Cells(Rows.Count, 1).End(xlUp).row To 1 Step -1
  If sh.Cells(i, 1).Interior.ColorIndex <> 10 Then Cells(i, 1).EntireRow.Delete (xlShiftUp)
  Next i
End Sub
Или не тот индекс, или я дальтоник. Рассудите.
Заранее спасибо!
Вложения
Тип файла: rar Книга5.rar (27.2 Кб, 31 просмотров)
strannick вне форума Ответить с цитированием
Старый 01.10.2012, 19:26   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

У Вас в 1-м столбце нет данных, поэтому sh.Cells(Rows.Count, 1).End(xlUp).row=1. Если так и должно быть, то попробуйте:
Код:
Sub Макрос2()
Dim sh As Worksheet, i As Long
Set sh = Sheets("CSV")
With sh.UsedRange.Columns(1)
    For i = .Rows.Count To 1 Step -1
        With .Cells(i)
            If .Interior.ColorIndex = 14 Then .EntireRow.Delete
        End With
    Next i
End With
End Sub
nilem вне форума Ответить с цитированием
Старый 01.10.2012, 21:04   #3
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Спасибо, порядок! Только я не правильно написал в начале. Не удалить строки, залитые темно-зеленым цветом, а удалить все, кроме залитых темно -зеленым цветом. Ну, тут понятно, что должно быть:
Код:
If .Interior.ColorIndex <> 14 Then .EntireRow.Delete
Только вот не пойму, у темно-зеленого индекс 14?
strannick вне форума Ответить с цитированием
Старый 01.10.2012, 22:21   #4
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Только вот не пойму, у темно-зеленого индекс 14?
Похоже, да.
Только он не совсем чтобы т.зеленый.
Вот простенький, без изысков, макрос
Код:
Sub ЗаполнитьЦвет()
       [a1].Select
    n = 56
    For i = 1 To n
        Application.ScreenUpdating = False
        ActiveCell.Interior.ColorIndex = i
        ActiveCell.Offset(0, 1) = "Interior.ColorIndex =" & i
        ActiveCell.Offset(1, 0).Activate
    Next i
    Application.ScreenUpdating = True
    [a1].Select
End Sub
Вложения
Тип файла: zip ColorIndex.zip (4.9 Кб, 33 просмотров)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 02.10.2012 в 00:04.
VictorM вне форума Ответить с цитированием
Старый 02.10.2012, 09:40   #5
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Спасибо! Работают все (и мой тоже) с индексом 14. Странно как-то цвет брался из стандартных цветов экселя. Перепробовал и 4, и 2, и 10. С красным работал нормально. А тут...
Пришел бы kuklp, так сразу бы отфильтровал бы все. А У меня чего-то с автофильтром нелады.
Еще раз спасибо!
strannick вне форума Ответить с цитированием
Старый 02.10.2012, 10:39   #6
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Можно еще таким макаром:

Код:
Sub Del_Cell_Green()
    Dim i As Long
    Application.ScreenUpdating = False
    On Error Resume Next
    'i = Cells(Rows.Count, 1).End(xlUp).Row
    i = 1000
    Range("A1:A" & i).AutoFilter Field:=1, Criteria1:=RGB(0, 176, 80), Operator:=xlFilterCellColor
    Range("A2:A" & i).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Range("A1:A" & i).AutoFilter = False

    Application.ScreenUpdating = True
End Sub
только поиск последней строки раз комментируйте, а
Код:
i=1000
удалите
Вложения
Тип файла: rar Del_cell_Green.rar (28.7 Кб, 17 просмотров)
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 02.10.2012, 10:46   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

staniiislav,
это сработает, если человек не пользуется автофильтром)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 02.10.2012, 11:03   #8
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
staniiislav,
это сработает, если человек не пользуется автофильтром)
согласен, но в файле автофильтры я не увидел.
Но можно еще убрать строку удаления филтра, а поставить просто сброс фильтра
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 02.10.2012, 12:00   #9
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

вот так будет выглядеть с проверкой на наличие фильтров:

Код:
Sub Del_Cell_Green()
    Dim i As Long
    Application.ScreenUpdating = False
    On Error Resume Next
        With ActiveSheet
            'i = .Cells(Rows.Count, 1).End(xlUp).Row
            i = 1000
            If .AutoFilter.Filters(1).On Then
                .Range("A1:A" & i).AutoFilter Field:=1, Criteria1:=RGB(0, 176, 80), Operator:=xlFilterCellColor
                .Range("A2:A" & i).SpecialCells(xlCellTypeVisible).EntireRow.Delete
                .Range("A1:A" & i).AutoFilter = False
            Else
                .Range("A1:A" & i).AutoFilter Field:=1, Criteria1:=RGB(0, 176, 80), Operator:=xlFilterCellColor
                .Range("A2:A" & i).SpecialCells(xlCellTypeVisible).EntireRow.Delete
                .Range("A1:A" & i).AutoFilter Field:=1
            End If
        End With
    Application.ScreenUpdating = True
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 03.10.2012, 15:58   #10
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Автофильтра там и не планировалось. А я как раз об этом и думал. Поставил фильтр, отфильтровал, удалил, убрал фильтр. Спасибо staniiislav!
strannick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строк Zelenaya Microsoft Office Excel 6 26.09.2012 09:55
Удаление строк chipesca Microsoft Office Excel 0 06.06.2012 20:05
Удаление строк Trimbl Microsoft Office Excel 13 18.10.2010 13:19
перенос строк удаление ненужных строк HelperAwM Microsoft Office Excel 5 26.06.2010 18:42
Удаление строк в зависимости от заливки Scolopendra Microsoft Office Excel 8 24.10.2008 06:54