Excel: Замена формул значениями

VBA.Excel.
Пришла мысль выложить мои маленькие скрипты для Excel. Постараюсь идти от простого к сложному (ну… от маленького к большему) — вдруг кому изучить поможет. Впрочем, скриптов у меня мало.
Итак, в приложения Microsoft Office встроен язык Visual Basic for Application (VBA) — близнец обычного Visual Basic (по крайней мере до 6 версии VB включительно). Его можно и нужно использовать для автоматизации рутинных операций. Все нижеизложенное относится к Excel 2003.
Вчитываться имеет смысл только если вы вообще представляете, что такое бейсик, иначе можно просто копировать текст скрипта.
Для начала скриптик, который меняет формулы в ячейках на вычисленные значения. На случай, если надо зафиксировать результат. Открывайте Excel, нажимайте Alt F11 (или Сервис > Макрос > Редактор Visual Basic), создавайте новый модуль (Insert > Module) и поехали. Впрочем, задержитесь на секунду и дайте модулю осмысленное имя, желательно латиницей. И еще, если открыта не одна книга, посмотрите, где вы создаете модуль. Слева торчит дерево проекта (если не торчит, View > Project Explorer), там и выбирайте нужный. К сожалению, майкрософтовский офис не имеет общего хранилища для инструментов; скрипты обязательно привязываются к книге.
Теперь текст скрипта:
\’ FormulaToValue
\’ преобразует формулу в значение в выделенных ячейках
\’ Объявляем процедуру
Sub FormulaToValue()
\’ объявляем переменную cl, она будет иметь тип Range
Dim cl As Range
\’ перебираем все ячейки (автоматически записываемые в переменную cl)
\’ в выделеной пользователем части листа (Selection)
\’ для каждой из этих ячеек по отдельности выполняем инструкции в
\’ строчках между For… и Next
For Each cl In Selection
\’ присваиваем свойству значение (Value) каждой ячейки
\’ это же самое значение (смешно, да?)
cl.Value = cl.Value
Next
\’ выходим из процедуры
End Sub
По моему скромному, но верному мнению, комментариев достаточно. Кроме самой главной строчки.
cl.Value = cl.Value
Мы обращаемся к свойству Value объекта cl, а там лежит значение ячейки. Если ячейка вычисляемая, то все равно там содержится вычисленное значение, а формула — в свойстве Formula. Это же самое значение мы записываем обратно. При этом старое содержимое свойства Formula теряется, и ячейка сохраняет просто число (или текст, что там у вас было).
И о типе Range. Переменная такого типа является объектной, и может ссылаться на некоторый набор ячеек (или, в нашем случае, одну), которые и называется здесь объектом.
Запускать процедуру можно, выбирая ее в окошке макрос (Сервис > Макрос > Макросы… или Alt F8). Там же можно задать горячую клавишу для каждой процедуры. А можно повесить макрос на созданную кнопку в панели инструментов. Перед запуском необходимо выделить ячейки, над которыми будет проводиться операция. Помните, что зажав Ctrl, можно выделять несмежные ячейки.