Xlfn floor math что это в эксель

Обновлено: 03.07.2024

На данный момент в Microsoft Excel имеется почти пять сотен функций рабочего листа, доступных через окно Мастера функций - кнопка fx в строке формул. Это весьма приличный набор, но, тем не менее, почти каждый пользователь рано или поздно сталкивается с ситуацией, когда в этом списке не оказывается нужной ему функции - просто потому, что её нет в Excel.

До сих пор единственным способом решить эту проблему были макросы, т.е. написание своей пользовательской функции (UDF = User Defined Function) на Visual Basic, что требует соответствующей программистской квалификации и бывает, порой, совсем непросто. Однако, с последними обновлениями Office 365 ситуация изменилась в лучшую сторону - в Excel была добавлена специальная "обёрточная" функция LAMBDA. С её помощью задача по созданию собственных функций теперь решается легко и красиво.

Давайте рассмотрим принцип её использования на следующем примере.

Как вы, скорее всего, знаете в Excel есть несколько функции для разборки даты позволяющие определить номер дня, месяца, недели и года для указанной даты. Но почему-то нет функции, определяющий номер квартала, который тоже часто нужен, правда? Давайте исправим этот недостаток и создадим с помощью LAMBDA собственную новую функцию для решения этой задачи.

Шаг 1. Пишем формулу

Начём с того, что вручную привычным образом напишем формулу в ячейке листа, которая вычисляет то, что нам нужно. В случае с номером квартала это можно сделать, например, так:

Исходная формула

Шаг 2. Заворачиваем в LAMBDA и тестируем

Теперь пришло время применить новую функцию LAMBDA и завернуть в неё нашу формулу. Синтаксис у функции следующий:

=LAMBDA( Переменная1 ; Переменная2 ; . ПеременнаяN ; Выражение )

где сначала перечисляются имена одной или нескольких переменных, а последним аргументом всегда идёт формула или вычисляемое выражение, которое их использует. Имена переменных не должны быть похожи на адреса ячеек и не должны содержать точки.

В нашем случае переменная будет только одна - дата, для которой мы считаем номер квартала. Переменную для неё давайте назовем, допустим, d. Тогда завернув нашу формулу в функцию LAMBDA и подменив адрес исходной ячейки A2 на придуманное имя переменной, мы получим:

Заворачиваем в LAMBDA

Обратите внимание, что после такого преобразования наша формула (по сути - правильная!) стала выдавать ошибку, т.к. теперь в неё не передается исходная дата из ячейки А2. Для тестирования и уверенности, можно передать ей аргументы, дописав их после функции LAMBDA в круглых скобках:

Добавляем аргументы к LAMBDA

Шаг 3. Создаем имя

Теперь самая легкая и приятная часть. Открываем Диспетчер имен на вкладке Формулы (Formulas - Name Manager) и создаём новое имя кнопкой Создать (Create) . Придумываем и вводим имя для нашей будущей функции (например, НОМКВАРТАЛА), а в поле Ссылка (Reference) аккуратно копируем из строки формул и вставляем нашу функцию LAMBDA, только без последнего аргумента (А2):

Создаем имя с функцией LAMBDA

Всё. После нажатия на ОК созданную функцию можно использовать в любой ячейке на любом листе этой книги:

Готовая функция в выпадающем списке

Использование в других книгах

Поскольку созданные с помощью LAMBDA пользовательские функции представляет из себя, по сути, именованные диапазоны, то можно легко сделать их доступными не только в текущей книге. Достаточно будет скопировать ячейку с функцией и вставить в любое место листа другого файла.

LAMBDA и динамические массивы

Пользовательские функции, создаваемые с помощью функции LAMBDA успешно поддерживают работу с новыми динамическими массивами и их функциями (ФИЛЬТР, УНИК, СОРТ), добавленными в Microsoft Excel в 2020 году.

Допустим, мы хотим создать новую пользовательскую функцию, которая сравнивала бы два списка и выдавала разницу между ними - те элементы из первого списка, которые отсутствуют во втором. Жизненная задача, не правда ли? Раньше для такого использовали либо функции а-ля ВПР (VLOOKUP) , либо сводные таблицы, либо запросы Power Query. Теперь же можно обойтись одной формулой:

