2015-03-09 2 views
0

Я столкнулся с несколькими дискуссиями по использованию INDIRECT и 3D-ссылок, однако ни один из них не рассматривает (или не исправляет) эту проблему.EXCEL: подсчет рабочих листов динамически с помощью INDIRECT

Я пытаюсь подсчитать положение листа без использования VBA. Каждый лист представляет месяц и имеет стандартизованное имя (например, JAN-15, FEB-15, MAR-15 и т. Д.). Моя идея - найти позицию, посчитав количество листов между JAN-15 и текущим листом. A1 каждого листа = 1, который суммируется через листы, используя трехмерную ссылку.

Использование февраля в качестве примера, я могу жесткий код это не проблема:

= SUM ('JAN-15: февраль-15' A1!)

Когда я делаю это, я получаю ожидаемый результат 2. Однако я хочу, чтобы лист каждого месяца динамически генерировал свою позицию без необходимости менять формулу каждый раз. Так что я попытался это:

Cell назван FIRSTMONTH = 'JAN-15
Cell имени CURRMONTH = RIGHT (CELL ("FILENAME", A1), 6)
N1 = CONCATENATE ("'", FIRSTMONTH ": "CURRMONTH," '! A1")
(N1 оценивает правильно, как 'JAN-15: Февраль-15' A1)

Когда я пытаюсь эту формулу для создания позиции:

= SUM (НЕПРЯМЫЕ (N1))

Я получаю #REF! ошибка. Я также попытался это изменение:

= SUM (INDIRECT ("N1"))

который возвращает 0.

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

-Давид

+0

Я должен также упомянуть, что я использую Excel 2011 для Mac. Я заметил, что Excel 2013 имеет удобную функцию SHEET(), которая в основном делает именно то, что я хочу ... – dherman

+0

Вы не можете использовать INDIRECT для «построения» формулы 3d - я предполагаю, что у вас есть листы в течение нескольких лет (или месяц начала может не быть Ян), в противном случае было бы достаточно использовать номер месяца, чтобы получить позицию –

+0

Каждый год получает свою собственную книгу, и каждый начинается с JAN, поэтому ваше решение DATEDIF отлично работает. Спасибо за вашу помощь! – dherman

ответ

0

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

=DATEDIF(FIRSTMONTH,CURRMONTH,"m")+1