Excel 动态打印跳过数据

Excel 动态打印跳过数据

我在名称管理器中设置了一个动态打印范围,以忽略那些公式不从另一个工作表返回任何值的行。大多数情况下,一切都正常,只是它跳过了最后 8 行实际数据。这是我使用的 OFFSET 公式。

=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() 的结果中。因此,就像下面末尾显示的公式一样,只是加 8 而不是加 7。您的所有麻烦都将消失。

(旁注:将两个范围都改为 B1(而不是 B8)会将缺失行改为 7 的原因是 B6 中的值是数字并按数字方式计算,因此少了 8 行就变成了少了 7 行。)

答案2

正如harrymc所暗示的,要找到这个问题的答案确实需要更多信息,甚至截图也可能会方便。

但是,您似乎正在测试一个范围 (B8:B10003),而不是 B1:wherever 的范围,因为该区域没有任何动态材料。事实上,其内容甚至可能会影响计算。到目前为止,一切顺利。

但是,缺失行数表明您确实打算打印那些未测试行中的任何内容,因为动态范围似乎从 A1 开始,而不是 A8 或其他什么。缺失的 8 与 B1:B7 中的 7 并不完全匹配,但在您的另一个相关问题中,您声明您正在做其他答题者所做的,但它对您不起作用,而其中的其他文本表明您只是几乎做了他所做的。所以我假设也许同样的不准确性也适用于这里,然后继续说下去。

似乎动态数据从第 8 行开始,而 B 列是创建正确打印范围的方便且准确的来源。并且您可能希望打印该点上方的七行中的部分或全部作为报告的开头,也可能作为标题(但可能不会,或者涉及那么多行,您会遗漏一两千行。)

假设该范围内的数据要么是数字,要么是不需要的,所以COUNT()很好,您不需要COUNTA()。不同之处在于后者也会计算文本单元格。因此,第一个潜在问题是:也许在 10,000 行中,其中大约 8 个值实际上是文本。“如何”在这里只对解决该问题的来源很重要(因为它显然不是预期的),并且甚至不是考虑是否可能是它的先决条件。因此,设置两个公式,一个使用该范围内的每个函数,并查看它们的结果是否相同。如果不是,则列中有一些红头文本条目。这些不计算在内,因此范围最终比它需要结束的位置少那么多。坦率地说,无论您认为这有多不可能,它绝对是最有可能的麻烦根源。此外,它可能是问题的一部分,其余的可能是其他问题。进行测试。

接下来,测试准确正确的范围当然至关重要,所以这样做值得称赞。但是,这并不一定是您想要生成实际打印区域的范围。不是单独打印。因此,假设您确实想从 A1 开始打印,那么计算总数的七行左右将用于行 1-7,而不是实际数据。换句话说,假设计数是 2,433。正如所写,那将是范围 A1:X2433,但由于它意味着第 8 行到第 10003 行中有 2,433 行,所以您确实需要这么多行和另外七行。因此,如果计算结果为 2,433 个项目,您真正需要的是范围 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”之前)。

我敢打赌,这样可以得到缺失的七行。也许在 9,996 个 B 列单元格中的某个地方存在一个文本条目,可以得到另一行。

如果在第一次使用时将引用从 B8 更改为 B1,则如果 1-7 行有内容,则会将行添加到计数中(因为在测试中使用会将它们添加到计数中,而仅对它们进行计数则不会),并且您说它正在丢失它们,而不是获得它们,所以这不是问题。在第二次使用时更改它可能会丢失它们(需要查看确切的真实电子表格页面),因为前七个可能不是数字。Excel 将元素与元素匹配,而不是地址与地址匹配。这意味着,如果范围的前七个元素是非数字的,则它们的 FALSE 将与测试范围的数字条目(从 B8 开始,大概是数字条目本身)匹配。因此,感兴趣范围的前七个元素将被排除在计数之外,使得动态打印范围缺少七行。

让范围保持匹配,并在其父函数 ( ) 的结果中添加 7,即可COUNT()实现您的目标,而不会弄乱比较。这样做,我敢打赌它看起来会非常正确。不要弄乱函数中的任何内容COUNT(),只需在它后面添加所需的 7 即可。

最后,我要提醒那些没有注意到的人,您的情况大概是公式以连续块的形式返回行中的值,直到某个点不再返回,并且永远不会再向下返回。因此,您没有第 23、24、2438、2499 和 2900 行的数据。对于这五个作为唯一数据的数据,它们将位于第 8-12 行。因此,您不是使用它来“逐行搜索”,而是将其作为一个块进行打印,第一行向下直到第一个空行,之后就不关心了。如果它们在整个过程中被发现,这种方法根本不会起作用。

这也意味着返回数据之间的一些空白行不是问题的原因,使用基于FILTER()将它们全部打包成连续组的公式不会产生任何效果,因为它们已经是这样的。(如果这是完全错误的,并且它们之间确实有空白行,那么,这就是您遇到的困难的根源,是时候开始着手解决FILTER()它了!)

相关内容