Сравнение списков

В английской версии это будет:

Здесь функция СЧЁТЕСЛИ подсчитывает количество вхождений каждого элемента первого списка во второй, а затем функция ФИЛЬТР отбирает только те из них, у кого этих вхождений не оказалось. Завернув эту конструкцию в LAMBDA и создав на её основе именованный диапазон с названием, например, ПОИСКОТЛИЧ - мы получим удобную функцию, выдающую результат сравнения двух списков в виде динамического массива:

Готовая функция ПОИСКОТЛИЧ

Если в качестве исходных данных будут не обычные, а "умные" таблицы - наша функция тоже справится без проблем:

Умные таблицы и функция LAMBDA

Другой пример - динамическое разделение текста путём превращения его в XML и последующего разбора по ячейкам с помощью функции ФИЛЬТР.XML, которое мы недавно разбирали. Чтобы не воспроизводить эту сложную формулу каждый раз вручную, проще будет завернуть её в LAMBDA и создать на её основе динамический диапазон, т.е. новую компактную и удобную функцию, назвав её, например, РАЗДТЕКСТ:

Функция разделения текста по ячейкам

Первым аргументом этой функции будет ячейка с исходным текстом, а вторым - символ-разделитель, в возвращать результат она будет в виде горизонтального динамического массива. Код функции при этом будет следующим:

Список примеров можно продолжать бесконечно - в любой ситуации, где вам часто приходится вводить одну и ту же длинную и громоздкую формулу функция LAMBDA сделает жизнь ощутимо проще.

Рекурсивный перебор символов

Все предыдущие примеры демонстрировали только одну, наиболее очевидную, сторону функции LAMBDA - её применение в качестве "обёртки" для заворачивания в неё длинных формул и упрощения их ввода. На самом деле, у LAMBDA есть ещё одна, гораздо более глубокая, сторона, превращающая её почти что в полноценный язык программирования.

Дело в том, что принципиально важной особенностью LAMBDA-функций является возможность реализации в них рекурсии - логики вычислений, когда в процессе расчета функция вызывает сама себя. С непривычки, возможно, звучит жутковато, но в программировании рекурсия - обычное дело. Даже в макросах на Visual Basic можно её реализовать, а теперь, вот, как видите, дошло и до Excel. Давайте попробуем разобраться в этой технике на практическом примере.

Предположим, нам требуется создать пользовательскую функцию, которая удаляла бы из исходного текста все заданные символы. Полезность такой функции, думаю, доказывать вам не нужно - с её помощью было бы очень удобно очищать замусоренные входные данные, правда?

Однако, по сравнению с предыдущими, нерекурсивными примерами, нас ожидают две сложности.

  1. Нам придётся придумать название для нашей функции до того, как мы начнём писать её код, т.к. в нём это название уже будет использоваться для вызова функцией самой себя.
  2. Ввести такую рекурсивную функцию в ячейку и отлаживать её, указав после LAMBDA аргументы в скобках (как мы делали ранее) не получится. Придётся создавать функцию сразу "с нуля" в Диспетчере Имен (Name Manager).

Назовём нашу функцию, допустим, ОЧИСТКА и хотелось бы, чтобы у неё было два аргумента - текст, который нужно почистить и список исключаемых символов в виде текстовой строки:

Создадим, как делали ранее, на вкладке Формулы в Диспетчере имён именованный диапазон, назовём его ОЧИСТКА и введём в поле Диапазон следующую конструкцию:

Здесь переменная t - это исходный очищаемый текст, а d - список символов на удаление.

Работает всё это следующим образом:

Итерация 1

Фрагмент ПОДСТАВИТЬ(t;ЛЕВСИМВ(d);""), как легко догадаться, заменяет в исходном тексте t первый слева символ из удаляемого набора d на пустую текстовую строку, т.е. удаляет букву "А". В качестве промежуточного результата получаем:

Вш зкз н 125 руб.

Итерация 2

Затем функция вызывает сама себя и в качестве входных данных (первый аргумент) получает уже то, что осталось после очистки на предыдущем шаге, а вторым аргументом задавая строку исключаемых символов начиная не с первого, а со второго символа, т.е. "БВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ.," без начальной "А" - это делает функция ПСТР. Как и до этого, функция берет первый слева символ из оставшихся (Б) и заменяет его в данном ей тексте (Зкз н 125 руб.) на пустую строку - получаем в качестве промежуточного результата:

