我已经想了好几个小时了。我有这样的公式:
=PROMEDIO.SI.CONJUNTO(Flankers!C15:C54;Flankers!D15:D54;1)
我已经手动完成了这个。我在Flankers表中有我的数据,现在我正在计算第二张表中我的反应时间和准确度得分的平均值。每个参与者的数据都是相同的(每个参与者93行),我想做的是向下拖动这个公式,自动填写每个参与者(我在一列中有29个参与者)。当然,每个引用只更改一个数字。例如,我有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行)。有人能阐明这一点,并解释到我可以修改它以供未来分析的地方吗?
几乎将其标记为重复的重复单元格跳过10行,但实际上恰恰相反。然而,解决方案是一样的。使用INDEX函数和一些数学运算来实现交错。
最简单的方法是使用OFFSET函数,但该函数被认为是不稳定的,并且只要工作簿中的任何内容发生变化,就会重新调用。每当在任何单元格中键入内容时,大量的这些内容都会导致计算滞后。
使用易失性?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函数中的每个范围提供一个起始单元格和结束单元格。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函数就会重新计算。volatile函数的示例有INDIRECT、OFFSET、TODAY、NOW、RAND和RANDBWEEN。CELL和INFO工作表函数的一些子函数也会使它们变得不稳定