Макрофункции (Command Function) — это функции листа макросов Excel 4.0, до сих пор поддерживаемый Microsoft для совместимости с предыдущими версиями Excel.
Лист макросов XLM (который еще называется листом макросов MS Excel 4.0) в сущности являлся тем же рабочим листом, но со своими стандартными настройками. В частности, на листе макросов XLM отображаются сами формулы, а не их результаты. Кроме того, стандартная ширина его столбцов больше, чем у обычного рабочего листа. Как можно понять из названия, лист макросов XLM предназначен для хранения макросов XLM. Система макросов XLM является «пережитком”, доставшимся нам от предыдущих версий Excel (4.0 и более ранних). До появления Excel 5 разработчиками использовался язык макросов под названием XLM (Excel Macro). Более поздние версии Excel все еще выполняют макросы XLM, но, начиная с Excel 97, пользователи не имеют возможности записывать макросы на языке XLM.
На рисунке показано как выглядел лист макросов и записанный на нём макрос (Макрос управляет выделенными ячейками. Он изменяет цвет фона ячеек и добавляет к ним границы):
А так этот же макрос, записанный на языке VBA, выглядит сейчас (в стандартном модуле):
Сейчас макрофункции можно использовать при написании макросов и некоторые из них в именах листа/книги. Приведу простой пример использования макрофункции ВЫЧИСЛИТЬ() в имени листа. На листе 1 есть вот такие текстовые данные:
Как получить результат их работы? С помощью макрофункции ВЫЧИСЛИТЬ() очень просто. Создаём имя (всё-равно каким способом, я выбрал через диспетчер имён, Ctrl+F3). Присваиваем ему название (я выбрал EVALUATE — ВЫЧИСЛИТЬ по английски). В поле Диапазон вставляем функцию ВЫЧИСЛИТЬ(), в качестве аргумента вводим ссылку на левую верхнюю ячейку диапазона с данными (это важно!), в нашем случае это ячейка А1. Если ссылку Вы ввели, кликнув мышкой на ячейку, то по умолчанию она будет абсолютной. Измените её на относительную. Сохраняем имя.
Теперь в ячейку В1 вводим созданное имя:
Жмём Enter и копируем В1 вниз:
Вот и искомый результат.
Особенностью макрофункций является то что они, в отличии от функций листа, могут выполнять действия, работать с форматированием, возвращать данные операционной системы, отправлять файлы по почте и многое другое, что не умеют функции листа.
Макрофункции (Command Function) — это функции листа макросов Excel
4.0, до сих пор поддерживаемый Microsoft для
совместимости с предыдущими версиями Excel.
Лист макросов XLM (который еще называется листом
макросов MS Excel 4.0) в сущности являлся тем же рабочим листом, но со своими
стандартными настройками. В частности, на листе макросов XLM отображаются
сами формулы, а не их результаты. Кроме того, стандартная ширина его столбцов
больше, чем у обычного рабочего листа. Как можно понять из названия, лист
макросов XLM предназначен для хранения макросов XLM. Система макросов XLM
является «пережитком”, доставшимся нам от предыдущих версий Excel (4.0 и
более ранних). До появления Excel 5 разработчиками использовался язык
макросов под названием XLM (Excel Macro). Более
поздние версии Excel все еще выполняют макросы XLM, но, начиная с Excel 97,
пользователи не имеют возможности записывать макросы на языке XLM.
На рисунке показано как выглядел лист макросов и
записанный на нём макрос (Макрос управляет выделенными ячейками. Он изменяет
цвет фона ячеек и добавляет к ним границы):
А так этот же макрос, записанный на языке VBA, выглядит сейчас (в стандартном
модуле):
Сейчас макрофункции можно использовать при написании
макросов и некоторые из них в именах листа/книги. Приведу простой пример
использования макрофункции ВЫЧИСЛИТЬ() в имени листа. На
листе 1 есть вот такие текстовые данные:
Как получить результат их работы? С помощью макрофункции ВЫЧИСЛИТЬ() очень
просто. Создаём имя (всё-равно каким способом, я выбрал через диспетчер
имён, Ctrl+F3). Присваиваем ему название (я выбрал EVALUATE —
ВЫЧИСЛИТЬ по английски). В поле Диапазон вставляем функцию ВЫЧИСЛИТЬ(),
в качестве аргумента вводим ссылку на левую верхнюю ячейку диапазона с
данными (это важно!), в нашем случае это ячейка А1. Если ссылку
Вы ввели, кликнув мышкой на ячейку, то по умолчанию она будет абсолютной.
Измените её на относительную. Сохраняем имя.
Теперь в ячейку В1 вводим созданное имя:
Жмём Enter и копируем В1 вниз:
Вот и искомый результат.
Особенностью макрофункций является то
что они, в отличии от функций листа, могут выполнять действия, работать с
форматированием, возвращать данные операционной системы, отправлять файлы по
почте и многое другое, что не умеют функции листа.
К минусам макрофункций можно отнести
следующее:
— макрофункции не работают на листе;
— для работы макрофункций макросы должны быть разрешены.
Макрофункции не делятся на категории, поэтому ниже
представлен список макрофункций по алфавиту (начинающихся на K, X и Y
макрофункций не существует):
: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/users/d/dm9/domains/mokshin.su/includes/unicode.inc on line 311.
Опубликовано d.mokshin в ср, 10/07/2013 — 20:01. |
||
|
Как вычислить формулу, записанную текстом в ячейке Excel?
Иногда, как ни странно, возникает такая потребность. Когда, например, эта самая формула является результатом каких-то других преобразований (и сама рассчитывается всякими функциями).
Т.е., к примеру, в столбце A последовательно в ячейках есть текст:
1+3
4*6/3
2+6/3
Соответственно в столбце B нужно получить значения:
4
8
4
Вариант 1:
Вроде быть есть пакет надстроек Morefunc, который после установки позволяет использовать функцию EVAL.
Вариант 2:
В VBA есть функция Eval, которая, собственно, выполняет то, что нам нужно. Т.о. можно написать свою публичную функцию (например MyEval), которая будет принимать параметр, скармливать его Eval, и возвращать полученное значение. Затем эту функцию использовать в формулах в столбце B: =MyEval(A1)
Если не хочется связываться с VBA, то есть более изощренный способ — Макрофункции. Способ почерпнут отсюда: http://www.excelworld.ru/publ/funcs/makrofuncs/makrofuncs/24-1-0-50
Вариант 3 (пример для MS Excel 2003):
Выделяем ячейку B1. Создаем Имя (по Ctrl+F3), например, MyEval. В поле Формула пишем =ВЫЧИСЛИТЬ(‘Лист1’!A1). Нажимаем Добавить.
Далее в ячейке B1 пишем формулу =MyEval. Нажимаем Enter, любуемся результатом, копируем ячейку B1 вниз для расчета остальных формул.
Тут, конечно, есть особенности — нельзя, например, адресовать произвольную ячейку в качестве аргумента, — но зато не нужно заморачиваться с VBA и дополнительными надстройками.
- Блог пользователя d.mokshin
Заметка написана с использованием книги Билла Джелена Гуру Excel расширяют горизонты: делайте невозможное с Microsoft Excel.
Задача: вы хотите выделить все ячейки на листе, которые не содержат формул.
Примечание Багузина. Именно эту задачу можно решить довольно просто, если вы пользуетесь версией Excel 2013 или более поздней. Примените функцию ЕФОРМУЛА(ссылка). Функция проверяет содержимое ячейки, и возвращает значение ИСТИНА или ЛОЖЬ. Однако подход Билла Джелена любопытен сам по себе, поскольку открывает окно в мир макрофункций (скорее всего, неизвестный большинству пользователей).
Решение: до введения VBA, макросы писали на языке xlm (Excel Macro). Язык использовал макрофункции, т.е., функции листа макросов Excel 4.0. Этот язык до сих пор поддерживается Microsoft для совместимости с предыдущими версиями Excel (подробнее см. Что такое макрофункции?). Система макросов xlm является «пережитком», доставшимся нам от предыдущих версий Excel (4.0 и более ранних). Более поздние версии Excel все еще выполняют макросы xlm, но, начиная с Excel 97, пользователи не имеют возможности записывать макросы на языке xlm.
Язык xlm среди прочих содержит функцию Получить.Ячейку (GET.CELL), которая предоставляет гораздо больше информации, чем современная функция ЯЧЕЙКА(). На самом деле, Получить.Ячейку может рассказать о 66 различных атрибутах ячейки, в то время, как функция ЯЧЕЙКА возвращает лишь 12 параметров. Функция Получить.Ячейку весьма полезна, за исключением одного «но»… Вы не можете ввести ее непосредственно в ячейку (рис. 1).
Рис. 1. Функция Получить.Ячейку недоступна для ввода на листе Excel
Скачать заметку в формате Word или pdf, примеры в формате Excel (с макросами)
Однако есть обходной путь. Вы можете определить имя, основанное на функции, а затем ссылаться на это имя в любой ячейке. Например, чтобы выяснить, содержит ли ячейка A1 формулу, можно записать =Получить.Ячейку(48,А1). Здесь 48 – аргумент, отвечающий за анализ, является ли содержимое ячейки формулой. Для более универсального случая, когда вы хотите применить условное форматирование, воспользуйтесь формулой =Получить.Ячейку(48,ДВССЫЛ("
RC"
,ЛОЖЬ)). Если вы не знакомы с функцией ДВССЫЛ, советую почитать Примеры использования функции ДВССЫЛ (INDIRECT). Нам эта функция нужна для того, чтобы обозначить ссылку на ячейку, в которой мы сейчас находимся. Мы не можем указать никакую конкретную ячейку, поэтому используем ссылку в стиле R1C1, где RC означает относительную ссылку на текущую ячейку. В стиле ссылок А1 для ссылки на текущую ячейку нам бы потребовалось этот фрагмент формулы записать в виде =ДВССЫЛ(АДРЕС(СТРОКА();СТОЛБЕЦ();4)). Подробнее см. Зачем нужен стиль ссылок R1C1.
Чтобы использовать формулу =Получить.Ячейку() для выделения ячеек с помощью условного форматирования, выполните следующие действия (для Excel 2007 или более поздней версии):
- Чтобы определить новое имя, пройдите по меню ФОРМУЛЫ –> Присвоить имя. В открывшемся окне (рис. 2) выберите подходящее имя, например, ЕслиФормула. В поле формула введите =Получить.Ячейку(48,ДВССЫЛ(
"
RC"
,ЛОЖЬ)). Нажмите Оk. Нажмите Закрыть. - Выделите ячейки, к которым хотите применить условное форматирование (рис. 3); в нашем примере – это В3:В15.
- Пройдите по меню ГЛАВНАЯ –> Условное форматирование –> Создать правило. В открывшемся окне выберите пункт Использовать формулу для определения форматируемых ячеек. В нижней половине диалогового типа введите =ЕслиФормула, как показано на рис. 3. Excel может автоматически добавить кавычки =»ЕслиФормула». Уберите их. Нажмите кнопку Формат, в открывшемся окне Формат ячеек перейдите на вкладку Заливка и выберите цвет заливки. Нажмите Оk.
Рис. 2. Окно Создание имени
Рис. 3. Создание нового правила условного форматирования
Чтобы выделить ячейки, которые не содержат формулу, используйте настройку формата =НЕ(ЕслиФормула).
Будьте осторожны. Иногда при копировании ячеек, содержащих формулу, на другой лист, есть риск «обрушить» Excel (у меня такого не случилось ни разу).
Альтернативные стратегии: преимущество описанного выше метода заключается в том, что форматирование будет автоматически обновляться всякий раз, когда кто-то меняет содержимое ячеек, заменяя формулы на константы или наоборот. Если вам просто нужно получить разовый снимок, какие ячейки содержат формулы, выполните следующие действия:
- Выберите все ячейки; для этого встаньте на одну из ячеек диапазона и нажмите Ctrl+А (А – английское).
- Нажмите Ctrl+G, чтобы открыть окно Переход.
- В левом нижнем углу этого окна нажмите кнопку Выделить.
- В открывшемся диалоговом окне Выделить группу ячеек выберите формулы, нажмите Ok.
- На закладке ГЛАВНАЯ выберите цвет заливки, например, красный.
Синтаксис функции: ПОЛУЧИТЬ.ЯЧЕЙКУ(номер_типа; ссылка). Полный список первого аргумента функции Получить.Ячейку см., например, здесь. Обратите внимание, что в некоторых случаях функциональность современных версий Excel существенно изменилась, и функция не вернет допустимое значение. Для некоторых аргументов номер_типа удобнее использовать функцию ЯЧЕЙКА.
Несколько примеров функции ПОЛУЧИТЬ.ЯЧЕЙКУ.
Номер_типа = 1. Абсолютная ссылка левой верхней ячейки аргумента ссылка в виде текста в текущем стиле: $А$1 или R1C1 (рис. 4). Проще использовать формулу =ЯЧЕЙКА("
адрес"
;ссылка)
Рис. 4. Определение адреса левой верхней ячейки диапазона
Номер_типа = 63. Возвращает номер цвета заливки ячейки (рис. 5).
Рис. 5. Определение номера цвета заливки ячейки
Любопытно. Несмотря на то что это макрофункция, язык приложения важен. В русском Excel функция GET.CELL не работает. И еще. Если вам нужна информация о сводной таблице, то аналог ПОЛУЧИТЬ.ЯЧЕЙКУ — обычная функция (доступная для ввода на листе Excel) ПОЛУЧИТЬ.ДАННЫЕ. СВОДНОЙ.ТАБЛИЦЫ.
Источник: http://www.mrexcel.com/archive2/18800/21312.htm
Вычисления по цвету ячеек
Помечать ячейки цветом, используя заливку или цвет шрифта, очень удобно и наглядно. Если вы не дальтоник, конечно 🙂 Трудности возникают тогда, когда по такой раскрашенной таблице возникает необходимость сделать отчет. И если фильтровать и сортировать по цвету Excel в последних версиях научился, то суммировать по цвету до сих пор не умеет.
Чтобы исправить этот существенный недостаток можно использовать несложные пользовательские макрофункции на Visual Basic, которые позволят нам суммировать/подсчитывать количество/среднее арифметическое ячеек с определенным цветом заливки/шрифта.
На вкладке Разработчик (Developer) нажмите кнопку Visual Basic или сочетание клавиш Alt + F11 , чтобы открыть редактор макросов. Если такой вкладки у вас не видно, то включите ее в настройках Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon) .
В окне редактора вставьте новый модуль через меню Insert — Module и скопируйте туда текст следующих функций:
Как легко сообразить, первая функция здесь вычисляет количество ячеек с заданным цветом заливки, вторая — сумму, а третья — среднее арифметическое. У всех функций два аргумента:
- DataRange — диапазон исходных ячеек с числами, раскрашенных в разные цвета
- ColorSample — ячейка, цвет заливки которой мы берём за образец
Если теперь вернуться в Excel, то в Мастере функций (вкладка Формулы — кнопка Вставить функцию) в появившейся там категории Определенные пользователем (User Defined) можно найти наши функции и вставить их на лист. Либо напрямую ввести их в строку формул, как любые другие функции Excel:
Добавление условий
Ограничения и нюансы пересчёта
У созданных нами макрофункций есть 2 важных нюанса.
Во-первых, эти функции «не видят» заливку, созданную с помощью условного форматирования, т.е. работают только с цветом, который был задан для ячеек вручную.
Во-вторых, к сожалению, изменение цвета заливки или цвета шрифта ячейки Excel не считает изменением её содержимого, поэтому не запускает пересчет формул. То есть при перекрашивании исходных ячеек с числами в другие цвета итоговая сумма/среднее/количество по нашим функциям автоматически пересчитываться пересчитываться не будет.
Полностью решить эту проблему невозможно, но есть несколько способов её обойти:
- Сделать двойной щелчок левой кнопкой мыши по ячейки с нашей формулой и нажать на Enter , т.е. имитировать повторный ввод функции в ячейку — Excel её заново пересчитает и выдаст обновленный результат.
- Можно использовать сочетание клавиш Ctrl + Alt + F9 , которое принудительно заставит Excel пересчитать всё формулы и функции независимо от того, изменились ли для них исходные данные. Но это сочетание нужно будет не забывать нажимать каждый раз при изменении исходных данных.
- Добавить в код наших макрофункций (в любое место) команду Application.Volatile True. Эта команда языка Visual Basic заставляет Excel пересчитывать результаты нашей функции при изменении любой ячейки на листе (или по нажатию F9). Однако, в этом случае, скорость работы наших функций заметно снизится, т.к. их пересчёт будет происходить постоянно — даже когда мы не меняли цвета или значения ячеек в исходных данных. Пользуйтесь этим методом осторожно.
И помните о том, что наша функция перебирает все (и пустые тоже) ячейки в диапазоне DataRange и не задавайте в качестве первого аргумента целый столбец — «думать» будет долго 🙂
Функции для суммирования значений по цвету ячеек в EXCEL не существует (по крайней мере, в EXCEL 2016 и в более ранних версиях). Вероятно, подавляющему большинству пользователей это не требуется.
Пусть дан диапазон ячеек в столбце А. Пользователь выделил цветом ячейки, чтобы разбить значения по группам.
Необходимо сложить значения ячеек в зависимости от цвета фона. Основная задача: Как нам «объяснить» функции сложения, что нужно складывать значения, например, только зеленых ячеек?
Это можно сделать разными способами, приведем 3 из них: с помощью Автофильтра , Макрофункции ПОЛУЧИТЬ.ЯЧЕЙКУ() и VBA.
С помощью Автофильтра (ручной метод)
- Добавьте справа еще один столбец с заголовком Код цвета .
- Выделите заголовки и нажмите CTRL+SHIFT+L, т.е. вызовите Автофильтр ( подробнее здесь )
- Вызовите меню Автофильтра , выберите зеленый цвет
- Будут отображены только строки с зелеными ячейками
- Введите напротив каждого «зеленого» значения число 1
- Сделайте тоже для всех цветов
Введите формулу =СУММЕСЛИ(B7:B17;E7;A7:A17) как показано в файле примера (лист Фильтр) .
Для подсчета значений используйте функцию СЧЕТЕСЛИ() .
С помощью Макрофункции ПОЛУЧИТЬ.ЯЧЕЙКУ()
Сразу предупрежу, что начинающему пользователю EXCEL будет сложно разобраться с этим и следующим разделом.
Идея заключается в том, чтобы автоматически вывести в соседнем столбце числовой код фона ячейки (в MS EXCEL все цвета имеют соответствующий числовой код). Для этого нам потребуется функция, которая может вернуть этот код. Ни одна обычная функция этого не умеет. Используем макрофункцию ПОЛУЧИТЬ.ЯЧЕЙКУ(), которая возвращает код цвета заливки ячейки (она может много, но нам потребуется только это ее свойство).
Примечание: Макрофункции — это набор функций к EXCEL 4-й версии, которые нельзя напрямую использовать на листе EXCEL современных версий, а можно использовать только в качестве Именованной формулы . Макрофункции — промежуточный вариант между обычными функциями и функциями VBA. Для работы с этими функциями требуется сохранить файл в формате с макросами *.xlsm
- Сделайте активной ячейку В7 (это важно, т.к. мы будем использовать относительную адресацию в формуле)
- В Диспетчере имен введите формулу =ПОЛУЧИТЬ.ЯЧЕЙКУ(63;Макрофункция!A7)
- Назовите ее Цвет
- Закройте Диспетчер имен
- Введите в ячейку В7 формулу =Цвет и скопируйте ее вниз.
Сложение значений организовано так же как и в предыдущем разделе.
Макрофункция работает кривовато:
- если вы измените цвет ячейки, то макрофункция не обновит значения кода (для этого нужно опять скопировать формулу из В7 вниз или выделить ячейку, нажать клавишу F2 и затем ENTER )
- функция возвращает только 56 цветов (так называемая палитра EXCEL), т.е. если цвета близки, например, зеленый и светло зеленый, то коды этих цветов могут совпасть. Подробнее об этом см. лист файла примера Colors . Как следствие, будут сложены значения из ячеек с разными цветами.
С помощью VBA
В файле примера на листе VBA приведено решение с помощью VBA. Решений может быть множество:
Как в Excel посчитать сумму закрашенных ячеек?
Считаем сумму и количество ячеек по цвету во всей книге
Диапазон указывать не нужно, но необходимо в скобках указать любую ячейку с заливкой нужного цвета, например, =WbkSumCellsByColor(A1), и формула вернет сумму всех ячеек в книге, окрашенных в этот же цвет.
Как в Excel задать условие по цвет ячейки?
- Выделите диапазон ячеек B2:L15 и выберите инструмент: «ГЛАВНАЯ»-«Стили»-«Условное форматирование»-«Создать правило». .
- В поле ввода введите формулу:
- Щелкните на кнопку «Формат» и укажите на вкладке «Заливка» каким цветом будут выделены ячейки актуального месяца.
Как посчитать выделенные цветом ячейки?
- Нажмите кнопку Счёт по цвету на панели XLTools. .
- Из выпадающего списка «Учитывать только» выберите, какой тип цветовой расцветки следует учитывать в дальнейших расчётах: .
- Из следующего выпадающего списка выберите «Вычислять по цвету» Фона.
Как посчитать количество заполненных ячеек в строке Excel?
- СЧЁТЗ: подсчитывает количество непустых ячеек.
- СЧЁТ: подсчитывает количество ячеек, содержащих числа.
- СЧИТАТЬПУСТОТЫ: подсчитывает количество пустых ячеек.
Как посчитать количество одинаковых ячеек в Excel?
Для подсчета количества ячеек, содержащих определенный текст, вы можете использовать функцию СЧЁТЕСЛИ. В общей форме формулы (выше), RNG является диапазон ячеек, TXT представляет собой текст, который должны содержать ячейки, и «*» является подстановочным символом, соответствующим любому количеству символов.
Как суммировать ячейки по условию?
Первым делом нужно указать расположение номера: =СУММЕСЛИМН(D2:D11; Другими словами нужно ввести формулу для суммирования чисел в столбце, если они удовлетворяют условиям. Что диапазон ячеек — это первый аргумент в этой формуле — первая часть данных, функция требует в качестве входных данных.
Как подсчитать или суммировать ячейки на основе цвета ячеек в листе Google?
- Откройте Tools > Script Editor.
- Вставьте код ниже, сохраните сценарий
- Вернитесь к своей электронной таблице. Используйте с =countColoredCells(A1:Z5,C5) , где C5 — ячейка с цветом, который нужно подсчитать.
Как посчитать количество ячеек по цвету в гугл таблице?
- Установите электроинструменты через панель дополнений (Дополнения- > Получить дополнения)
- На боковой панели Power Tools нажмите кнопку Σ и в этом меню выберите пункт меню «Sum by Color»
- Выберите «Pattern cell» с цветом markup, который вы хотите найти
Как изменить цвет текста в Excel формулой?
- Выделите ячейку или диапазон ячеек с данными, которые вы хотите отформатировать. Вы также можете выбрать часть текста в ячейке.
- На вкладке Главная щелкните стрелку рядом с кнопкой Цвет шрифта .
- Выберите цвет в группе Цвета темы или Стандартные цвета.
Как в Excel закрасить ячейку по условию или формуле?
Закрасить ячейки на условиях очень просто. Выберите ячейки, столбцы или строки, цвет которых Вы хотите изменить. Затем на вкладке Главная перейдите в меню Стили и выберите Условное форматирование > Условия выделения ячейки. Выберите подходящее Вам условие.
Как закрасить ячейку в Excel в зависимости от даты?
Подсветка дат и сроков с помощью правил выделения ячеек
Для начала необходимо выделить нужный диапазон с вашими датами, на панели управления во вкладке «Главная», выбрать выпадающее меню «Условное форматирование», выбрать в списке «Правила выделения ячеек», далее выбрать тип «Дата…».