Функции ДВССЫЛ и INDIRECT

Автор DS, 13 апреля 2011, 23:32

0 Пользователи и 1 гость просматривают эту тему.

DS

Здравствуйте! Пробую перейти на OpenOffice. Столкнулся с проблемой соответствия функций ДВССЫЛ и INDIRECT. ДВССЫЛ позволяет склеивать адрес ячейки. Выглядит это примерно так: ДВССЫЛ("2стр!B"&G11&":"&"B"&H11)
INDIRECT пишет, что это недопустимый аргумент. Подскажите, пожалуйста, есть ли в Calc способ также просто склеивать адрес ячейки?

[вложение удалено Администратором]

JohnSUN

#1
Глянул на книгу и первый вопрос: а почему не через Offset (Смещ)? Утром посмотрю внимательнее

PS. Там, кстати, глючит не INDIRECT, а MATCH... Последний, третий параметр в MATCH - ожидаемый (или гарантированный?) порядок сортировки. А в '2стр'!A1:A2 у нас сидят слово "Дата" и сумма по второй строке... Ексель такие данные проглатывает, а LO - ругается. А с этого места уже и остальные ошибки лезут.
Кстати, насчет суммы в A2. А почему здесь не просто =SUM(F2:AL2)?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

VlhOwn

Там глючит организация данных на листе "2стр":
- в параметрах MATCH указаны диапазон A1:A2721 и третий параметр = 1, т.е. данные строго упорядочены по возрастанию
- на листе упорядоченные данные начинаются с 6-й, а не с 1-й строки, да и внутри диапазона есть пустые строки.

Совет:
- либо поменяйте параметр MATCH на 0 - неупорядоченные данные, но строгое соответствие,
- либо приведите данные листа "2стр" в порядок.

JohnSUN

Я бы, наверное, вообще отказался от MATCH в этой книге. Ну, например, у оператора рука дрогнула и стоя посреди таблицы он нажал, например, кнопку сортировки: данные отсортировались по возрастанию сумм, а даты, соответственно, выстроились в беспорядке. И тут же все MATCH'и выдадут неправильные номера строк или #Н/Д и все итоговые суммы превратятся в кашу.

Поскольку здесь требуется суммирование по условию, то само напрашивается SUMIF. Правда, условие сложное, не на точное совпадение с датой, а на попадание в диапазон "первый день месяца - последний день месяца". Поэтому, ИМХО, здесь нужен SUMPRODUCT и EOMONTH
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

VlhOwn

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

JohnSUN

Дык, это же Mike Harding Roberts: There's never enough time to do it right first time but there's always enough time to go back and do it again. - невозможно найти минутку, чтобы сесть и написать статью :(

В общем, у меня для LO получилось нечто монстрообразное: {=IF($A11="";"";SUM(((EOMONTH($Сводная.$A11;0)=EOMONTH($2стр.$A$4:$A$10000;0))*($2стр.$B$4:$B$10000+$2стр.$H$4:$H$10000+$2стр.$N$4:$N$10000))))}
Выглядит, конечно, ужасно. Но это из-за того, что я не использовал именованные диапазоны для столбцов в 2стр. Если дать им человеческие имена, должно стать нагляднее.

Тем, кто захочет воспользоваться этой конструкцией, напоминаю: эту формулу нужно вставить в ячейку Сводная.B11, завершить ввод Ctrl+Shift+Enter чтобы получилась формула массива, растягивать вниз по столбцу B с зажатой клавишей Ctrl! В результате должны получить не один большой массив с ошибками #ИМЯ?, а суммы напротив каждой из дат.
При этом можно "наплевать и забыть" (с) В.И.Чапаев) про функции из сабжа - формулы в Сводная.D:J уже не нужны.

Но напоминаю! Это решение для LO или ООо! Хоть в XL и включена функция EOMONTH(), она входит в пакет Analysis ToolPak и реализована весьма похабно таким образом, что не понимает диапазон ячеек в качестве первого параметра. Поэтому в МСО формула работать не будет.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

DS

Благодарю за все ответы по моему вопросу. И, как всегда, при общении с компьютером главное - внимание! Указал корректный диапазон и всё заработало!
ДВССЫЛ использовал потому, что на planetexel.ru её описание попалось первым. Прочитал бы сначала про СМЕЩ - была бы она.
Ещё раз всех благодарю!