Результатом работы данного макроса является выбор всех ячеек текущего листа, которые не были выбраны до его запуска. Т.е. другими словами макрос инвертирует выборку (Selection). Работает со всеми ячейками листа, поддерживается выделение нескольких несмежных диапазонов. Достаточно выбрать диапазон ячеек, информацию и форматирование которых необходимо сохранить, и запустить макрос InvertSelection. В результате его работы выбранными окажутся все ячейки, кроме указанных (выбранных). А уж с выбранным диапазоном можно делать что угодно стандартными средствами Ёкселя: форматировать/расформатировать ячейки, стирать данные, ... Макрос очень удобен для удаления лишней информации с листа. Часто применяется мною для обработки чужих "коряво" составленных документов, в которых встречается, например, заливка цветом или установка границ целиком у столбца или строки. Такое "форматирование" либо просто мешает зрительному восприятию, либо при выводе на печать даёт огромное количество лишних лестов. А уж если кем-то "особо одарённым" целиком по столбцу применено условное форматирование, да ещё и с вычисляемым по формуле результатом... Тогда ещё и файл "распухает", и "тормоза" появляются... [vba]
Код
Sub InvertSelection2() '--------------------------------------------------------------------------------------- ' Procedure : InvertSelection ' Author : :) ' URL : http://www.planetaexcel.ru/forum.php?thread_id=14008 ' DateTime : 04.03.2010 00:17 ' Purpose : инвертировать Selection ' Notes : Работает со всеми ячейками листа, поддерживается выделение нескольких несмежных диапазонов. ' Notes : в процессе работы создаётся временная КНИГА, поэтому работает в том числе и при защищенной структуре книги '--------------------------------------------------------------------------------------- If Not TypeName(Selection) = "Range" Then Exit Sub With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With Dim selAddr As String: selAddr = Selection.Address With ActiveSheet With Workbooks.Add With ActiveSheet .Cells.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="0" .Range(selAddr).ClearFormats selAddr = .Cells.SpecialCells(xlCellTypeAllFormatConditions).Address End With .Close False End With .Range(selAddr).Select End With With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With End Sub
[/vba]
Результатом работы данного макроса является выбор всех ячеек текущего листа, которые не были выбраны до его запуска. Т.е. другими словами макрос инвертирует выборку (Selection). Работает со всеми ячейками листа, поддерживается выделение нескольких несмежных диапазонов. Достаточно выбрать диапазон ячеек, информацию и форматирование которых необходимо сохранить, и запустить макрос InvertSelection. В результате его работы выбранными окажутся все ячейки, кроме указанных (выбранных). А уж с выбранным диапазоном можно делать что угодно стандартными средствами Ёкселя: форматировать/расформатировать ячейки, стирать данные, ... Макрос очень удобен для удаления лишней информации с листа. Часто применяется мною для обработки чужих "коряво" составленных документов, в которых встречается, например, заливка цветом или установка границ целиком у столбца или строки. Такое "форматирование" либо просто мешает зрительному восприятию, либо при выводе на печать даёт огромное количество лишних лестов. А уж если кем-то "особо одарённым" целиком по столбцу применено условное форматирование, да ещё и с вычисляемым по формуле результатом... Тогда ещё и файл "распухает", и "тормоза" появляются... [vba]
Код
Sub InvertSelection2() '--------------------------------------------------------------------------------------- ' Procedure : InvertSelection ' Author : :) ' URL : http://www.planetaexcel.ru/forum.php?thread_id=14008 ' DateTime : 04.03.2010 00:17 ' Purpose : инвертировать Selection ' Notes : Работает со всеми ячейками листа, поддерживается выделение нескольких несмежных диапазонов. ' Notes : в процессе работы создаётся временная КНИГА, поэтому работает в том числе и при защищенной структуре книги '--------------------------------------------------------------------------------------- If Not TypeName(Selection) = "Range" Then Exit Sub With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With Dim selAddr As String: selAddr = Selection.Address With ActiveSheet With Workbooks.Add With ActiveSheet .Cells.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="0" .Range(selAddr).ClearFormats selAddr = .Cells.SpecialCells(xlCellTypeAllFormatConditions).Address End With .Close False End With .Range(selAddr).Select End With With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With End Sub