Запишите арифметическое выражение на excel

Работа с формулами в excel

Свойства ячейки (объекта Range)

Свойство Описание
Address Возвращает адрес ячейки (диапазона).
Borders Возвращает коллекцию Borders, представляющую границы ячейки (диапазона). Подробнее…
Cells Возвращает объект Range, представляющий коллекцию всех ячеек заданного диапазона. Указав номер строки и номер столбца или порядковый номер ячейки в диапазоне, мы получаем конкретную ячейку. Подробнее…
Characters Возвращает подстроку в размере указанного количества символов из текста, содержащегося в ячейке. Подробнее…
Column Возвращает номер столбца ячейки (первого столбца диапазона). Подробнее…
ColumnWidth Возвращает или задает ширину ячейки в пунктах (ширину всех столбцов в указанном диапазоне).
Comment Возвращает комментарий, связанный с ячейкой (с левой верхней ячейкой диапазона).
CurrentRegion Возвращает прямоугольный диапазон, ограниченный пустыми строками и столбцами. Очень полезное свойство для возвращения рабочей таблицы, а также определения номера последней заполненной строки.
EntireColumn Возвращает весь столбец (столбцы), в котором содержится ячейка (диапазон). Диапазон может содержаться и в одном столбце, например, .
EntireRow Возвращает всю строку (строки), в которой содержится ячейка (диапазон). Диапазон может содержаться и в одной строке, например, .
Font Возвращает объект Font, представляющий шрифт указанного объекта. Подробнее о цвете шрифта…
Interior Возвращает объект Interior, представляющий внутреннюю область ячейки (диапазона). Применяется, главным образом, для возвращения или назначения цвета заливки (фона) ячейки (диапазона). Подробнее…
Name Возвращает или задает имя ячейки (диапазона).
NumberFormat Возвращает или задает код числового формата для ячейки (диапазона). Примеры кодов числовых форматов можно посмотреть, открыв для любой ячейки на рабочем листе Excel диалоговое окно «Формат ячеек», на вкладке «(все форматы)». Свойство NumberFormat диапазона возвращает значение NULL, за исключением тех случаев, когда все ячейки в диапазоне имеют одинаковый числовой формат. Если нужно присвоить ячейке текстовый формат, записывается так: . Общий формат: .
Offset Возвращает объект Range, смещенный относительно первоначального диапазона на указанное количество строк и столбцов. Подробнее…
Resize Изменяет размер первоначального диапазона до указанного количества строк и столбцов. Строки добавляются или удаляются снизу, столбцы – справа. Подробнее…
Row Возвращает номер строки ячейки (первой строки диапазона). Подробнее…
RowHeight Возвращает или задает высоту ячейки в пунктах (высоту всех строк в указанном диапазоне).
Text Возвращает форматированный текст, содержащийся в ячейке. Свойство Text диапазона возвращает значение NULL, за исключением тех случаев, когда все ячейки в диапазоне имеют одинаковое содержимое и один формат. Предназначено только для чтения. Подробнее…
Value Возвращает или задает значение ячейки, в том числе с отображением значений в формате Currency и Date. Тип данных Variant. Value является свойством ячейки по умолчанию, поэтому в коде его можно не указывать.
Value2 Возвращает или задает значение ячейки. Тип данных Variant. Значения в формате Currency и Date будут отображены в виде чисел с типом данных Double.

В таблице представлены не все свойства объекта Range. С полным списком вы можете ознакомиться не сайте разработчика.

Шаг 2: выбор функции

