Существует ли формула Excel, которая с учетом конечной ячейки возвращает начальную ячейку блока данных? - PullRequest
1 голос
/ 23 марта 2012

Данные в столбце A выглядят следующим образом.

RowHeaderThatIsText
RowHeaderThatIsNumber
пусто
пусто
пусто
пусто
пусто
14,00
-3,00
-4,00

Цель проекта - рассчитать сводную статистику для серии чисел и обновлять сводку каждый месяц.
Моя цель - разрешить добавление нового номера в серию и автоматическое обновление сводки.

Вот что я уже сделал.

  1. Определить диапазон с именем LastCell с формулой
    =INDEX($A:$A, MAX(($A:$A <> "") * (ROW($A:$A))))
    Возвращает последнюю непустую ячейку в столбце. Данные для суммирования всегда являются последним блоком чисел.

  2. Определить именованный диапазон с именем HeaderOffset с формулой
    =3
    Используется на шаге 3.

  3. Определите диапазон с именем FirstCell с формулой
    =OFFSET(LastCell, HeaderOffset - COUNTA($A:$A), 0)
    Возвращает первую ячейку последнего блока чисел, если, как и в случае с данными, которые я буду обобщать, ячейки между первым и последним блоками пусты.

  4. Определить диапазон с именем Блок данных с формулой
    =FirstCell:LastCell

Пока все хорошо. Это позволяет ввести = SUM (DataBlock) в любую ячейку и получить ожидаемый результат 7,00. И, если я добавлю другое значение, скажем, 3.00, в список результат SUM будет обновлен до 10.

Часть, которая мне не нравится, это HeaderOffset. Если в заголовок добавлена ​​еще одна строка, HeaderOffset необходимо обновить с = 3 до = 4. Что если я забуду обновить HeaderOffset? Это привело меня к проблеме, которую я сейчас не могу решить ...

Существует ли формула Excel, которая с учетом конечной ячейки возвращает начальную ячейку блока данных? В основном я ищу формулу FirstCell , которая устраняет необходимость в HeaderOffset.

В качестве бонуса я пытался сделать все это без использования изменчивых функций Excel . Я потерпел неудачу при использовании OFFSET. Решить это замечательно. Решение без энергозависимых функций идеально.

1 Ответ

2 голосов
/ 23 марта 2012

FirstCell всегда первый номер? Если это так, попробуйте это определить FirstCell

=INDEX($A:$A,MATCH(TRUE,ISNUMBER($A:$A),0))

Это «формула массива», если она введена на листе, но не требует какой-либо специальной обработки, если используется в поле «относится к:» для определения именованного диапазона.

Примечание: если ваша конечная цель - сумма чисел, то вы могли бы просто использовать =SUM(A:A) [Полагаю, это упрощает проблему?]

Пересмотрено с учетом комментариев ниже:

Попробуйте это для LastCell

=INDEX($A:$A,MATCH(9.99E+307,$A:$A))

и этот для FirstCell

=INDEX($A:$A,MATCH(2,1/($A$1:LastCell=""))+1)

предполагает, что LastCell является числовым (хотя это можно изменить при необходимости)

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