Excel Dynamic Print пропускает данные

Excel Dynamic Print пропускает данные

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

=СМЕЩ('Журнал закупок'!$A$1,0,0,COUNT(IF('Журнал закупок'!$B$8:$B$10003<>0,'Журнал закупок'!$B$8:$B$10003)),24)

Я не могу понять, почему я теряю эти последние 8 строк, если только это не связано с тем, что я начинаю диапазон с строки 8? Я изменил диапазон, чтобы он начинался с B1, и теперь он пропускает последние 7 строк. Я запутался. Любая помощь будет высоко оценена!

[Вот ссылка на файл][1]. Работает это так: новые данные вставляются во вкладку «Экспорт данных», которая затем втягивается в две другие с помощью формул. Это пустые ячейки с формулами, которые я пытаюсь игнорировать при динамической печати.

решение1

Добавлено после предоставления ссылки:

Да, проблема в восьми строках, так как первые семь не обработаны COUNT(), а восьмая (сама B8) содержит текст, поэтому не добавляется к счету. Но, как уже упоминалось, вы не можете исправить это, изменив второй диапазон. Вам просто нужно добавить 8 к результату COUNT(). Так же, как в формуле, показанной в конце, ниже, за исключением того, что вместо 7 добавьте 8. Все ваши проблемы исчезнут.

(Примечание: причина, по которой изменение обоих диапазонов на B1 (а не на B8) изменило количество отсутствующих строк на 7, заключается в том, что значение в B6 является числовым и подсчитывается таким образом, поэтому восемь лишних строк становятся всего семью лишних строк.)

решение2

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

Однако, похоже, вы тестируете диапазон (B8:B10003), а не диапазон от B1:whereever, поскольку в этом регионе нет ничего из динамического материала. Фактически, его содержимое может даже сбить расчет. Пока все хорошо.

Однако количество пропущенных строк предполагает, что вы намерены напечатать все, что есть в этих непроверенных строках, поскольку динамический диапазон, похоже, начинается в A1, а не в A8 или что-то в этом роде. 8 пропущенных строк против 7 в B1:B7 не совпадают точно, но в вашем другом, связанном, вопросе вы утверждаете, что делаете то же самое, что делает другой Ответчик, но это не работает для вас, в то время как другой текст в нем предполагает, что вы делаете только почти то же, что и он. Поэтому я предположу, что, возможно, та же неточность применима и здесь, и пойду дальше.

Похоже, что динамические данные начинаются в строке 8, и этот столбец B является удобным и точным источником для создания правильного диапазона печати. ​​И что вы, вероятно, захотите напечатать некоторые или все семь строк выше этой точки в качестве начала для отчета, возможно, также в качестве заголовка (но, вероятно, нет, или при таком количестве вовлеченных строк вы бы пропустили тысячу или две.)

Один предполагает, что данные в этом диапазоне являются либо числовыми, либо нежелательными, поэтому COUNT()это здорово, и вам не нужно COUNTA(). Разница в том, что последний будет также учитывать текстовые ячейки. Итак, первая потенциальная проблема: возможно, в 10 000 строках что-то около восьми из этих значений на самом деле являются текстом. «КАК» здесь имеет значение только для решения источника этого (так как это явно не ожидается), и не является предвестником даже для рассмотрения того, может ли это быть так или нет. Поэтому задайте две формулы, по одной с использованием каждой функции в этом диапазоне, и посмотрите, одинаковы ли их результаты. Если нет, то в столбце есть несколько текстовых записей с красными заголовками. Они не учитываются, поэтому диапазон оказывается на столько меньше того места, где он должен заканчиваться. Честно говоря, независимо от того, насколько маловероятным вы это считаете, это, безусловно, наиболее вероятный источник проблем. Кроме того, это может быть частью проблемы, а остальное — чем-то другим. Проведите тест.

Двигаясь дальше, тестирование точного правильного диапазона, безусловно, имеет решающее значение, так что респект за это. Однако это не обязательно именно тот диапазон, который вы хотите сгенерировать для фактической области печати. ​​Не сам по себе. Итак, скажем, вы хотите печатать, начиная с A1, поэтому семь строк из рассчитанного общего количества будут использоваться для строк 1-7, а не для фактических данных. Другими словами, скажем, количество равно 2433. Как написано, это будет диапазон A1:X2433, но поскольку это подразумевает 2433 строки в строках с 8 по 10003, вам действительно нужно столько И еще семь. Так что если расчет находит 2433 элемента, вам действительно нужен диапазон A1:X2440, а не A1:X2433. Это сразу сократит отчет на семь строк.

Как это применяется в вашей формуле? Вам нужно добавить эти семь строк к выходу функции COUNT(). Сразу после закрывающих скобок:

=OFFSET('Procurement Log'!$A$1,0,0,COUNT(IF('Procurement Log'!$B$8:$B$10003<>0,'Procurement Log'!$B$8:$B$10003))  +7,  24)

(прямо перед «24»).

Держу пари, что это даст вам семь из отсутствующих строк. И, возможно, где-то в этих 9996 ячейках столбца B есть текстовая запись, которая даст вам другую.

Изменение ссылки с B8 на B1 при первом использовании добавит строки к счету, если строки 1-7 имеют содержимое (поскольку использование в тесте добавляет их к счету, когда просто подсчет по ним не будет), и вы говорите, что он их теряет, а не приобретает, так что проблема не в этом. Изменение его при втором использовании, вероятно (нужно увидеть точную реальную страницу электронной таблицы), потеряет их, так как первые семь, скорее всего, не являются числовыми. Excel сопоставляет элементы с элементами, а не адреса с адресами. Это означает, что если первые семь элементов диапазона не являются числовыми, их ЛОЖЬ будет сопоставлена ​​с числовыми записями тестового диапазона (который начинается с B8, предположительно, являясь числовой записью). Таким образом, первые семь элементов из интересующего диапазона будут исключены из счета, что сделает динамический диапазон печати на семь строк меньше правильного.

Оставив диапазоны совпадающими и добавив семерку к результату их родительской функции ( COUNT()), вы достигнете своей цели, не испортив сравнения. Сделайте это, и я уверен, что все начнет выглядеть очень правильно. Не нужно ничего портить в COUNT()функции, просто добавьте после нее нужную семерку.

Наконец, я упомяну для тех, кто не заметил, что ваша ситуация, по-видимому, является одной из формул, возвращающих значения в непрерывном блоке вниз по строкам до некоторой точки, в которой они не возвращаются, и никогда не возвращаются снова на остальной части пути вниз. Таким образом, у вас нет данных в строках 23, 24, 2438, 2499 и 2900. Для этих пяти как единственных данных, они будут в строках 8-12. Таким образом, вы не используете это, чтобы "охотиться и клевать" вниз по строкам, так сказать, а скорее берете в качестве блока для печати первую строку вниз до первой пустой строки и не заботитесь о том, что будет после этого. Этот подход не сработал бы ни в коем случае, если бы они были замечены повсюду.

Это также означает, что некоторые пустые строки между возвращаемыми данными не являются причиной проблемы и что использование формулы, например, той, которая основана на , FILTER()для упаковки их всех в непрерывную группу ничего не даст, поскольку они уже есть. (И если это совершенно неверно и они УМЕЮТ встречаться с пустыми строками между ними, что ж, это и есть источник ваших трудностей, и пришло время FILTER()этим заняться!)

Связанный контент