使用右边的数据计算不断扩大的列数

当前有一个电子表格可以跟踪出勤情况。第一列是名称,第二列是出勤百分比,其中包含我需要修改的公式,后续各列中仅包含X或O,表示是否有人出席(这些列的标题为日期)。

当前使用/dist可以检查X的数量,然后公式为base-href

理想情况下,我首先要用右侧数据的实际列数替换COUNTIF()

我曾考虑过将其替换为SUM(100/no_of_columns*COUNTIF(A3:A12)),但看起来很乱吗?

第二,我想用最后一列的值替换A12。

我可以将最后一列设置为非常高的列值,但又感到一团糟,想知道是否有更好的方法...

示例:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=43308a7caac9e804e6a65d48b3fa7490

daiqilin1970 回答:使用右边的数据计算不断扩大的列数

假设您只有第1行的出勤日期,而没有其他信息,例如A和B列的标题,

将以下公式放在单元格B2中并将其向下拖动,

=COUNTIF(INDEX(OFFSET($C2,COUNTA($1:$1)),),"x")/COUNTA($1:$1)*100
  

逻辑是使用 INDEX + OFFSET 函数动态返回右侧的列范围,并使用 COUNTA 找出有多少日期,以及您应该了解 COUNTIF 的用法,该计算是不言自明的。

编辑#2

查看工作表后,我想您是通过在B和C之间插入列来添加新日期的,因此您可能希望在单元格B2中使用以下公式,以避免系统转移起始单元格引用自动:

=COUNTIF(INDEX(OFFSET($B2,1,"x")/COUNTA($1:$1)*100
  

逻辑与上一个逻辑相同,但对 OFFSET 引用进行了少许更改,因此它开始从B列而不是C列中查找范围。

我已经在Excel和Google表格中测试了以上内容,效果很好。如果您有任何疑问,请告诉我。干杯:)

,

粘贴到 B2

=ARRAYFORMULA(IFERROR(IF(LEN(A2:A),MMULT(IF(INDIRECT("C2:"&ADDRESS(ROWS(A2:A),MAX(IF(1:1<>"",COLUMN(1:1),))))="x",0),TRANSPOSE(COLUMN(INDIRECT("C2:"&ADDRESS(ROWS(A2:A),)))))^0))/
         MMULT(IF(INDIRECT("C2:"&ADDRESS(ROWS(A2:A),))))<>"",)))))^0))*100,0))

0

spreadsheet demo

本文链接:https://www.f2er.com/3169846.html

大家都在问