Вш зкз н 125 ру.

Итерация 3

Функция опять вызывает сама себя, получая в качестве первого аргумента то, что осталось от зачищаемого текста на предыдущей итерации (Вш зкз н 125 ру.), а в качестве второго - урезанный слева ещё на один символ набор исключаемых знаков, т.е. "ВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ.," без начальной "Б". Затем опять берёт из этого набора первый символ слева (В) и удаляет его из текста - получаем:

И так далее - надеюсь, вы ухватили идею. С каждой итерацией список удаляемых символов будет обрезаться слева и мы будем искать и заменять на пустоту очередной символ из набора.

Когда все символы закончатся нам необходимо будет выйти из цикла - эту роль как раз и выполняет функция ЕСЛИ (IF) , в которую завернута наша конструкция. Если символов для удаления не осталось (d=""), то функция не должна больше вызывать саму себя, а просто должна вернуть зачищаемый текст (переменная t) в его финальном виде.

Рекурсивный перебор ячеек

Похожим образом можно реализовать и рекурсивный перебор ячеек в заданном диапазоне. Предположим, что мы хотим создать лямбда-функцию с именем ЗАМЕНАПОСПИСКУ для оптовой замены фрагментов в исходном тексте по заданному списку-справочнику. Выглядеть всё это в результате должно так:

Пример рекурсивной функции ЗАМЕНАПОСПИСКУ

Т.е. у нашей функции ЗАМЕНАПОСПИСКУ будет три аргумента:

  1. ячейка с текстом для обработки (исходный адрес)
  2. первая ячейка столбца со значениями для поиска из справочника
  3. первая ячейка столбца со значениями на замену из справочника

Функция должна проходить сверху-вниз по справочнику и заменять последовательно все варианты из левого столбца Найти на соответствующие варианты из правого столбца Заменить. Реализовать такое можно следующей рекурсивной лямбда-функцией:

Рекурсивная лямбда-функция замены текста

Здесь в переменной t хранится исходный текст из очередной ячейки столбца Адрес, а переменные n и z указывают на первые ячейки в столбцах Найти и Заменить, соответственно.
Как и в предыдущем примере, сначала эта функция заменяет в исходном тексте с помощью функции ПОДСТАВИТЬ (SUBSTITUTE) данные по первой строке справочника (т.е. СПб на Санкт-Петербург ), а затем вызывает сама-себя, но со сдвигом по справочнику вниз на следующую строку (т.е. заменяет С-Пб на Санкт-Петербург ). Затем вызывает себя ещё раз со сдвигом вниз - и заменяет уже Питер на Санкт-Петербург и т.д.

Сдвиг вниз на каждой итериации реализован стандартной экселевской функцией СМЕЩ (OFFSET) , у которой в данном случае три аргумента - исходный диапазон, сдвиг по строкам (1) и сдвиг по столбцам (0).

Ну, и как только мы достигаем конца справочника (n=""), то должны закончить рекурсию - прекращаем вызывать сами себя и выводим то, что накопилось после всех выполненных замен в переменной исходного текста t.

Вот и всё. Никаких хитрых макросов или запросов Power Query - вся задача решается одной функцией.

In general a formula in Excel can be used directly in the write_formula() method:

_images/working_with_formulas1.jpg

However, there are a few potential issues and differences that the user should be aware of. These are explained in the following sections.

Non US Excel functions and syntax

Excel stores formulas in the format of the US English version, regardless of the language or locale of the end-user’s version of Excel. Therefore all formula function names written using XlsxWriter must be in English:

Also, formulas must be written with the US style separator/range operator which is a comma (not semi-colon). Therefore a formula with multiple values should be written as follows:

If you have a non-English version of Excel you can use the following multi-lingual formula translator to help you convert the formula. It can also replace semi-colons with commas.

Formula Results

XlsxWriter doesn’t calculate the result of a formula and instead stores the value 0 as the formula result. It then sets a global flag in the XLSX file to say that all formulas and functions should be recalculated when the file is opened.