Итак, вне зависимости от того, какой из вышеперечисленных методов был выбран, перед нами появится окно мастера (функция Insert). Он состоит из следующих элементов:

  1. Вверху есть поле для поиска конкретной функции. Все, что мы делаем, это вводим имя (например, «суммы») и нажимаем «Найти». Результаты будут отображены в поле под надписью «Выберите функцию”.
  2. Параметр «Категория». Щелкаем по текущему значению и в выпадающем списке выбираем категорию, к которой принадлежит наша функция (например «Математика”).Всего доступно 15 опций:
    • финансовые;
    • дата и время;
    • математический;
    • статистический;
    • ссылки и массивы;
    • работа с базой данных;
    • текст;
    • логические;
    • проверить свойства и значения;
    • инженерное дело;
    • аналитический;
    • совместимость;
    • интернет.
    • У нас также есть возможность просмотреть 10 недавно использованных функций или представить все доступные операторы в алфавитном порядке без категоризации. Примечание. «Совместимость» — это категория, в которую входят функции из предыдущих версий программы (и у них уже есть современные аналоги). Это было сделано для сохранения совместимости и функциональности документов, созданных в устаревших версиях Excel.
  3. После установки категории остается только определить функцию в поле «Выбрать функцию» (выбрать ее, щелкнув левой кнопкой мыши). Когда все будет готово, нажмите кнопку ОК (или Enter).

Функция Excel – Если

Это обычная функция на проверку выражения или значения. Иногда бывает полезна. Например, нам необходимо в столбец C записывать значение «Больше» или «Меньше» на основании сравнения полей A и B т.е. например, если A больше B то записываем «Больше» если меньше то соответственно записываем «Меньше»:

На сегодня я думаю достаточно, да и принцип я думаю, понятен, т.е. в окне выбора функций все функции сгруппированы по назначению (категории) и с подробным описанием, как вызывается окно функций, Вы уже знаете, но все равно напомню, на панели жмем «Вставить функцию» и ищем нужную Вам функции и все.

Надеюсь, все выше перечисленные примеру окажутся Вам полезны.

Особенности использования функций ДМАКС и ДМИН в Excel

Обе рассматриваемые функции имеют однотипный синтаксис (список аргументов совпадает):

=ДМАКС(база_данных;поле;условия)

=ДМИН(база_данных;поле;условия)

Описания аргументов:

  • база_данных – обязательный, может быть указан в виде ссылки на диапазон ячеек, которые соответствуют БД, списку или таблице, которая соответствует критериям, установленным для баз данных в Excel. В такой таблице строки являются записями, а столбцы – полями. В первой строке должны быть указаны наименования полей (столбцов).
  • поле – обязательный, принимает ссылку на ячейку, содержащую наименование столбца (поля) таблицы, списка или БД, где будет выполняться поиск наибольшего (ДМАКС) или наименьшего (ДМИН) значения соответственно. Может быть также указан в виде текстовых данных или числового значения – соответствующего номера столбца (отсчет начинается с левой части таблицы с числа 1).
  • условия – обязательный, принимает ссылку на диапазон ячеек, в которых указаны критерии поиска. В таком диапазоне должно содержаться хотя бы одно поле, соответствующее полю таблицы, списка или БД, в которых будет выполняться поиск максимального или минимального значения.

Примечания:

  1. Если любой из аргументов функции указан в виде данных недопустимого типа или ссылки на диапазон пустых ячеек, результатом выполнения любой из рассматриваемых функций будет код ошибки #ЗНАЧ!.
  2. Если в качестве аргумента поле был указан столбец (поле БД), не содержащий числовые данные, результатом выполнения функции будет значение 0 (нуль).
  3. Для удобства указания аргумента условия рекомендуют создавать отдельную таблицу, содержащую не менее двух записей (строк). При этом первая строка должна содержать наименование полей данных, полностью соответствующих наименованиям полей таблицы (списка или БД), где выполняется поиск. Вторая (и последующие) строка должна содержать критерии поиска (логические выражения, данные для сравнения). Такую таблицу условий следует размещать над основной таблицей (БД или списком), поскольку последняя может пополняться новыми записями со временем.
  4. При написании условий используются записи следующих видов:
  • =»=телевизор» – точное совпадение текстовой строки. Для неточных совпадений можно использовать замещающие знаки, например, «*» – любое число символов, «?» – один любой символ;
  • Для числовых данных используют знаки сравнения значений: «>», «<», «=>», «=<» «<>».

