Имя листа Dynami c в формуле индекса / соответствия - PullRequest
1 голос
/ 01 мая 2020

Справочная информация

Правительство США публикует ежедневный отчет, который я использую для работы. Недавно правительство изменило способ публикации своего отчета. Вместо того, чтобы публиковать отчет в виде текстового файла, теперь они выпускают его в формате PDF. К сожалению, это повлияло на то, как я извлекаю информацию из отчета. Ранее я вытащил информацию с сайта, так как она была сохранена в виде текстового файла. Теперь я загружаю PDF и конвертирую его в файл Excel.

У меня есть 1 рабочая книга, которая содержит сохраненные копии отчета на отдельных листах, например, 30 апреля, 29 апреля, 28 апреля и т. Д. c. К сожалению, из-за преобразования информация на каждой странице может варьироваться на одну или две строки, например, лист Information_A на 30 апреля может быть на строке 30, а 29 апреля - на строке 33.

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

Проблема

Проблема теперь заключается в том, как я извлекаю информацию из файла Excel. Поскольку информация не находится в одной строке, я подумал, что лучше всего будет использовать метод Index / Match . Формула, которую я сделал, ниже. Ссылочное имя Information_A находится в столбце A, а нужное мне значение из Information_A - в столбце P.

=(INDEX('April 30'!P:P,MATCH("Information_A",'April 30'!A:A,0)))

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

=(INDEX('[previous_sheet]'P:P,MATCH("Information_A",'[previous_sheet]'!A:A,0)))

Итак, я попытался выяснить, как получить имя предыдущего листа. Я попробовал несколько разных способов и в итоге использовал решение ChrisB здесь .

Я сохранил формулу, которую он предоставил (ниже), как PrevSheet_2

=IF( MATCH(wsName,wsNamesArray,0)-1 =0, ERROR.TYPE(7), INDEX(wsNamesArray,MATCH(wsName,wsNamesArray,0)+1))

Где, wsNamesArray и wsNameare следующим образом:

wsNamesArray: =RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1))) & T(NOW())

wsName: =MID(CELL("filename", INDIRECT("A1")),FIND("]",CELL("filename",INDIRECT("A1")))+1,255) & T(NOW())

Что привело к 'окончательной' формуле:

=(INDEX("'"&PrevSheet_2&"'!P:P",MATCH(Information_A","'"&PrevSheet_2&"'!A:A",0)))

, который не работает. Эта формула дает мне # ЗНАЧЕНИЕ! ошибка.

Я протестировал формулу без использования PrevSheet_2 и набрал имя рабочего листа, например, 30 апреля, и получил правильное значение, поэтому я знаю, что часть работает. Я также тестирую PrevSheet_2 в ячейке и получаю правильный предыдущий лист, поэтому я знаю, что проблема заключается в комбинации 2.

Мой вопрос, как сделать это

* 1054? *=(INDEX("'"&PrevSheet_2&"'!P:P",MATCH(Information_A","'"&PrevSheet_2&"'!A:A",0)))

формула работы.

У меня такое ощущение, что PrevSheet_2 имеет неверный тип данных, однако я не знаю, как это исправить.

РЕДАКТИРОВАТЬ:

Я также попытался использовать опосредованное (ниже) и получил #REF! ошибка.

=INDEX(INDIRECT("''"&PrevSheet_2 &"'!P:P"),MATCH("Information_A",INDIRECT("'"&PrevSheet_2&"'!A:A"),0))

1 Ответ

2 голосов
/ 01 мая 2020

Ссылка эта ссылка .. Определить массив SheetNames (в формулах> Определить имя) как SheetNames = MID(GET.WORKBOOK(1),FIND("]",GET.WORKBOOK(1),1)+1,LEN(GET.WORKBOOK(1))) .. Затем в формуле Excel вы можете перейти к предыдущему имени листа как INDEX(SheetNames,SHEET()-1)

Вы также можете определить PreviousSheetName = INDEX(MID(GET.WORKBOOK(1),FIND("]",GET.WORKBOOK(1),1)+1,LEN(GET.WORKBOOK(1))),SHEET()-1)

Вы можете поместить это в функцию INDIRECT, как предложено @ BigBen

Таким образом, формула будет =INDEX(INDIRECT("'"&PreviousSheetName &"'!P:P"),MATCH("Information_A",INDIRECT("'"&PreviousSheetName&"'!A:A"),0))

См. Sheet Функция дает нам индекс текущего листа. Итак, Sheet()-1 дает нам индекс предыдущего листа

. После моего ответа я отметил, что вы дважды поместили одинарные кавычки в свою косвенную формулу. Следовательно, ошибка #REF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...