This is the method recommended in the Excel documentation and in general it works fine with spreadsheet applications. However, applications that don’t have a facility to calculate formulas will only display the 0 results. Examples of such applications are Excel Viewer, PDF Converters, and some mobile device applications.

If required, it is also possible to specify the calculated result of the formula using the optional value parameter for write_formula() :

The value parameter can be a number, a string, a bool or one of the following Excel error codes:

It is also possible to specify the calculated result of an array formula created with write_array_formula() :

However, using this parameter only writes a single value to the upper left cell in the result array. For a multi-cell array formula where the results are required, the other result values can be specified by using write_number() to write to the appropriate cell:

Dynamic Array support

  • FILTER()
  • UNIQUE()
  • SORT()
  • SORTBY()
  • XLOOKUP()
  • XMATCH()
  • RANDARRAY()
  • SEQUENCE()

The following special case functions were also added with Dynamic Arrays:

Dynamic arrays are ranges of return values that can change in size based on the results. For example, a function such as FILTER() returns an array of values that can vary in size depending on the the filter results. This is shown in the snippet below from Example: Dynamic array formulas :

Which gives the results shown in the image below. The dynamic range here is “F2:I5” but it could be different based on the filter criteria.

_images/dynamic_arrays02.jpg

It is also possible to get dynamic array behavior with older Excel functions. For example, the Excel function =LEN(A1) applies to a single cell and returns a single value but it is also possible to apply it to a range of cells and return a range of values using an array formula like . This type of “static” array behavior is called a CSE (Ctrl+Shift+Enter) formula. With the introduction of dynamic arrays in Excel 365 you can now write this function as =LEN(A1:A3) and get a dynamic range of return values. In XlsxWriter you can use the write_array_formula() worksheet method to get a static/CSE range and write_dynamic_array_formula() to get a dynamic range. For example:

Which gives the following result:

_images/intersection03.jpg

The difference between the two types of array functions is explained in the Microsoft documentation on Dynamic array formulas vs. legacy CSE array formulas. Note the use of the word “legacy” here. This, and the documentation itself, is a clear indication of the future importance of dynamic arrays in Excel.

For a wider and more general introduction to dynamic arrays see the following: Dynamic array formulas in Excel.

We can see how this operator works in practice by considering the formula we used in the last section: =LEN(A1:A3) . In Excel versions without support for dynamic arrays, i.e. prior to Excel 365, this formula would operate on a single value from the input range and return a single value, like this:

_images/intersection01.jpg

There is an implicit conversion here of the range of input values, “A1:A3”, to a single value “A1”. Since this was the default behavior of older versions of Excel this conversion isn’t highlighted in any way. But if you open the same file in Excel 365 it will appear as follows:

_images/intersection02.jpg

Finally, if you entered this formula in Excel 365, or with write_dynamic_array_formula() in XlsxWriter, it would operate on the entire range and return an array of values:

_images/intersection03.jpg

In the section above on Dynamic Array support we saw that dynamic array formulas can return variable sized ranges of results. The Excel documentation refers to this as a “Spilled” range/array from the idea that the results spill into the required number of cells. This is explained in the Microsoft documentation on Dynamic array formulas and spilled array behavior.

_images/spill01.jpg

Unfortunately, Excel doesn’t store the formula like this and in XlsxWriter you need to use the explicit function ANCHORARRAY() to refer to a spilled range. The example in the image above was generated using the following:

The Excel 365 LAMBDA() function

Note: at the time of writing the LAMBDA() function in Excel is only available to Excel 365 users subscribed to the Beta Channel updates.

Beta Channel versions of Excel 365 have introduced a powerful new function/feature called LAMBDA() . This is similar to the lambda function in Python (and other languages).

Consider the following Excel example which converts the variable temp from Fahrenheit to Celsius:

This could be called in Excel with an argument:

Or assigned to a defined name and called as a user defined function:

This is similar to this example in Python:

A XlsxWriter program that replicates the Excel is shown in Example: Excel 365 LAMBDA() function .

The formula is written as follows:

Note, that the parameters in the LAMBDA() function must have a “_xlpm.” prefix for compatibility with how the formulas are stored in Excel. These prefixes won’t show up in the formula, as shown in the image.

_images/lambda01.jpg