Функции, связанные с возведением в степень и извлечением корня

Функция КОРЕНЬ

Извлекает квадратный корень из числа.

Синтаксис: =КОРЕНЬ(число), где аргумент число – является числом, либо ссылкой на ячейку с числовым значением.

Пример использования:

=КОРЕНЬ(4) – функция вернет значение 2.

Если возникает необходимость извлечь из числа корень со степенью больше 2, данное число необходимо возвести в степень 1/(показатель корня). Например, для извлечения кубического корня из числа 27 необходимо применить следующую формулу: =27^(1/3) – результат 3.

Функция СУММКВРАЗН

Производит суммирование возведенных в квадрат разностей между элементами двух диапазонов либо массивов.

Синтаксис: =СУММКВРАЗН(диапазон1; диапазон2), где первый и второй аргументы являются обязательными и содержать ссылки на диапазоны либо массивы с числовыми значениями. Текстовые и логические значения игнорируются.

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

Пример использования:

=СУММКВРАЗН({1;2};{0;4}) – функция вернет значение 5. Альтернативное решение =(1-0)^2+(2-4)^2.

Функция СУММКВ

Воспроизводит числа, заданные ее аргументами, в квадрат, после чего их суммирует.

Синтаксис: =СУММКВ(число1; ), где число1 … число255, число, либо ссылки на ячейки и диапазоны, содержащие числовые значения. Максимальное число аргументов 255, минимальное 1. Все текстовые и логические значения игнорируются, за исключением случаев, когда они заданы явно. В последнем случае текстовые значения возвращают ошибку, логические 1 для ИСТИНА, 0 для ЛОЖЬ.

Пример использования:

=СУММКВ(2;2) – функция вернет значение 8.=СУММКВ(2;ИСТИНА) – возвращает значение 5, так как ИСТИНА приравнивается к единице.

В данном примере текстовое значение игнорируется, так как оно задано через ссылку на диапазон.

Функция СУММСУММКВ

Возводит все элементы указанных диапазонов либо массивов в квадрат, суммирует их пары, затем выводит общую сумму.

Синтаксис: =СУММСУММКВ(диапазон1; диапазон2), где аргументы являются числами, либо ссылками на диапазоны или массивы.

Функция при обычных условиях возвращает точно такой же результат, как и функция СУММКВ. Но если в качестве элемента одного из аргументов будет указано текстовое или логическое значение, то проигнорирована будет вся пара элементов, а не только сам элемент.

Пример использования:

Рассмотрим применение функции СУММСУММКВ и СУММКВ к одним и тем же данным.

В первом случае функции возвращают один и тот же результат:

  • Алгоритм для СУММСУММКВ =(2^2+2^2) + (2^2+2^2) + (2^2+2^2);
  • Алгоритм для СУММКВ =2^2 +2 ^2 + 2^2 + 2^2 + 2^2 + 2^2.

Во втором случае функции вернут разные результаты из-за несущественных различий в алгоритме вычисления (части выделенные красным игнорируются, т.к. возвращают ошибку):

  • Алгоритм для СУММСУММКВ =(2^2+2^2) + (текст^2+2^2) + (2^2+2^2);
  • Алгоритм для СУММКВ =2^2 +2 ^2 + «текст»^2 + 2^2 + 2^2 + 2^2.

Функция СУММРАЗНКВ

Аналогична во всем функции СУММСУММКВ за исключение того, что для пар соответствующих элементов находится не сумма, а их разница.

Синтаксис: =СУММРАЗНКВ(диапазон1; диапазон2), где аргументы являются числами, либо ссылками на диапазоны или массивы.

Пример использования:

Кому важно знать Excel и где выучить основы

