2015-08-11 2 views
1

Я хочу иметь ячейку в верхней части столбца данных, которая использует функцию рабочего листа для записи общего количества ячеек под ней, которые содержат данные. В столбце нет пробелов, поэтому я считаю, что мне не нужно использовать COUNTA, было бы более эффективно найти первую пустую ячейку. Для этого у меня есть следующие функции в ячейке R12:Использование ROW() или COLUMN() в OFFSET (...) генерации # N/A! error

=MATCH(TRUE,INDEX(ISBLANK(OFFSET($R$12,1,0,1000,1)),0),0)-1 

Это работало отлично, пока я пытался использовать именованный ссылочную ячейку для определения Отмасштабированная диапазон немного более гибко ... замена выше

=MATCH(TRUE,INDEX(ISBLANK(OFFSET($R$12,1,0,ROW(last_cell)-ROW(),1)),0),0)-1 

дает #N/A! в ячейке. Поскольку формула =ROW(last_cell)-ROW() отлично работает сама по себе, поэтому для меня это загадка, почему она не работает в составной формуле ... даже заменяя 1 в параметрах СМЕЩЕНИЯ с ROW(A1), выдает ошибку.

Я могу обойти его, но это поведение действительно раздражает! Может ли кто-нибудь пролить свет на это?

+1

Перейдите в свою камеру. Выберите Formula Ribbon -> Formula Auditing -> Evaluate formula. Пройдите через 1 шаг за раз. Что оценивает каждый термин? Вы ожидаете, что Row (last_cell) -Row() до = 1,000. Имеет ли это? Может быть, это равное отрицательное число? Что такое last_cell? Перейдите в свой менеджер имен и убедитесь, что он относится к диапазону, который вы ожидаете. –

ответ

1

Проблема, с которой вы сталкиваетесь, заключается в том, что OFFSET function ожидает длинное целое число как свой параметр [height], и вы перемещаете массив целых чисел на нем. Да, в массиве есть только одно целое число, но оно все еще является массивом, и OFFSET прыгает с корабля при первом признаке потенциальных проблем. Если вы оцениваете формулу, предложенную выше, «Eh» Bacon, вы увидите, что результат этого простого вычитания по математике завернут в скобки (например, { и }). Вам нужно удалить любую индикацию, что параметр [height] подается в массив или OFFSET будет продолжать задыхаться.

=MATCH(TRUE,INDEX(ISBLANK(OFFSET($R$12, 1, 0, MIN(ROW(last_cell)-ROW()), 1)),0),0)-1 

Существует несколько основных функций листа Excel, которые могут принимать массив из 1 и превращать его в целое число. Я использовал MIN function. MAX, SUM, AVERAGE, и т.п. все все работа. Они берут массив чисел и возвращают одно целое число, даже если этот массив чисел имеет только одно число.

По смежной теме я считаю замечательным, что вы пытаетесь сократить количество циклов вычисления в своей книге, но вам не хватает одного важного соображения. Первое, что вам нужно сделать, это выбросить OFFSET function.

=MATCH(TRUE,INDEX(ISBLANK($R$12:INDEX($R:$R, ROW(last_cell)+1)), ,), 0)-1 

OFFSET является летучей формулой, которая пересчитывает всякий раз, когда ничего в изменениях рабочей книги. При выборе эквивалента INDEX function эта формула выводится из изменчивого режима, и она будет пересчитываться только тогда, когда изменяется что-то, что влияет на ее результат.

Возможно, вас заинтересует способ, с помощью которого OFFSET ошибочно обрабатывает ошибки с плавающей запятой. Подробнее см. В разделе OFFSET_Floating_Point_Error.

+0

ничего себе. Впечатляюще! –

+0

Спасибо Jeeped & Grade 'Eh' Bacon ... извините за поздний ответ, когда я отправился домой с расстройством сразу после публикации ... Я смутно осознавал, что должен стараться избегать СМЕЩЕНИЯ, но не заглянул в него ... тип несоответствия идеи имеет большой смысл, я попробую альтернативы сегодня вечером – Rick

0

Имея возможность немного поиграть, я все еще смущен!

Сам по себе режим OFFSET не имеет проблем с принятием возвращаемых значений ROW и COLUMN в качестве параметров.Чтобы использовать тривиальный пример, эта формула работает:

= СЧИТАТЬПУСТОТЫ (OFFSET ($ R $ 12, СТРОКА (1) + 1,0, СТРОКА (R20) -COLUMN(), 1))

Попытка отличается способы устранения OFFSET из выражения, я придумал:

= MATCH (TRUE, INDEX (ISBLANK (INDIRECT (АДРЕС (13,18) & ":" & АДРЕС (1012,18))), 0) , 0) -1

Которая работает, за счет замены СМЕЩЕНИЯ для КОСВЕННОГО (я надеюсь, что это меньше 2 зол!) Однако я бы предпочел использовать:

= MATCH (TRUE, INDEX (ISBLANK (ROCK() + 1, COLUMN()) & ":" & АДРЕС (ROW (last_cell), COLUMN()))), 0), 0) -1

Что не работает, давая # N/A! снова, как и изменение любого из явных целых чисел в выражения ROW или COLUMN.

Индивидуально, я пробовал СМЕЩЕНИЕ, ИНДЕКС, ISBLANK и MATCH с выражениями ROW и COLUMN, и все они, похоже, работают, поэтому кажется, что они используют их в составных формулах, которые бросают ошибку.

Смежные вопросы