The LET() function is often used in conjunction with LAMBDA() to assign names to calculation results.

Formulas added in Excel 2010 and later

Excel 2010 and later added functions which weren’t defined in the original file specification. These functions are referred to by Microsoft as future functions. Examples of these functions are ACOT , CHISQ.DIST.RT , CONFIDENCE.NORM , STDEV.P , STDEV.S and WORKDAY.INTL .

When written using write_formula() these functions need to be fully qualified with a _xlfn. (or other) prefix as they are shown the list below. For example:

These functions will appear without the prefix in Excel:

_images/working_with_formulas2.jpg

Alternatively, you can enable the use_future_functions option in the Workbook() constructor, which will add the prefix as required:

If the formula already contains a _xlfn. prefix, on any function, then the formula will be ignored and won’t be expanded any further.

Enabling the use_future_functions option adds an overhead to all formula processing in XlsxWriter. If your application has a lot of formulas or is performance sensitive then it is best to use the explicit _xlfn. prefix instead.

The dynamic array functions shown in the Dynamic Array support section above are also future functions:

  • _xlfn.UNIQUE
  • _xlfn.XMATCH
  • _xlfn.XLOOKUP
  • _xlfn.SORTBY
  • _xlfn._xlws.SORT
  • _xlfn._xlws.FILTER
  • _xlfn.RANDARRAY
  • _xlfn.SEQUENCE
  • _xlfn.ANCHORARRAY
  • _xlfn.SINGLE
  • _xlfn.LAMBDA

However, since these functions are part of a powerful new feature in Excel, and likely to be very important to end users, they are converted automatically from their shorter version to the explicit future function version by XlsxWriter, even without the use_future_function option. If you need to override the automatic conversion you can use the explicit versions with the prefixes shown above.

Using Tables in Formulas

Worksheet tables can be added with XlsxWriter using the add_table() method:

By default tables are named Table1 , Table2 , etc., in the order that they are added. However it can also be set by the user using the name parameter:

If you need to know the name of the table, for example to use it in a formula, you can get it as follows:

When used in a formula a table name such as TableX should be referred to as TableX[] (like a Python list):

Dealing with formula errors

The following shows how to do that using Linux unzip and libxml’s xmllint to format the XML for clarity:

doc потолок математическая функция 1

Описание

Освободи Себя CEILING.MATH функция округляет заданное число до ближайшего кратного значимости или до ближайшего целого числа.

Синтаксис и аргументы

Синтаксис формулы

=CEILING.MATH( number , [significance] , [mode] )

аргументы

  • Number: Необходимые. Числовое значение, которое нужно округлить в большую сторону.
  • Significance: Необязательный. Множитель, до которого нужно округлить число.
  • Mode: Необязательный. При использовании функции CEILING.MATH решите округлять отрицательные числа в сторону или от нуля, по умолчанию - 0.

Возвращаемое значение

Освободи Себя CEILING.MATH функция округляет число до ближайшего кратного.

Ноты:

1. Если значение опущено или значение по умолчанию, значение равно 1 для положительного числа и -1 для отрицательного числа. Например, 2 округляется до 2, -2 округляется до -2.

2. Если значение не указано или значение по умолчанию, положительные десятичные числа будут округлены до ближайшего целого числа. Например, округлите 1.23 до 2.

3. Если значение и режим опущены или заданы по умолчанию, отрицательные десятичные числа будут округлены до ближайшего целого числа, которое приближается к нулю. Например, округлите -1.23 до -1.

4. И число, и значимость отрицательны, результат округляется от нуля в меньшую сторону.

5. Если Mode не равен нулю, отрицательное число будет округлено до ближайшего кратного значимости, отличного от нуля, например, =CEILING.MATH(-12,5,1) , от -12 до -15.

6. Если число является точным кратным значимости, изменений не происходит.

Использование и примеры

Вот несколько примеров, которые помогут вам понять, как использовать CEILING.MATH функция в Excel.

Положительное целое число

Положительное десятичное число

Положительное целое число

Отрицательное десятичное число

Относительные функции:

Excel CEILING Function
Освободи Себя CEILING функция возвращает число, округленное до ближайшего кратного значимости. Например, = CEILING (10.12,0.2) возвращает 10.2, округляя 10.12 до ближайшего кратного 0.2.