Excel нужен бухгалтерам, чтобы вести учет в таблицах. Экономистам, чтобы делать перерасчет цен, анализировать показатели компании. Менеджерам — вести базу клиентов. Аналитикам — строить и проверять гипотезы.

Программу можно освоить самостоятельно, например по статьям в интернете. Но это поможет понять только основные формулы. Если нужны глубокие знания — как строить сложные прогнозы, собирать калькулятор юнит-экономики, — пройдите курсы.

Аналитик данных: новая работа через 5 месяцев
Получится, даже если у вас нет опыта в IT

Узнать больше

На онлайн-курсе Skypro «Аналитик данных» научитесь владеть базовыми формулами Excel, работать с нестандартными данными, статистикой. Кроме Excel вы изучите Metabase, SQL, Power BI, язык программирования Python. Программа подойдет даже тем, у кого совсем нет опыта в анализе и кто не любит математику. Вас ждут живые вебинары, мастер-классы, домашки с разбором, помощь наставников.

Урок из курса «Аналитик данных» в Skypro

Формула 3: СУММЕСЛИ

Функция СУММЕСЛИ позволяет суммировать данные, при условии их соответствия определенным критериям.

Синтаксис

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

=СУММЕСЛИ(диапазон;условие;)

Давайте более подробно поймем, что каждый из аргументов собой являет:

  1. Условие. Этот аргумент позволяет передать в функцию ячейки, которые в дальнейшем подлежат суммированию.
  2. Диапазон суммирования. Этот аргумент не является обязательным, и он дает возможность задать ячейки, которые необходимо суммировать, если условие оказывается ложным.

Так, в данной ситуации Excel суммировал данные о тех запросах, где количество переходов превышает 100000.

Категории функций Эксель

Функции, встроенные в Excel, сгруппированы в несколько категорий:

    1. Финансовые позволяют производить вычисления, используемые в экономических расчетах, связанных обычно с ценными бумагами, начислением процентов, амортизацией и другими показателями;
    2. Дата и время. Эти функции позволяют работать с временными данными, например, можно вычислить день недели для определенной даты;
    3. Математические позволяют произвести расчеты, имеющие отношения к различным областям математики;
    4. Статистические позволяют определить различные категории статистики – дисперсию, вероятность, доверительный интервал и другие;
  1. Для обработки ссылок и массивов;
  2. Для работы с базой данных;
  3. Текстовые используются для проведения действия над текстовой информацией;
  4. Логические позволяют установить условия, при которых следует выполнить то или иное действие;
  5. Функции проверки свойств и значений.

Создание формулы в Excel

В приведенном примере формула =СУММ(A1;B1) позволяет определить сумму двух чисел в ячейках, которые расположены по горизонтали.

Формула начинается со знака «=». Далее задана функция СУММ. Она указывает, что необходимо произвести суммирование заданных значений.

В скобках числятся координаты ячеек. Выбирая ячейки, следует не забывать разделять их знаком «;».

Если нужно найти сумму трех чисел, то формула будет выглядеть следующим образом:

=СУММ(A1;B1;C1).

Формула суммы трех заданных чисел

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

Например,

=СУММ(A1:A10). На рисунке арифметическая операция будет выглядеть следующим образом:

Определение диапазона ячеек для формулы сложения

Также можно определить произведение этих чисел. В формуле вместо функции СУММ необходимо выбрать функцию ПРОИЗВЕД и задать диапазон ячеек.

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

Совет! Применяя формулу «ПРОИЗВЕД» для определения значения диапазона чисел, можно задать несколько колонок и столбцов. При выборе диапазона =ПРОИЗВЕД(А1:С10), программа выполнит умножение всех значений ячеек в выбранном прямоугольнике. Обозначение диапазона – (А1-А10, В1-В10, С1-С10).

Функции-процедуры VBA

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

Основное различие между функцией-процедурой и другими процедурами, помимо того, что функции возвращают значение, а процедуры — нет, состоит в том, что в функции-процедуре используются ключевые слова Function и End Function.

