Здравствуйте, уважаемые форумчане. Помогите сделать макрос, который бы удалял строки по условию, что если в строке нет ни одной закрашенной ячейки. И удалял столбцы в которых нет ни одной закрашенной ячейки. Заранее спасибо.
Здравствуйте, уважаемые форумчане. Помогите сделать макрос, который бы удалял строки по условию, что если в строке нет ни одной закрашенной ячейки. И удалял столбцы в которых нет ни одной закрашенной ячейки. Заранее спасибо.iGenex
Sub io() Dim r As Range, c As Range, i As Long For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 Set r = ActiveSheet.UsedRange.Rows(i) If Not IsNull(r.Interior.ColorIndex) Then r.EntireRow.Delete Next i For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1 Set c = ActiveSheet.UsedRange.Columns(i) If Not IsNull(c.Interior.ColorIndex) Then c.EntireColumn.Delete Next i End Sub
[/vba] P.S. Даже правильнее с более простыми условиями: [vba]
Код
Sub io() Dim r As Range, c As Range, i As Long For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 Set r = ActiveSheet.UsedRange.Rows(i) If r.Interior.ColorIndex = xlColorIndexNone Then r.EntireRow.Delete 'где xlColorIndexNone = -4142 Next i For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1 Set c = ActiveSheet.UsedRange.Columns(i) If c.Interior.ColorIndex = xlColorIndexNone Then c.EntireColumn.Delete Next i End Sub
[/vba]
[vba]
Код
Sub io() Dim r As Range, c As Range, i As Long For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 Set r = ActiveSheet.UsedRange.Rows(i) If Not IsNull(r.Interior.ColorIndex) Then r.EntireRow.Delete Next i For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1 Set c = ActiveSheet.UsedRange.Columns(i) If Not IsNull(c.Interior.ColorIndex) Then c.EntireColumn.Delete Next i End Sub
[/vba] P.S. Даже правильнее с более простыми условиями: [vba]
Код
Sub io() Dim r As Range, c As Range, i As Long For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 Set r = ActiveSheet.UsedRange.Rows(i) If r.Interior.ColorIndex = xlColorIndexNone Then r.EntireRow.Delete 'где xlColorIndexNone = -4142 Next i For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1 Set c = ActiveSheet.UsedRange.Columns(i) If c.Interior.ColorIndex = xlColorIndexNone Then c.EntireColumn.Delete Next i End Sub
Sub test() Dim ro As Range, n&, nn&, i&, ii& n = ActiveSheet.UsedRange.Rows.Count nn = ActiveSheet.UsedRange.Columns.Count i = 1 Do i = i + 1 For ii = 2 To nn With ActiveSheet If Not .Cells(i, ii).Interior.ColorIndex = -4142 Then Debug.Print .Cells(i, ii).Address; .Cells(i, ii).Interior.ColorIndex .Cells(i, ii).EntireRow.Delete: .Cells(i, ii).EntireColumn.Delete i = i - 1: n = n - 1: nn = nn - 1 Exit For End If End With Next Loop While i < n End Sub
[/vba]
Упс не так понял - мой вариант, наоборот, удаляет все закрашенные ячейки
Вот мой вариант:
[vba]
Код
Sub test() Dim ro As Range, n&, nn&, i&, ii& n = ActiveSheet.UsedRange.Rows.Count nn = ActiveSheet.UsedRange.Columns.Count i = 1 Do i = i + 1 For ii = 2 To nn With ActiveSheet If Not .Cells(i, ii).Interior.ColorIndex = -4142 Then Debug.Print .Cells(i, ii).Address; .Cells(i, ii).Interior.ColorIndex .Cells(i, ii).EntireRow.Delete: .Cells(i, ii).EntireColumn.Delete i = i - 1: n = n - 1: nn = nn - 1 Exit For End If End With Next Loop While i < n End Sub
[/vba]
Упс не так понял - мой вариант, наоборот, удаляет все закрашенные ячейки SLAVICK