powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Evaluate и INDIRECT/ДВССЫЛ
7 сообщений из 7, страница 1 из 1
Evaluate и INDIRECT/ДВССЫЛ
    #36522678
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в следующем. Если в упрощенном виде то так:

в событиях модуля листа Лист1 этот код:
Код: plaintext
Set rng = Evaluate("=INDIRECT(" & Chr( 34 ) & "Лист1!$A3:A1000" & Chr( 34 ) & ")")
выполняется без проблем и возвращает range

в событиях модуля листа Лист2 этот же код:
Код: plaintext
Set rng = Evaluate("=INDIRECT(" & Chr( 34 ) & "Лист1!$A3:A1000" & Chr( 34 ) & ")")
НЕ выполняется

Как это можно победить?

Для чего мне все это понадобилось?! У меня есть именованный динамический диапазон. Для того чтобы узнать границы этого имен. диапазона приходится применять функцию Evaluate, чтобы вычислить этот динамический дипазон. Указанныя выше строка с INDIRECT этот всего лишь кусок общей формулы динамич. диапазона. Отказаться полностью от INDIRECT невозможно, хотя бы потому что лев. верх. ячейка на самом деле вычисляется, примерно вот так...
=INDIRECT(Лист1!$A" & ПОИСКПОЗ(.....) & ":A1000") и итоговый адрес диапазона формируется из текстовой строки.

Проблема с INDIRECT в том, что несмотря на полный путь к дипазону с указанием названия листа, она все равно видимо пытается вернуть ссылку на текущий лист и тут у нее наступает облом, если текущий и переданный ей в аргументе листы разные.

На всяки случай, полная формула имен. динамического диапазона:
Код: plaintext
1.
=СМЕЩ(ДВССЫЛ("Цитатник!$A" & ПОИСКПОЗ("1";Цитатник!$A$ 1 :$A$ 10000 ; 0 )+ 1 ); 0 ; 0 ;СЧЁТЗ(ДВССЫЛ("Цитатник!$A" & ПОИСКПОЗ("1";Цитатник!$A$ 1 :$A$ 10000 ; 0 )+ 1  & ":$A$10000")); 6 )
...
Рейтинг: 0 / 0
Evaluate и INDIRECT/ДВССЫЛ
    #36522888
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СМЕЩ и ДВССЫЛ летучие функции, можно заменить на:
ИНДЕКС(Цитатник!$A$1:$A$10000;ПОИСКПОЗ(1;Цитатник!$A$1:$A$10000;0)+1):ИНДЕКС(Цитатник!$A$1:$A$10000;ПОИСКПОЗ(1;Цитатник!$A$1:$A$10000;0)+СЧЕТЗ(...))
...
Рейтинг: 0 / 0
Evaluate и INDIRECT/ДВССЫЛ
    #36523505
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, спасибо ИНДЕКС работает.

=ИНДЕКС(Цитатник!$A$1:$A$10000;ПОИСКПОЗ("1";Цитатник!$A$1:$A$10000;0)):ИНДЕКС(Цитатник!$A$1:$A$1000; 3 +СЧЁТЗ(Цитатник!$A$1:$A$10000))

СЧЕТЗ только не смог победить. Необходимо было, чтобы он посчитал кол-во заполненных ячеек начиная с такой-то строки (которая вычисляется ПОИСКПОЗ("1";Цитатник!$A$1:$A$10000;0)).
Иначе СЧЕТЗ начинает считать все непустые ячейки в столбце, в том числе и в шапке. Приходится закладываться на это и учитывать размер шапки в явном виде. В примере выше - это цифра 3. Т.о. при любом изменении шапки (добавление строк, появление текста в столбце А) приводит к искажению формулы.
...
Рейтинг: 0 / 0
Evaluate и INDIRECT/ДВССЫЛ
    #36523559
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СТРОКА(3:3)+СЧЁТЗ(Цитатник!$A$1:$A$10000)
...
Рейтинг: 0 / 0
Evaluate и INDIRECT/ДВССЫЛ
    #36523669
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нее, Вы не поняли. Я как раз хотел уйти от явного указания номера строки начала таблицы.

Но до меня наконец доперло как использовать Ваш первый совет.
Вот так надо переделать функцию СЧЕТЗ:
=СЧЁТЗ( ИНДЕКС(Цитатник!$A$1:$A$10000;ПОИСКПОЗ("1";Цитатник!$A$1:$A$10000;0)+1) : Цитатник!$A$10000)

В итоге, общая формула получается такая:
=ИНДЕКС(Цитатник!$A$1:$A$10000;ПОИСКПОЗ("1";Цитатник!$A$1:$A$10000;0)):ИНДЕКС(Цитатник!$G$1:$G$1000;ПОИСКПОЗ("1";Цитатник!$A$1:$A$10000;0)+СЧЁТЗ(ИНДЕКС(Цитатник!$A$1:$A$10000;ПОИСКПОЗ("1";Цитатник!$A$1:$A$10000;0)+1):Цитатник!$A$10000))
...
Рейтинг: 0 / 0
Evaluate и INDIRECT/ДВССЫЛ
    #36523700
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeySV, при добавлении строки вверху СТРОКА(3:3) превратится в СТРОКА(4:4) :)
...
Рейтинг: 0 / 0
Evaluate и INDIRECT/ДВССЫЛ
    #36523866
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен.

Но возможно еще другая нехорошая ситуация. Например в ячейку A1 написали/вставили текст, которого раньше не было, т.о. СЧЕТЗ начинает возвращать на одну ячейку больше чем раньше, хотя никто, никаких строк добавлял/удалял
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Evaluate и INDIRECT/ДВССЫЛ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]