Function Name() ‘VBA Statements End Function

Function — ключевое слово, объявляющее начало функции.

Name — имя функции. Имена функций следуют тем же правилам, что и имена других идентификаторов VBA.

Arglist — список аргументов данной функции, необязательный элемент.

Type — любой тип возвращаемого значения функции. Если тип не определен, результат, который возвращает функция-процедура, имеет тип Variant.

Name = expression — присваивание функции, которое указывает VBA, какое значение должна возвращать функция, необязательный элемент. Тем не менее, всегда следует включать оператор присваивания в функции-процедуры.

End Function — ключевые слова, заканчивающие функцию.

Даже если функция не имеет аргументов (например, Now, Date) в объявлении функции необходимо использовать круглые скобки.

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

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

Без использования функции листинг бы выглядел так:

Из этого простого примера, думаю, понятна основная идея использования функций-процедур — улучшение читабельности программного кода и его сокращение (другими словами, функция-процедура пишется когда в программном коде более 2-3 раз встречается один и тот же «кусок» кода). Действительно, если бы наша функция-процедура состояла не из одной строки, а, скажем, из 10 строк; и программный код использовал бы эту функцию-процедуру 5 раз, то общий листинг программы был бы меньше на 38 строк.

Как уже указывалось ранее, VBA передает все аргументы в функцию-процедуру как типы Variant. Можно объявлять определенные типы данных для каждого аргумента в списке аргументов.

Аргументы с определенными типами используются по тем же знакомым причинам, по каким используются типизированные переменные или результаты функции. Определение типов аргументов для функции-процедуры также помогает пользователю при вызове функции вводить аргументы правильного типа в правильном порядке.

В начало страницы

В начало страницы

Как создать таблицу в Word

Прежде чем запускать специально созданный для работы с таблицами редактор Excel с его непростыми, скажем прямо, таблицами, вспомним про то, что и в текстовом редакторе Microsoft Word тоже есть таблицы. Поэтому для начала нужно попробовать в Word.

Для представленного выше списка из 2-х учеников потребуется создать в редакторе MS Word таблицу из 3-х строк (учеников у нас в списке пока двое, а самую первую строку таблицы мы используем для заголовков столбцов), и из 5-и столбцов для ввода в них следующих данных:

  • фамилия ученика
  • имя ученика
  • отчество ученика
  • дата рождения ученика
  • телефон ученика.

Приступаем. Откроем текстовый редактор Ворд. Введем в первой строке заголовок нашей таблицы, например, «Список учащихся 8В класса».

  • Затем поставим курсор на вторую строку,
  • откроем вкладку «Вставка» (1 на рис. 1),
  • кликнем по иконке «Таблица» (2 на рис. 1) и
  • выберем строку меню «Вставить таблицу» (3 на рис. 1).

Рис. 1 (кликните по рисунку для увеличения). Создание новой таблицы в редакторе Word.

В открывшемся служебном окне «Вставка таблицы»

  • указываем «Число столбцов» 5 (1 на рис. 2) и
  • «Число строк» 3 (2 на рис. 2) ,
  • далее жмем на кнопку «ОК» (3 на рис. 2).

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

Таблица успешно вставляется и имеет вид, как показано на рис. 3.

Рис. 3 (кликните по рисунку для увеличения). Вставленная пока еще пустая таблица из 3-х строк и 5-и столбцов в редакторе Microsoft Word.

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

В оставшиеся 2 строки таблицы заносим данные ученика по фамилии Иванов и ученицы по фамилии Петрова (рис. 4).

Рис. 4 (кликните по рисунку для увеличения). Заполненная таблица, сделанная в редакторе Ворд.

Теперь данные размещены в таблице. Это не только красивее, чем просто список, но еще и удобно. В первой колонке таблицы теперь стоят только фамилии учеников, во второй – имена, в третьей – отчества и так далее.

Как выделить и перенести часть таблицы в Ворде

