Excel:Flashfill偏移水平+垂直

时间:2020-04-06 05:38:35

标签: excel offset

因此,我不是VBA的忠实拥护者,最近我了解到,只要目标范围比数据要长,OFFSET便可以与COUNTA一起使用,以尽可能快地填充范围。现在,我希望能够同时对列和行进行平均(对行进行平均)。能做到吗?我将头撞在墙上以找到一些可行的逻辑,但只能设法将行与列数相乘的方式将其组合起来。

我在Excel Online中发布了一个最小的可重现示例: https://onedrive.live.com/view.aspx?resid=63EC0594BD919535!1491&ithint=file%2cxlsx&authkey=!ALmV0VtFb7QZCvI

如果看到单元格J9和J11,您将看到我想要组合的内容。我想对J11和以下的三行进行平均,然后对J10进行溢出/闪填(就像J9和11一样,因为已经有了公式,所以会自动填充),它们从右到右,与A1-范围内的数据一样多G4 ..

因此,我拥有A1-G4中带有标题的 numbers 原始数据,并通过在J9中编写=OFFSET($A$1:$A$1,0,0,1,COUNTA($A$1:$EV$1)-1)来获得从左到右填充的所有列标题,并按在J11中编写=OFFSET($A$1,1,0,COUNTA($A:$A)-1),我得到第一列的行从上到下填充。也可以通过编写OFFSET(Days,1,0,COUNTA($A:$A)-1,COUNTA(Days))来组合它们,其中“天”是=OFFSET($A$1:$A$1,0,0,1,COUNTA($A$1:$EV$1)-1)(在可读性的命名范围内)或OFFSET($A$1:$A$1,0,0,1,COUNTA($A$1:$EV$1)-1),而无需使用命名范围

作为一个想法,尽管我不确定如何实现它,也许可以以某种形式使用它来结合=AVERAGE(OFFSET($A$1,1,0,COUNTA($A:$A)-1))

以获取水平部分的列引用。
=MID(ADDRESS(ROW(),COLUMN()),2,SEARCH("$",ADDRESS(ROW(),COLUMN()),2)-2)

..位于https://superuser.com/questions/1259506/formula-to-return-just-the-column-letter-in-excel/1259507

2 个答案:

答案 0 :(得分:2)

现在,根据您的解释,这是我的测试的屏幕截图:

enter image description here

A1:Exxx

我已将该部分转换为一个名为«TblData»的表,它具有许多优点:

  1. 它会自动扩展,无需任何额外的努力/公式
  2. 我们可以通过表[@1], [@2],[@3], [@4], [@5]自动赋予的列来标识数据

J9:N9

作为表名的副本,我使用以下公式对其进行检索:

=INDEX(TblData[#Headers],1,COLUMN(A1))    '<--- This is for J9
=INDEX(TblData[#Headers],1,COLUMN(E1))    '<--- This is for N9

部分J11:Nxx

作为表内容的副本,我使用以下公式填充内容:

=INDEX(TblData,ROW($A1),MATCH(J$9,TblData[#Headers],0))   '<--- This is on J11
=INDEX(TblData,ROW($A3),MATCH(N$9,TblData[#Headers],0))   '<--- This is on N13

J10:N10

现在,这是平均值中有趣的部分,所以这是我使用的公式:

=AVERAGE(TblData[1])  '<--- This is on J10
=AVERAGE(TblData[5])  '<--- This is on N10

NB:(1)我不想使用J10:N10下面的内容,而是更喜欢重用表,因为随着添加的行的增加,它会自动扩展。 (2)除非确实有必要,否则我认为再次从J9:Nxxx复制A1:Exxx也是一项双重工作,因为您可以将表用于任何需要的工作,并且维护较少

在我更新这些项目之后,也请找到附件:

文件链接:https://drive.google.com/open?id=1wRbpUxg0XLpfGqdvMF4fNKXDrL7xPPWs

我们可以在下面提供更多信息,以获取更多信息。希望您能更加努力:)

答案 1 :(得分:0)

对不起,队友,我不知道您要计算什么。如果添加J9 + J11有意义,则可以将J9和J11中的两个公式加一个加号。经过深思熟虑,我决定假定您的问题不是公式之一,而是公式编写的简称-“引用”。因此,我为您准备了这个答案,希望对您有帮助。

在命名范围的基础上,建议您使用此公式创建动态命名范围 Data 。 [数据] =OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),COUNTA(Sheet1!$1:$1))

这样定义的范围在两个方向上都是动态的。但是,请记住,偏移量是易变的(会降低工作表的速度),您可能希望将其使用限制在此公式范围之内,并可能将范围从A2开始,但是我将诱惑您打破规则。现在,您可以使用INDEX函数来引用Data范围。

= INDEX(Data, [Row number], [Column number]) 定义一个单元格。但是通过将列或行设置为零,您可以定义整个列或行。 =INDEX(Data,0,1)定义 Data 范围的第1列,=INDEX(Data,1,0)定义其第一行。 =INDEX(OFFSET(Data,1,0),0,1)定义范围的第一列,从其原始位置向下移动了一行。我建议使用替代方法,并从A2开始 Data 范围,并在需要时为第一行声明另一个范围。

=AVERAGE(INDEX(Data,0,1))将得出您已经在工作表中获得的平均值,但前提是必须从A2开始定义数据。为方便起见,=AVERAGE(INDEX(OFFSET(Data,1,0),0,1))会做同样的事情,而不会更改范围的定义。

=COLUMN()返回此公式所在的列号。因此,您可以在G列中输入=COLUMN()-6,向右复制并从1开始计数。(您可以执行应用于您的公式,=AVERAGE(INDEX(Data,0,COLUMN()-6))将返回第1列的平均值(如果在G列中输入),以及第2、3、4等列的平均值(复制到右侧)。

就像我说的那样,我对您的要求没有足够的理解以得出这个结论,但是我认为使用上述方法将为您提供一个将公式复制到样品正确的表格中的工具。 。如果您能详细说明您的要求,我也许可以提供更多帮助。