функция OFFSET()

Программирование на Visual Basic for Applications
KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

функция OFFSET()

Сообщение KL » 25.12.2007 (Вт) 23:21

Здравствуйте!

Нигде не нашел ответа, может или нет OFFSET() ссылался на другой лист,
т. е. относительно текущей ячейки ссылался на ячейку на другом листе?

Спасибо!


Пока я писал ответ, тема предложенная Avtopic была уничтожена (вероятно им самим). Поскольку вопрос мне не показался праздным, да и работа над ответом уже проделана, беру на себя наглость опубликовать ответ на почти не заданный вопрос :-)

Если я правильно понял, о чем речь, то ответ - "твердое нет". Функция OFFSET() не входит в число (весьма ограниченное) функций работающих с трехмерными ссылками (столбец:строка:лист). Однако подобная задача вполне выполнима с пом. др. функций, например:

Y - сдвиг по вертикали
X - сдвиг по горизонтали
A1 - ячейка, в которую занесена формула

=ДВССЫЛ("'Лист2'!"&"R["&Y&"]C["&X&"]";0)
=INDIRECT("'Sheet2'!"&"R["&Y&"]C["&X&"]",0)

=ДВССЫЛ(АДРЕС(СТРОКА()+Y;СТОЛБЕЦ()+X;;;"Лист2"))
=INDIRECT(ADDRESS(ROW()+Y,COLUMN()+X,,,"Sheet2"))

=ДВССЫЛ("'Лист2'!"&ЯЧЕЙКА("address";СМЕЩ(A1;Y;X)))
=INDIRECT("'Sheet2'!"&CELL("address",OFFSET(A1,Y,X)))

и даже такая вот нелетучая:

=ИНДЕКС(Sheet2!1:1048576;СТРОКА()+Y;СТОЛБЕЦ()+X)
=INDEX(Sheet2!1:1048576,ROW()+Y,COLUMN()+X)
Привет,
KL

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 26.12.2007 (Ср) 21:26

KL! Если от кого то ждал ответа, это в первую очеред KL!

Этот ответ нашел, и потому стер вопрос.
Еще оказалось, что для подобного случая используют собственную функцию, простую, но все ровно медленную, и потому все ровно, указанный вами вариант всегда лучше.

За ответ спасибо!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 107

    TopList