Данные в таблице у нас теперь, как говорят, структурированы. А значит, их легко найти, выделить, куда-то перенести отдельно.

Скажем, нам нужны только фамилии учеников. Выделяем данные из первого столбца таблицы. Для этого помещаем курсор мышки в клетку, которая будет второй по вертикали в первой колонке таблицы – на фамилию «Иванов». Нажимаем на левую кнопку мышки и, не отпуская ее, перемещаем курсор мышки в третью строку таблицы. То есть как бы «проводим» мышкой по клеткам таблицы, где занесены фамилии учеников. Результат такого выделения показан на рис. 5.

Рис. 5 (кликните по рисунку для увеличения). Выделение одной колонки таблицы в редакторе MS Word.

Затем копируем эти данные в буфер обмена (клик мышкой на кнопку «Копировать» — 1 на рис. 6).

Рис. 6 (кликните по рисунку для увеличения). Копирование выделенной части таблицы в буфер обмена в редакторе Microsoft Word.

После копирования части таблицы в буфер обмена давайте установим курсор под таблицей не прямо на следующей строке, а через одну строку (выделено синим цветом – 1 на рис. 7), и кликнем по кнопке «Вставить» (2 на рис. 7).

Рис. 7 (кликните по рисунку для увеличения). Подготовка к вставке части таблицы в другое место текста в редакторе Word.

Часть таблицы, а именно – фамилии учеников – вставится ниже под основной таблицей (рис. 8).

Рис. 8 (кликните по рисунку для увеличения). Часть таблицы (фамилии учеников) воспроизведена в другом месте текста в редакторе Ворд.

Синтаксис функции

И(логическое_значение1; ; . )

логическое_значение — любое значение или выражение, принимающее значения ИСТИНА или ЛОЖЬ.

Например, =И(A1>100;A2>100) Т.е. если в обеих ячейках A1 и A2 содержатся значения больше 100 (т.е. выражение A1>100 — ИСТИНА и выражение A2>100 — ИСТИНА), то формула вернет ИСТИНА, а если хотя бы в одной ячейке значение 100;A2>100);»Бюджет превышен»;»В рамках бюджета»)

Т.е. если в обеих ячейках A1 и A2 содержатся значения больше 100, то выводится Бюджет превышен, если хотя бы в одной ячейке значение 100;A2>100) в виде =(A1>100)*(A2>100) Значение второй формулы будет =1 (ИСТИНА), только если оба аргумента истинны, т.е. равны 1. Только произведение 2-х единиц даст 1 (ИСТИНА), что совпадает с определением функции И() .