Excel CEILING.PRECISE функция
Освободи Себя CEILING.PRECISE Функция возвращает число, округленное до ближайшего кратного или ближайшего целого числа, игнорируя знак числа, округляет все числа в большую сторону.

Относительные статьи:

Округление числа до ближайшего числа 5,10, 50 или 100 в Excel
В этой статье представлены некоторые простые формулы для округления чисел до ближайшего определенного числа, а также представлены формулы для округления чисел до следующего или последнего ближайшего числа.

Лучшие инструменты для работы в офисе

Kutools for Excel - поможет вам выделиться из толпы

Хотите быстро и безупречно выполнять свою повседневную работу? Kutools for Excel предлагает мощные расширенные функции 300 (объединение книг, сумма по цвету, разделение содержимого ячеек, дата преобразования и так далее . ) и экономия 80% времени для вас.

документ ifs функция 1

Синтаксис:

Синтаксис функции IFS в Excel:

=IFS( logical_test1 , value_if_true1 , [ logical_test2 , value_if_true2 ]. )

Аргументы:

  • logical_test1 : Необходимые. Условие, которое принимает значение ИСТИНА или ЛОЖЬ.
  • value_if_true1 : Необходимые. Возвращает результат, если логический_тест1 - ИСТИНА. Может быть пустым.
  • logical_test2 : Необязательный. Второе условие, которое принимает значение ИСТИНА или ЛОЖЬ.
  • value_if_true2 : Необязательный. Возвращает второй результат, если логический_тест2 ИСТИНА. Может быть пустым.

Заметки:

Вернуть:

Чтобы проверить несколько условий и вернуть соответствующее значение с первым результатом ИСТИНА.

Примеры:

Пример 1. Использование функций IFS для определения оценки на основе баллов

Чтобы назначить оценку каждому учащемуся на основе их оценок, как показано на следующем снимке экрана:

документ ifs функция 2

Пожалуйста, примените приведенную ниже формулу, чтобы оценка была распределена следующим образом: 0-60: оценка F; 60-70 - сорт Д; 70-80: сорт С; 80-90: марка Б; больше или равно 90: класс A.

документ ifs функция 3

Внимание: Вы также можете использовать ссылки на ячейки для замены статических чисел следующим образом:

документ ifs функция 4

Пример 2: Использование функций IFS для расчета комиссии на основе продаж

Функция IFS может помочь вам рассчитать суммы комиссионных на основе различных комиссионных ставок и совокупных сумм продаж за каждый месяц.

Предположим, у вас есть таблица с общими объемами продаж и комиссионных для всех продавцов, как показано на следующем скриншоте, как вы можете рассчитать комиссию на основе различных комиссионных ставок в Excel?

документ ifs функция 5

Следующая формула может дать значение комиссии для каждого торгового персонала, используйте ее:

  • если сумма продаж 0-40000: комиссия = продажи * 0;
  • если сумма продаж 40000-80000: комиссия = продажи * 2%;
  • если сумма продаж 80000-100000: комиссия = продажи * 3.5%;
  • если сумма продаж больше или равна 100000: комиссия = продажи * 7%;

документ ifs функция 6

Обычно используйте функцию IFS:

=IFS(B2="Apple","Fruit", B2="Orange","Fruit", B2="Potato","Veg",B2="Steak","Meat", B2="Chicken","Meat")

документ ifs функция 7

Используйте функцию IFS с условием ELSE:

=IFS(B2="Apple","Fruit", B2="Orange","Fruit", B2="Potato","Veg",B2="Steak","Meat", B2="Chicken","Meat", "TRUE","Others")

Внимание: В приведенной выше формуле добавление последнего условия «ИСТИНА», «Другие» вернет значение «Другие», если ни одно из условий в функции IFS не оценивается как ИСТИНА.

документ ifs функция 8

Лучшие инструменты для работы в офисе

Kutools for Excel - поможет вам выделиться из толпы

Хотите быстро и безупречно выполнять свою повседневную работу? Kutools for Excel предлагает мощные расширенные функции 300 (объединение книг, сумма по цвету, разделение содержимого ячеек, дата преобразования и так далее . ) и экономия 80% времени для вас.

Читайте также: