Если вы работаете(или работали) в более-менее крупной компании, то 100% сталкивались с ситуацией, когда необходимо переслать свой файл другому сотруднику и при этом запретить ему изменять какие-то данные (чаще всего это ячейки с формулами, которые пользователь ни в коем случае не должен менять, а в идеале даже видеть. Видеть он должен только результат вычислений этих формул). В тоже время надо оставить возможность при необходимости изменить любые ячейки или данные, но исключительно после ввода пароля. Все это можно сделать при помощи стандартной защиты листов в Excel.
Чтобы защитить лист необходимо перейти на вкладку Рецензирование
для версий Excel 2010 и выше так же можно щелкнуть правой кнопкой мыши на ярлыке нужного листа и выбрать Защитить лист
После нажатия появится окно:
- выделение заблокированных ячеек
(Select locked cells) - разрешено выделять ячейки, для которых установлен атрибут Защищаемая ячейка (правая кнопка мыши на ячейке/диапазоне -Формат ячеек(Format cells) -вкладка Защита(Protection) -Защищаемая ячейка(Locked) ). Если отметить этот пункт, то пункт выделение незаблокированных ячеек будет отмечен автоматически, т.к. если разрешено выделение заблокированных ячеек, то конечно, должно быть разрешено выделять и незаблокированные. - выделение незаблокированных ячеек
(Select unlocked cells) - будет разрешено выделять только те ячейки, для которых атрибут Защищаемая ячейка не установлен. Применяется вместе с отключением пункта выделение заблокированных ячеек, чтобы запретить пользователю после установки защиты даже выделять запрещенные к изменению ячейки. Таким образом пользователь будет вынужден перемещаться только по тем ячейкам, которые ему можно изменять. Подробнее про применение свойства "Защищаемая ячейка" можно ознакомиться в этой статье: Как разрешить изменять только выбранные ячейки? - форматирование ячеек
(Format cells) - будет разрешено изменять форматы ячеек: цвет заливки, цвет шрифта, размер шрифта, имя шрифта, границы, отступы и т.п. - форматирование столбцов
(Format columns) - несмотря на вроде понятное название при установке разрешает изменять ширину столбцов. При этом, если пункт форматирование ячеек не установлен, то изменять цвет шрифта, заливки и т.п. будет запрещено - форматирование строк
(Format rows) - так же как и в случае с пунктом форматирование столбцов при установке разрешает изменять высоту строк, но при этом невозможно изменять цвет шрифта, заливки и т.п., если пункт форматирование ячеек не установлен - вставку столбцов
(Insert columns) - разрешает вставку целых столбцов (вставлять отдельные ячейки при этом запрещено) - вставку строк
(Insert rows) - разрешает вставку целых строк (вставлять отдельные ячейки при этом запрещено) - вставку гиперссылок
(Insert hyperlinks) - разрешает создание гиперссылок на листе (Что такое гиперссылка?). Правда, при этом создать гиперссылки можно будет исключительно в незаблокированных ячейках. - удаление столбцов
(Delete columns) - разрешает удаление целых столбцов. При этом удаление столбцов допускается только в том случае, если столбец не содержит заблокированных ячеек. Если хоть одна ячейка в столбце с атрибутом "Защищаемая ячейка", то удаление столбца невозможно. Так же невозможно удалять отдельные ячейки внутри столбцов, даже если все ячейки не заблокированные - удаление строк
(Delete rows) - разрешает удаление целых строк. При этом удаление строк допускается только в том случае, если строка не содержит заблокированных ячеек. Если в строке есть хоть одна ячейка с атрибутом "Защищаемая ячейка", то удаление строки невозможно. Так же невозможно удалять отдельные ячейки внутри строк, даже если все ячейки в строке не заблокированные - сортировку
(Sort) - один из "хитрых" пунктов. Хоть сам пункт сортировки активен и доступен для вызова, сама сортировка при этом разрешена только в том случае, если все ячейки внутри сортируемого диапазона не заблокированные. Если внутри диапазона будет хоть одна заблокированная ячейка (с атрибутом "Защищаемая ячейка"), то сортировка будет невозможна - использование автофильтра
(Use Autofilter) - тоже "хитрый" пункт. Как следует из описания допускается только использование автофильтра. Это означает, что если автофильтр уже установлен на листе, то после защиты его можно будет использовать для отбора данных. Однако если фильтр не был установлен до установки защиты на лист - то установить фильтр будет уже невозможно без снятия защиты - использование отчетов сводной таблицы
(Use PivotTable reports) - при установке будет возможно использовать сводную таблицу для анализа данных: перемещать поля внутри сводной таблицы, отбирать и фильтровать данные. Однако невозможно при этом будет изменить источник данных, обновлять сводную, изменять функции полей, добавлять вычисляемые поля, убирать и добавлять промежуточные итоги, менять макет отчета, стили и т.п. - изменение объектов
(Edit objects) - будет возможно добавлять, выделять и даже удалять объекты на листе, а так же изменять их размеры и большинство свойств (цвета границ, заливки, эффекты свечения и стилей и пр.). К объектам в данном случае относятся Фигуры(Shapes) , Рисунки(Pictures) , объекты SmartArt, Диаграммы(Charts) - изменение сценариев
(Edit scenarios) - если до установки защиты были созданы сценарии (Данные(Data) -Анализ Что-если(What-If Analysis) -Диспетчер сценариев(Scenario manager) ), то после установки защиты их можно будет изменять.
После установки нужных параметров и нажатия ОК:
- если пароль не был указан, то на лист будет установлена защита без пароля с указанными параметрами
- если был указан пароль, то перед защитой появится еще одно окно, в котором будет предложено подтвердить пароль. Там единственное поле, в которое надо просто ввести тот же пароль, что и в первом окне. При установке пароля следует помнить, что регистр букв различается (А и а - будут считаться разными символами), а если указать пароль русскими буквами, то при открытии файла на ПК под управлением MAC OS возможны ошибки преобразования данных и снять защиту установленным паролем будет невозможно. Поэтому лучше применять символы английского алфавита, цифры и доп.символы(
!@#$%^&* )
Если после установки защиты пользователь должен иметь возможность выделять все ячейки на листе, но так же необходимо
Так же
Если в файле присутствует
Если в файле используются макросы или файл предполагается обрабатывать макросами, то в макросах необходимо предусмотреть снятие кодом защиты перед какими-либо изменениями на листе и последующую установку защиты после всех необходимых действий. Подробнее можно прочитать в статье: Как защитить лист от пользователя, но не от макроса?
Чтобы снять защиту с листа необходимо перейти на вкладку Рецензирование
в это поле необходимо ввести пароль и нажать Ок. Если пароль неизвестен или был забыт, то стандартно снять защиту с листа будет уже невозможно.
К сожалению или счастью защита листов в Excel совершенно не стойкая ко взлому. Защита с листа, если пароль не известен, снимается на раз-два даже при помощи VBA. В надстройке MulTEx есть специальная команда, которая поможет снять защиту с листа, если пароль был забыт или утерян: Снять защиту с листа(без пароля).
Но стоит учитывать тот факт, что защита листов изначально не планировалась как средство защиты своих расчетных алгоритмов и интеллектуальной собственности. Защита листов(как и книг) задумывалась как защита "от дурака" - т.е. дабы случайно или по неумению данные не были испорчены или удалены.
Плюс Microsoft все же совершенствует Excel и с выходом новых версий происходят изменения и в области защиты, что не может не радовать. Например, защита листов и книг начиная с версии Excel 2013 уже более стойкая(для тех кто в теме: алгоритм SHA-512 в 2013 и выше против SHA1 в ранних версиях). Это значит, что простым брутфорсом поломать такую защиту хоть и можно, но времени на это уйдет уже гораздо больше. Хотя для снятия защиты с листов в открытых форматах(.xlsx,.xlsm и им подобных) возможно и другими методами.
Также см.:
Защита листов/снятие защиты
Снять защиту с листа(без пароля)
Как разрешить изменять только выбранные ячейки?
Как защитить лист от пользователя, но не от макроса?
Как оставить возможность работать с группировкой/структурой на защищенном листе?