Эквивалентность функции И() операции умножения * часто используется в формулах с Условием И, например, для того чтобы сложить только те значения, которые больше 5 И меньше 10: =СУММПРОИЗВ((A1:A10>5)*(A1:A10 100;A7>100;A8>100;A9>100) но существует более компактная формула, правда которую нужно ввести как формулу массива (см. файл примера ): =И(A6:A9>100) (для ввода формулы в ячейку вместо ENTER нужно нажать CTRL+SHIFT+ENTER)

В случае, если границы для каждого проверяемого значения разные, то границы можно ввести в соседний столбец и организовать попарное сравнение списков с помощью формулы массива: =И(A18:A21>B18:B21)

Вместо диапазона с границами можно также использовать константу массива: =И(A18:A21>)

Неточные вычисления

Внутри JavaScript число представлено в виде 64-битного формата IEEE-754. Для хранения числа используется 64 бита: 52 из них используется для хранения цифр, 11 для хранения положения десятичной точки и один бит отведён на хранение знака.

Если число слишком большое, оно переполнит 64-битное хранилище, JavaScript вернёт бесконечность:

Наиболее часто встречающаяся ошибка при работе с числами в JavaScript – это потеря точности.

Посмотрите на это (неверное!) сравнение:

Да-да, сумма и не равна .

Странно! Что тогда, если не ?

Но почему это происходит?

Число хранится в памяти в бинарной форме, как последовательность бит – единиц и нулей. Но дроби, такие как , , которые выглядят довольно просто в десятичной системе счисления, на самом деле являются бесконечной дробью в двоичной форме.

Другими словами, что такое ? Это единица делённая на десять — , одна десятая. В десятичной системе счисления такие числа легко представимы, по сравнению с одной третьей: , которая становится бесконечной дробью .

Деление на гарантированно хорошо работает в десятичной системе, но деление на – нет. По той же причине и в двоичной системе счисления, деление на обязательно сработает, а становится бесконечной дробью.

В JavaScript нет возможности для хранения точных значений 0.1 или 0.2, используя двоичную систему, точно также, как нет возможности хранить одну третью в десятичной системе счисления.

Числовой формат IEEE-754 решает эту проблему путём округления до ближайшего возможного числа. Правила округления обычно не позволяют нам увидеть эту «крошечную потерю точности», но она существует.

Пример:

И когда мы суммируем 2 числа, их «неточности» тоже суммируются.

Вот почему – это не совсем .

Не только в JavaScript

Справедливости ради заметим, что ошибка в точности вычислений для чисел с плавающей точкой сохраняется в любом другом языке, где используется формат IEEE 754, включая PHP, Java, C, Perl, Ruby.

Можно ли обойти проблему? Конечно, наиболее надёжный способ — это округлить результат используя метод toFixed(n):

Также можно временно умножить число на 100 (или на большее), чтобы привести его к целому, выполнить математические действия, а после разделить обратно. Суммируя целые числа, мы уменьшаем погрешность, но она всё равно появляется при финальном делении:

Таким образом, метод умножения/деления уменьшает погрешность, но полностью её не решает.

Забавный пример

Попробуйте выполнить его:

Причина та же – потеря точности. Из 64 бит, отведённых на число, сами цифры числа занимают до 52 бит, остальные 11 бит хранят позицию десятичной точки и один бит – знак. Так что если 52 бит не хватает на цифры, то при записи пропадут младшие разряды.

Интерпретатор не выдаст ошибку, но в результате получится «не совсем то число», что мы и видим в примере выше. Как говорится: «как смог, так записал».

Два нуля

Другим забавным следствием внутреннего представления чисел является наличие двух нулей: и .

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

В большинстве случаев это поведение незаметно, так как операторы в JavaScript воспринимают их одинаковыми.

Формула 6: ЕСЛИОШИБКА

Эта функция возвращает заданное пользователем значение, если в процессе вычисления по формуле обнаруживается ошибка. Если же получившееся значение корректное, она оставляет его.

Синтаксис

У этой функции два аргумента. Синтаксис следующий:

=ЕСЛИОШИБКА(значение;значение_если_ошибка)

Описание аргументов:

  1. Значение – непосредственно формула, проверяемая на предмет багов.
  2. Значение если ошибка – результат, появляющийся после того, как ошибка будет обнаружена.

Если говорить о примерах, то данная формула покажет в случае невозможности осуществления деления текст «Ошибка при вычислении».

Работа с диапазонами ячеек

Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.

Примеры работы с Range

Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

  1. Считали группы из очередной строки.
  2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
    1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
  3. После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.

Для упрощения работы рекомендую определить следующие функции-сокращения:

Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».

Теперь надо перенести всякую информацию в result

Подогнать столбцы по ширине и выбрать лист result для показа результата

Всё. Можно любоваться первой версией.

Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:

Уже лучше:

Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:

Поэтому чуть-чуть меняем код с добавлением стиля границ:

Осталось лишь добится пропусков перед началом новой группы. Это легко:

В цикле расстановки заголовков

В точности то, что и хотели.

Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.

Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.

Спасибо за внимание. UPD: Перезалил пример на Dropbox и min.us

UPD: Перезалил пример на Dropbox и min.us.

UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.

Понравилась статья? Поделиться с друзьями:
Самоучитель Брин Гвелл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: