Excel计算多个工作表和列的平均值和中位数

时间:2016-10-13 17:57:05

标签: excel excel-vba vba

寻找一些Excel帮助。我有以下工作表:

WORKSHEET WEEK1
A-------|B------|C------|D------
NAME    |GAME A |GAME B |GAME C
JIM      10      15      12
BILL     12      10      5
TED      
PHIL     0       8       17

WORKSHEET WEEK2
A-------|B------|C------|D------
NAME    |GAME D |GAME F |GAME B
JIM      15      10      9
BILL     
TED      3       21      18 
PHIL     12      2       30

基本上,我将有10个工作表(每周一个)。我们在一周内跟踪人们的弹球乐谱。一周又一周(20台机器,每周只有6台机器),游戏/分数在表格上的顺序不一样。

我需要在多个工作表中计算机器的平均值和中位数,并消除任何丢失或归零的分数(因此10,0,10的平均值为10,中位数相同,数据丢失/ null相同)。 / p>

我在第一周使用了这个

=MEDIAN(IF('1B'!L:L>0,'1B'!L:L))

似乎只是很难吃,但我正在努力将这个变成不同列中的交叉表,不包括空白。

我并不反对让另一张能够查看所有工作表和列的工作表来找到游戏标题上的匹配项,然后抓住该列,计算,完成。但是,如果我必须这样做手册,这完全不是问题。

我是一名C#开发人员,所以我得到了代码,我在Excel上的表现非常糟糕,而语法让我感到非常难过。

更新: 预期产量如下:     游戏A:平均值:X,中位数Y.     游戏B:平均值:Z,中位数N

非常感谢!

1 个答案:

答案 0 :(得分:0)

假设:

1)您有Excel 2007或更晚

2)要查询的每个工作表中的数据占用范围A1:D5(第1行中的标题和第A列中的名称)

3)您将您想要获得所需结果的游戏选择(例如“游戏B”)放在除被查询之外的工作表的单元A1

首先转到Name ManagerFormulas标签)并进行以下定义:

姓名:SheetList

指:={"Sheet1","Sheet2","Sheet3"}

(或者恰好相关的相关表格名称。)

平均所需的array formula**是:

=AVERAGE(IFERROR(1/(1/N(INDIRECT(SheetList&TEXT(ROW(B2:D5)*10^5+TRANSPOSE(MODE.MULT(IF(T(INDIRECT(TRANSPOSE(SheetList)&TEXT(10^5+COLUMN(B2:D5),"!R0C00000"),0))=A1,COLUMN(B2:D5)),COLUMN(B2:D5))),"!R0C00000"),0))),""))

AVERAGE替换为上面的MEDIAN,以获得该游戏的等效中位数。

此致

**数组公式的输入方式与“标准”公式的输入方式不同。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果你已经正确地完成了它,你会注意到Excel在公式周围放置了大括号{}(虽然不要尝试自己手动插入这些)。