|
|
|
Evaluate и INDIRECT/ДВССЫЛ
|
|||
|---|---|---|---|
|
#18+
Проблема в следующем. Если в упрощенном виде то так: в событиях модуля листа Лист1 этот код: Код: plaintext в событиях модуля листа Лист2 этот же код: Код: plaintext Как это можно победить? Для чего мне все это понадобилось?! У меня есть именованный динамический диапазон. Для того чтобы узнать границы этого имен. диапазона приходится применять функцию Evaluate, чтобы вычислить этот динамический дипазон. Указанныя выше строка с INDIRECT этот всего лишь кусок общей формулы динамич. диапазона. Отказаться полностью от INDIRECT невозможно, хотя бы потому что лев. верх. ячейка на самом деле вычисляется, примерно вот так... =INDIRECT(Лист1!$A" & ПОИСКПОЗ(.....) & ":A1000") и итоговый адрес диапазона формируется из текстовой строки. Проблема с INDIRECT в том, что несмотря на полный путь к дипазону с указанием названия листа, она все равно видимо пытается вернуть ссылку на текущий лист и тут у нее наступает облом, если текущий и переданный ей в аргументе листы разные. На всяки случай, полная формула имен. динамического диапазона: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2010, 11:17 |
|
||
|
Evaluate и INDIRECT/ДВССЫЛ
|
|||
|---|---|---|---|
|
#18+
СМЕЩ и ДВССЫЛ летучие функции, можно заменить на: ИНДЕКС(Цитатник!$A$1:$A$10000;ПОИСКПОЗ(1;Цитатник!$A$1:$A$10000;0)+1):ИНДЕКС(Цитатник!$A$1:$A$10000;ПОИСКПОЗ(1;Цитатник!$A$1:$A$10000;0)+СЧЕТЗ(...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2010, 12:05 |
|
||
|
Evaluate и INDIRECT/ДВССЫЛ
|
|||
|---|---|---|---|
|
#18+
Ага, спасибо ИНДЕКС работает. =ИНДЕКС(Цитатник!$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. Т.о. при любом изменении шапки (добавление строк, появление текста в столбце А) приводит к искажению формулы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2010, 14:29 |
|
||
|
Evaluate и INDIRECT/ДВССЫЛ
|
|||
|---|---|---|---|
|
#18+
СТРОКА(3:3)+СЧЁТЗ(Цитатник!$A$1:$A$10000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2010, 14:44 |
|
||
|
Evaluate и INDIRECT/ДВССЫЛ
|
|||
|---|---|---|---|
|
#18+
Нее, Вы не поняли. Я как раз хотел уйти от явного указания номера строки начала таблицы. Но до меня наконец доперло как использовать Ваш первый совет. Вот так надо переделать функцию СЧЕТЗ: =СЧЁТЗ( ИНДЕКС(Цитатник!$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)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2010, 15:11 |
|
||
|
Evaluate и INDIRECT/ДВССЫЛ
|
|||
|---|---|---|---|
|
#18+
SergeySV, при добавлении строки вверху СТРОКА(3:3) превратится в СТРОКА(4:4) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2010, 15:17 |
|
||
|
Evaluate и INDIRECT/ДВССЫЛ
|
|||
|---|---|---|---|
|
#18+
Согласен. Но возможно еще другая нехорошая ситуация. Например в ячейку A1 написали/вставили текст, которого раньше не было, т.о. СЧЕТЗ начинает возвращать на одну ячейку больше чем раньше, хотя никто, никаких строк добавлял/удалял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2010, 15:47 |
|
||
|
|

start [/forum/topic.php?fid=61&fpage=167&tid=2178356]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 366ms |

| 0 / 0 |
