0

我有以下公式:

=IF(MAX(C2:F2)>0,COUNTIF(C2:F2,">1")/COUNT(C2:F2),0)

此公式位于结构化表格的第二列,并遍历右侧表格中的其余列。该公式基本上告诉有多少实例满足某个标准,并将其放在实例总数的一小部分。因此,如果满足条件 2 次并且有 3 个实例,我将得到 2/3 作为输出。

我已经研究了一个小时,但我无法弄清楚。有没有办法让公式中的单元格范围在添加新列时自动展开?

4

2 回答 2

2

根据我对数据的了解,可以通过创建一个命名范围来解决该问题,该范围指的是:

=OFFSET($C$2,0,0,1, COLUMNS(myTable))

公式的变化是:

=IF(MAX(myRange)>0,COUNTIF(myRange,">1")/COUNT(myRANGE),0)
  • myTABLE你的桌子的名字在哪里?
  • myRANGE新命名范围的名称在哪里

这个怎么运作:

命名范围计算表中的列数,并在添加删除时更新。偏移量锚定到表格的左侧并向右延伸表格中的列数。该公式删除单元格引用以支持命名范围以提高易读性。它可以复制拖动粘贴和移动到整个地方,仍然指向正确的范围。如果有足够的范围,您可以将其放在工作簿中的任何位置而不会出现问题。

注意:当将工作表复制到新工作簿时,我对这种方法最大的不满是。命名范围非常棒,以至于工作簿范围内的范围即使在复制到新工作簿之后也会指向原始工作簿。有时这是一件好事,但对我们来说,这大多是一件麻烦事。


我相信另一个答案会补充第一个答案,因为在无数情况下,人们可能想要一个动态范围,同时又不想要一张桌子。

这就是线索,有关更多信息,您可以搜索动态范围。或者更具体地说:动态命名范围。


要回答您的问题:

是的,这是可能的,而且非常方便。例如,打印区域可以随您的数据扩展和收缩,并且很容易与之交互,因为您使用的是名称而不是地址。而且当使用 VBA 时,我发现在命名范围中工作通常比在表格中更容易,也就是说,除非表格绑定到变量,在这种情况下,它们在我眼中是相等的。打字有一些根本上的厌恶,listobject("table name").listcolum("table colum name").datapropertyrange 当我不得不打字时,我几乎有一种本能的反应。

创建动态命名范围的要点很简单。打开名称编辑器,命名一个范围,然后使用offset()counta()定义您的范围。计数非空单元格具有双重职责。它是重新计算范围的触发器,它提供了一个可与偏移量一起使用以更改范围区域的索引。

这是一个例子:=OFFSET($A$1,0,0,COUNTA($A:$A),1)


这是非常直截了当的。除了一个例外,打印范围。

无论出于何种原因,打印范围的行为方式都不相同,并且不会像正常的命名范围那样更新。要使其动态化,您可以像往常一样创建一个命名范围。这将是您的打印范围,因此请务必计算在内。然后让您的打印范围引用该命名范围。这里的所有都是它的。第一个命名范围指向您要打印的区域,并且范围处的打印点指向该命名范围。

于 2018-08-10T01:30:08.093 回答
2

您应该利用结构化引用Index获取您需要的表格部分

=IFERROR( COUNTIF(
                  INDEX(YourTableName[@],1,(COLUMN([@FormulaColumn])-COLUMN(YourTableName[@])+2)):
                  INDEX(YourTableName[@],1,COLUMNS(YourTableName[@])),
                  ">1") /
          COUNT(
                  INDEX(YourTableName[@],1,(COLUMN([@FormulaColumn])-COLUMN(YourTableName[@])+2)):
                  INDEX(YourTableName[@],1,COLUMNS(YourTableName[@])))
        ,0)

这将计算公式列右侧的单元格数,>1并将其除以公式列右侧非空白的单元格数。

这里的重点是COLUMNS(YourTableName[@])。这将在您添加列时自动增加

注意:如果要在除数中包含空白,可以调整公式以适应

只需更改YourTableNameFormulaColumn适合您的数据

于 2018-08-09T22:44:05.877 回答