Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Статьи об Excel

МЕНЮ САЙТА
  • 1
  • 2
  • 3

КАТЕГОРИИ РАЗДЕЛА

ОПРОСЫ
Какой версией Excel Вы пользуетесь?
Всего ответов: 35672
Главная » Статьи » Эффективная работа в Excel » Приёмы работы с формулами

Что такое -- или как превратить ИСТИНА в 1, а ЛОЖЬ в 0?
ПРИМЕР:
Необходимо подсчитать сколько текстовых значений в диапазоне А2:А6.



Функция =ЕТЕКСТ(A2:A6) вернёт массив {ИСТИНА:ЛОЖЬ:ИСТИНА:ИСТИНА:ИСТИНА}. Для того что бы просуммировать кол-во ИСТИНА необходимо применить преобразование ИСТИНА в 1. Сделать это можно несколькими способами:

1. Используя бинарное отрицание (--)



2. Используя умножение на единицу




3. Используя прибавление ноля




4. Используя возведение в первую степень





5. Используя функцию Ч()




В Excel есть так называемое неявное преобразование типов. Например, формула ="2" * 3, перемножающая текстовое значение "2" на числовое, автоматически преобразует текстовое значение "2" в числовое 2. Результат будет равен 6, как будто перемножались два числа.

Такое преобразование происходит при любым математических действиях: сложении, вычитании, умножении, возведении в степень и проч., включая смену знака на противоположный. Так -"2" автоматически преобразуется в отрицательное число -2.
А если еще раз сменить знак --"2", то получим число 2.

Если записать в ячейку формулу: =-(-"2") и с помощью меню Сервис - Зависимости формул - Вычислить формулу - Вычислить(2 раза) посмотреть, что с ней сделает Excel, то эволюция будет такой: -(-"2"), потом -(-2), а затем 2.

Важно отметить, что если записать формулу без скобок =--"2", то --"2" преобразуется в число 2 без промежуточных действий (в одно действие).

Аналогичные преобразования будут и при добавлении к текстовому значению нуля ="911"+0, умножении текста на единицу ="02"*1 и прочих математических действиях, не меняющих результата мат. выражения.

Подобные преобразования Excel выполняет не только с текстовыми значениями, но и с логическими:

=ЛОЖЬ+0 или =ЛОЖЬ*1 или =--ЛОЖЬ дает 0, так как логическое значение ЛОЖЬ автоматически преобразуется в 0 (ноль).

=ИСТИНА+0 или = ИСТИНА*1 или =-- ИСТИНА дает 1, так как логическое значение ИСТИНА автоматически преобразуется в 1.

Любое математическое действие само по себе запускает механизм преобразования в числа текстовых значений математического выражения:
="3"+"5" выдает числовое значение 8

Собственно, поэтому =СУММПРОИЗВ(--(Выражение1=Условие); --(Выражение2)) можно заменить на =СУММПРОИЗВ((Выражение1=Условие)*(Выражение2)), т.к. математическое действие умножения автоматически запускает механизм преобразования типов множителей, и дополнительных преобразователей типа двойного отрицания уже не требуется.

Ну и, наконец, почему всё же часто используют именно двойное отрицание, а не добавление нуля или умножение на единицу?

Ответ прост: двойное отрицание теоретически выполняется быстрее умножения на 1, сложения с нулем и других математических действий. Экономия времени вычисления небольшая, и по некоторым оценкам составляет примерно 15%
Категория: Приёмы работы с формулами | Добавил: Serge_007 (23.02.2011) | Автор: Serge_007 & ZVI
Просмотров: 26943 | Комментарии: 6 | Рейтинг: 5.0/7


Всего комментариев: 6
+1   Спам
1    Useful   (09.03.2011 09:21)
   Здраствуюте!

Quote (Serge_007 & ZVI)
Ответ прост: двойное отрицание теоретически выполняется быстрее умножения на 1, сложения с нулем и других математических действий. Экономия времени вычисления небольшая, и по некоторым оценкам составляет примерно 15%

При этом случае функция {=SUM(N(ISTEXT(A2:A6)))} считаеться медленным чем бинарное?
Thanks in advance


Спам-сообщение скрыто. Показать
+1   Спам
2    Serge_007   (13.03.2011 18:56)
   Да

+3   Спам
3    Alex_ST   (14.03.2011 16:21)
   Главную путаницу во всём этом создаёт то, что программирующие в VBA знают, что True=-1, False=0, а в формулах листа почему-то считается ИСТИНА=1, ЛОЖЬ=0
И поэтому предсказать, какой цифорвой вариант даст перемножение в VBA трёх логических значений ИСТИНА, полученных через Application.Worksheetfunction для меня по крайней мере затруднительно...
То ли +1, то ли -1 ???

0   Спам
4    Пытливый   (21.04.2012 13:30)
   встречал раньше -- в формулах, теперь понятно зачем они нужны

Спам-сообщение скрыто. Показать
-2   Спам
5    Фомулист   (16.08.2016 18:47)
   
Цитата Alex_St, 14.03.2011 16:21
программирующие в VBA знают, что True=-1

Потому что VBA создавали дебилы. Ведь если посмотреть на принцып работы Компьютера вообще, то у него True=1, а False=0

0   Спам
6    Фомулист   (16.08.2016 18:47)
   Принцип, т.е.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!