Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.04.2008, 21:48   #1
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию Задачка для ума 2

Задачу нужно решить как всегда без VBA:
Вложения
Тип файла: rar вопрос.rar (3.1 Кб, 48 просмотров)
ZORRO2005 вне форума
Старый 18.04.2008, 23:54   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вот это пишем в ячейку F2 (формула массива), затем размножаем вниз по таблице.
Код:
=ЕСЛИ(E2="";;СМЕЩ(B$1;МАКС(СТРОКА(B$2:B2)*(B$2:B2<>""))-1;))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 19.04.2008, 00:19   #3
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Спасибо король смещенных массивов!
ZORRO2005 вне форума
Старый 19.04.2008, 00:48   #4
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Хорошо Блеск!

Один вопрос: использование *(R2C2:RC2<>"") вместо *ЕСЛИ(ЕПУСТО(R2C2:RC2);0;1) корректно?
Или это недокументированная возможность из разряда трюков?

Если слегка подрихтовать, то можно будет записывать в любую колонку, кроме, конечно, A и E:
Код:
=ЕСЛИ($E2="";"";СМЕЩ($B$1;МАКС(СТРОКА($B$2:$B2)*($B$2:$B2<>""))-1;))
или, в стиле r1c1,
=ЕСЛИ(RC5="";"";СМЕЩ(R1C2;МАКС(СТРОКА(R2C2:RC2)*(R2C2:RC2<>""))-1;))

Последний раз редактировалось дмидми; 19.04.2008 в 07:44.
дмидми вне форума
Старый 19.04.2008, 01:12   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

спасибо за оценку, господа.

дмидми
Это не трюк. Такие приемы встречаются в хелпах, где в качестве множителя выступает результат проверки условия. При выполнении условия получаем ИСТИНА (или 1), при не выполнении - ЛОЖЬ (0). Сооответственно на что бы не умножался результат этой проверки, получим или значение другого множителя или все произведение обращается в ноль.
это как в программировании запись типа:
а = в = с
с точки зрения математики выглядит довольно странно, но многие компиляторы прекрасно ее понимают, проверяют равны ли в и с, и в зависимости от ответа присваивает переменной а значение ИСТИНА или ЛОЖЬ.

ZORRO2005
у меня сложилось впечатление, что вторая "задача для ума" взята не из задачника, а из реальной жизни. а ты постеснялся задать вопрос на форуме и обставил все красиво, как будто задачу))) признайся честному народу...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 19.04.2008, 08:41   #6
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Восклицание Не советую, гражданин... Мнэ-э... Не советую. (с)

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Такие приемы встречаются в хелпах
В каком именно есть этот конкретный приём?
Цитата:
получаем ИСТИНА (или 1)
...что совершенно непривычно - в большинстве реализаций True соответствует -1. Частенько и 255 встречается.
Непривычно - и как-то нелогично: зачем тогда под хранение Boolean выделять 2 байта? Для единички и одного за глаза хватило бы
Непривычно, нелогично и противоречит встроенному в ёксель хелпу: поставивши в VBA курсор на Boolean и нажав F1, попадаем на страничку Boolean Data Type, а там в самом конце написано:

When Boolean values are converted to other data types, False becomes 0 and True becomes -1.

Но мы любим БГ не только за это!
(Почти цитата.)

Цитата:
Это как в программировании запись типа а = в = с
Ну, это как раз совсем отдельная песня - синтаксис языка программирования. Кстати, всегда избегал такого рода записи - самому потом читать трудно. Предпочитаю а=(в=с), чего и всем желаю

Последний раз редактировалось дмидми; 19.04.2008 в 08:49.
дмидми вне форума
Старый 19.04.2008, 10:45   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

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

В любую ячейку пишем
=ИСТИНА*5 получаем 5
=ЛОЖЬ*5 получаем 0
если решим два уравнения
Х*5=5, отсюда Х = 1
Х*5=0, отсюда Х= 0
и сравним их с двумя записями выше - получаем ИСТИНА=1, ЛОЖЬ=0
не надо здесь искать логику - это особенности реализации. а VBA тут не авторитет...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вот это задачка!!! Лёха Паскаль, Turbo Pascal, PascalABC.NET 2 29.04.2008 10:54
Задачка для ума 3 ZORRO2005 Microsoft Office Excel 14 23.04.2008 12:35
Задачка для ума ZORRO2005 Microsoft Office Excel 7 17.04.2008 14:42