【问题标题】:Drag a formula down with Row changes by another interval other than one将公式向下拖动,其中行更改按另一个间隔而不是一个
【发布时间】:2015-11-19 13:15:50
【问题描述】:

我已经想了好几个小时了。我有这个公式:

 =PROMEDIO.SI.CONJUNTO(Flankers!C15:C54;Flankers!D15:D54;1)

这是我手动完成的。我在 Flankers 表中有我的数据,现在我在第二张表上计算我的反应时间和准确度得分的平均值。每个参与者的数据是相同的(每个参与者 93 行),我想做的是向下拖动这个公式以自动填写每个参与者(我的 29 个参与者在一列中)。当然,每个参考仅更改 1 个数字。比如我在C2中有公式,所以当我把它拖到C3时,公式变成了

=AVERAGEIFS(Flankers!C16:C55;Flankers!D16:D55;1)

我需要所有行增加 93 并保持范围相同(40 个单元格),因此 C3 的单元格应该是 =AVERAGEIFS(Flankers!C108:C147;Flankers!D108:D147;1) 然后C4的单元格应该是

 =AVERAGEIFS(Flankers!C201:C240;Flankers!D201:D240;1)

等。手动操作非常繁琐(总共 2698 行)。有人可以阐明这一点并将其解释为我可以修改它以供将来分析吗?

【问题讨论】:

  • 抱歉,我正在使用西班牙语 Excel 界面。PROMEDIO.SI.CONJUNTO() 与 AVERAGEIFS() 相同。以为我在上传问题之前就抓住了它们!

标签: vba excel excel-formula


【解决方案1】:

几乎将其标记为 Duplicated cells skip 10 rows 的副本,但实际上它是它的反面。但是,解决方案是相同的。使用 INDEX function 和一点数学来实现交错。

最简单的方法是使用OFFSET function,但该函数被认为是易失性¹,并且会在工作簿中的任何内容发生变化时重新计算。每次在任何单元格中输入某些内容时,大量这些都会导致计算滞后。

使用 volatile¹OFFSET,

=AVERAGEIFS(OFFSET(Flankers!$C$15, (ROW(1:1)-1)*93, 0, 40, 1),
            OFFSET(Flankers!$C$15, (ROW(1:1)-1)*93, 1, 40, 1), 1)

用非易失性INDEX,

=AVERAGEIFS(INDEX(Flankers!C:C, 15+(ROW(1:1)-1)*93):INDEX(Flankers!C:C, 54+(ROW(1:1)-1)*93),
            INDEX(Flankers!D:D, 15+(ROW(1:1)-1)*93):INDEX(Flankers!D:D, 54+(ROW(1:1)-1)*93), 1)

第二个公式可能看起来更复杂,但它真正所做的只是为AVERAGEIFS function 中的每个范围提供一个起始单元格和一个结束单元格。 INDEX 引用整个列,剩下的部分是一些基本的数学运算。

在 ES-ES 公式语言中(带有分号列表分隔符)为,

=PROMEDIO.SI.CONJUNTO(DESREF(Flankers!$C$15; (FILA(1:1)-1)*93; 0; 40; 1);
                      DESREF(Flankers!$C$15; (FILA(1:1)-1)*93; 1; 40; 1); 1)

=PROMEDIO.SI.CONJUNTO(INDICE(Flankers!C:C; 15+(FILA(1:1)-1)*93):INDICE(Flankers!C:C; 54+(FILA(1:1)-1)*93);
                      INDICE(Flankers!D:D; 15+(FILA(1:1)-1)*93):INDICE(Flankers!D:D; 54+(FILA(1:1)-1)*93); 1)

¹ 当整个工作簿中的任何内容发生变化时,可变函数都会重新计算,而不仅仅是在影响其结果的某些内容发生变化时。 volatile 函数的示例有 INDIRECT、OFFSET、TODAY、NOW、RAND 和 RANDBETWEEN。 CELL 和 INFO 工作表函数的一些子函数也会使它们变得易变。

【讨论】:

  • 看起来太完美了!!我自己非常接近这样做。我已经复制了你所做的,现在它给了我“我们发现这个公式有问题”。我错过了什么吗?我觉得它应该可以工作!
  • 抱歉 Robbie - 我忙于发布帖子,忘记翻译了。 AVERAGEIFS 应该是 PROMEDIO.SI.CONJUNTO,INDEX 应该是 INDICE 并且所有逗号都应该是分号;例如,, ► ;。我会尽快修改我的答案。
  • 好的,没关系。我认为西班牙语界面使用分号而不是逗号。修复!非常感谢!!!
  • 我们同时意识到了!哈哈...另外,当我将来这样做时,行总是只是(1:1)?例如,现在我要执行此操作的下一个公式位于 D 中(以及 E 和 F 中的另外两个公式)。有哪些变数必须改变?你真是天赐良机,谢谢!!!
  • ROW(1:1)(或FILA(1:1))是1。填写一行,它变成ROW(2:2),即2。在 15+(FILA(1:1)-1)*93 中使用,您从 15 开始,然后在填写时获得 15、108、201、294 等。结束位置也是如此;例如54、147、240、333等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多