拖动公式,将行更改除另一个时间间隔

时间:2015-11-19 13:15:51

标签: excel vba excel-vba excel-formula

我一直在努力解决这个问题。我有这个公式:

 =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行)。有人可以阐明这一点并将其解释到我可以修改它以供将来分析吗?

1 个答案:

答案 0 :(得分:4)

几乎将此标记为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)

¹当整个工作簿中的任何内容发生变化时,不仅在影响其结果的某些内容发生变化时,挥发性函数都会重新计算。 易失性函数的示例包括INDIRECTOFFSETTODAYNOWRANDRANDBETWEENCELLINFO工作表函数的某些子函数也会使它们变得不稳定。