Справочная информация
Правительство США публикует ежедневный отчет, который я использую для работы. Недавно правительство изменило способ публикации своего отчета. Вместо того, чтобы публиковать отчет в виде текстового файла, теперь они выпускают его в формате 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))