【问题标题】:Excel Dynamic Array Running Count of DuplicatesExcel 动态数组运行重复次数
【发布时间】:2021-01-20 06:10:18
【问题描述】:

我一直在改造一些旧的电子表格工具,以便使用 Excel 的新 Dynamic Array Formulas 功能过滤和格式化动态数据输出。这有助于消除一些对预分配单元格和较少数量的帮助列的需求(这有助于减小文件大小并提高性能)。

我正在努力替换的一种函数类型是提取动态的、运行重复的计数。

例如,假设我有一个包含 20 个名称的 B 列,这些名称的长度可能从少数到 200 个不等。 C、D 等列中也有相关数据,这些数据的大小也有所不同。为了在后面的列中过滤数据,我们目前在 A 中使用一个辅助列,该列由 A 中重复项的运行计数和使用半锚定范围的公式组成(即,以锚定单元格开始范围,扩展为公式被复制到辅助列中,类似于此处的解决方案CountIf() and a semi-anchored range)。与新的动态数组公式相比,这里的缺点是需要为数据预先分配帮助列。

尽管尝试使用 Index()Aggregate()Filter() 以及更多涉及的符号(如 Sumproduct(--(...))),但我能找到的最直接的方法来制作辅助列 A 似乎是通过创建运行计数半锚定范围,不幸的是似乎不能很好地转换为新的动态数组公式。

有没有人幸运地将半锚定范围和公式用于动态数组公式?

【问题讨论】:

    标签: arrays excel formula array-formulas


    【解决方案1】:

    要使用动态数组公式,我们需要使用易失的 OFFSET。

    =COUNTIFS(OFFSET(A1,0,0,SEQUENCE(COUNTA(A1#))),A1#)
    

    【讨论】:

    • 有趣,所以为了使用它,A 列中的数据需要已经是 A1 中公式的溢出结果,对吗?有没有办法在没有来自 Spill 结果的情况下引用 A 列的数据?最坏的情况,我可以想象添加一个辅助列 B 并将 B1 设置为:=A1:INDEX(A:A,COUNTA(A:A)),然后将 C1 设置为=COUNTIFS(OFFSET(B1,0,0,SEQUENCE(COUNTA(B1#))),B1#),或者将两者结合在一个长公式中......只是好奇是否有另一种方法。同时,我认为这是最直接的答案!
    • 不可以:=COUNTIFS(OFFSET(A1,0,0,SEQUENCE(COUNTA(A1:A7))),A1:A7)
    • 或动态:=COUNTIFS(OFFSET(A1,0,0,SEQUENCE(COUNTA(A:A))),A1:INDEX(A:A,COUNTA(A:A)))
    • 因此,作为后续工作,我尝试将偏移量的使用转换为非易失性,并产生了一些有趣的结果。 (1) 首先,如果我从上面的高度参数中仅删除Sequence() 的使用(即仅保留 Count(A1#),则计数行为会中断,如 here 所示(2)如果我更改为仅引用 @ 987654330@ 完全没有偏移量(即=COUNTIFS(A1#,A1#),它返回相同的结果。(3)这与先前 cmets 中的范围参考调整保持一致。
    • 看offset和sequence的使用,CountIfs()中的数组变成了#VALUE!错误的数组,当使用原始数组作为条件时正确计数。有没有办法使用索引来复制这种效果?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2014-04-12
    • 2016-03-23
    • 2012-01-28
    • 1970-01-01
    相关资源
    最近更新 更多