Укажите относительный другой лист в Excel - PullRequest
4 голосов
/ 29 октября 2010

Я пытаюсь найти способ из ячейки получить данные из ячейки на листе, которая находится слева (внизу в лотке) текущего листа.

Я знаю, какзвонить на другие листы через

=Sheet1!A1

Но теперь мне нужно кое-что лучше объяснить с

=Sheet[-1]!A1

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 30 октября 2010

Использование порядка табуляции как фундаментальной части ваших расчетов - сложный и рискованный подход к вычислениям в Excel.Excel предлагает много альтернатив, которые вам лучше использовать:

  1. Упрощенная версия предложения Велисария: =INDIRECT(A1 & "!A2"), где ячейка A1 содержит имя вашего источника данных, а A2 имеетимя вашей целевой ячейки в вашем листе источника данных.Если вы знаете название вашего листа интересов (или можете каким-то образом его найти), используйте этот метод.

  2. Если вам нужно делать это часто, возможно, вы захотите экспортироватьданные в фактическую базу данных (например, MS Access).Затем вы можете выполнять стандартные запросы SQL и импортировать результаты в файл Excel.

  3. Если вы абсолютно хотите пойти по пути VBA, вам придется написать некоторый код, который:
    3а.Захватывает все имена активной рабочей книги и сохраняет их в массиве.
    3b.Определяет порядковый номер текущей активной книги в этом массиве.Вычтите 1 из этого индекса, чтобы получить лист слева.
    3c.Получает значение ячейки из этого листа.

  4. Вы также можете стать причудливыми с именованными диапазонами.В Excel 2003 перейдите к Вставка-> Имя-> Определить , добавьте новый Именованный диапазон, и вы можете использовать это имя в своих вычислениях вместо ссылки на ячейку по строке и столбцу.

Редактировать

Вся идея этого заключается в том, что вы расположили листы и можете перемещать их, и это изменит расчеты.- Гнатт 1 час назад

Пожалуйста, пожалуйста, не делайте этого.Для начала, это не стандартный метод взаимодействия с электронной таблицей.Ваши конечные пользователи, скорее всего, будут сбиты с толку и могут даже не попросить разъяснений.

Вы захотите изучить идею проверки данных :

  1. Используя Data-> Validation , сделайте раскрывающийся списокменю со списком всех листов в книге (если имена всех листов статичны, вы можете просто жестко их кодировать, в противном случае вам понадобится VBA для их извлечения).
  2. Затем пользователь просто выбираетлист по своему выбору и косвенный () будет автоматически обновлять все.

Кроме того, вы также можете проверить Инструменты-> Сценарии .Я не знаю никого, кто использовал бы эту функцию, но вы могли бы быть хорошим кандидатом на нее.По сути, он позволяет просматривать результаты вычислений с использованием разных наборов данных (т. Е. «Сценариев»), чтобы пользователь мог переключаться между ними.

Используя любой из двух вышеуказанных методов, есть большой шанс, что вы сможетеполностью избегайте VBA, тем самым сохраняя пользователям это надоедливое предупреждающее сообщение при открытии файла.

1 голос
/ 08 февраля 2011

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

Причина, по которой я хочу это сделать, заключается в том, чтобысоздайте сводную таблицу, которая ссылается на все рабочие листы в рабочей книге и автоматически расширяется, если вы вставляете новый рабочий лист.Это делается для управления большой электронной таблицей продаж / отчетности с большим количеством различных бизнес-единиц, которые имеют одинаковую структуру (т. Е. Используют один и тот же формат рабочего листа, чтобы сообщать об одинаковых результатах для разных людей. Высокий оборот. Я хочу иметь несколько сводоклисты, сообщающие о различных аспектах исходных листов. Это занимает очень много времени, если каждый раз воссоздавать все таблицы.

Вы должны иметь возможность использовать row () в качестве индексамаркер, чтобы определить информацию, которую вы хотите, используя что-то вроде REPLACE, OFFSET или INDEX, но вы не можете, поскольку они относятся только к двумерным массивам.

Принимая во внимание, что Excel обрабатывает трехмерные ссылки как массивы для статистических функций, которые он не делаетпохоже, делают то же самое для справочных функций. Возможно, у вас есть SUM (sheetX: sheetY! A1) и вы можете добавить лист между ними, нет (например) функции INDEX (sheetX: sheetY! A1, n). Iмы попытались поэкспериментировать с использованием этих двухмерных функций как части формул массива и определить трехмерную ссылкуs массив или именованный диапазон ... ну, это стоило того:).

Так что я считаю, что это допустимое действие.Я также считаю, что должен быть способ сделать это, но сейчас я прибегаю к UDF, в которой есть риск ошибок, вызванных проблемами вычислений, или манипулированием функцией Workbook_SheetChange или подобной.Или создание одного основного листа для управления всеми остальными, которые заполняются с помощью подпрограммы на основе массива всех рабочих книг.

1 голос
/ 29 октября 2010
=INDIRECT("Sheet"&TEXT(VALUE(MID(CELL("filename",A8),FIND("]",CELL("filename",A8))+1,256))-1,"#")&"!A1")  

Предостережения:

  1. Ваша рабочая книга должна быть сохранена ранее
  2. A8 может быть заменен ссылкой на ЛЮБУЮ ячейку без ошибок
...