Excel-不带帮助程序的按行计算

Excel-不带帮助程序的按行计算,excel,excel-formula,office365,Excel,Excel Formula,Office365,最近,我回答了一个问题,关于如何在没有助手的情况下检索两列矩阵中每个MEDIAN()的MEDIAN(),例如: 没有辅助项的行计算并不难,因为只有两个值的中位数总是平均值。因此,只需要一个简单的公式: =MEDIAN((A1:A3+B1:B3)/2) 但是出于好奇,如果我至少有一个3列矩阵呢 中位数实际上需要计算。这里的中位数是{8,2,2} 我似乎找不到一种方法来获得3+列的行计算。在本例中,它是关于media()的,但我可以想象可能还有其他功能。因为这可能是简化的数据,所以我不想求助于

最近,我回答了一个问题,关于如何在没有助手的情况下检索两列矩阵中每个
MEDIAN()
MEDIAN()
,例如:

没有辅助项的行计算并不难,因为只有两个值的中位数总是平均值。因此,只需要一个简单的公式:

=MEDIAN((A1:A3+B1:B3)/2)
但是出于好奇,如果我至少有一个3列矩阵呢

中位数实际上需要计算。这里的中位数是
{8,2,2}

我似乎找不到一种方法来获得3+列的行计算。在本例中,它是关于
media()
的,但我可以想象可能还有其他功能。因为这可能是简化的数据,所以我不想求助于类似于
=中值(中值(A1:C1),中值(…

我试着摆弄
OFFSET()
,虽然我不喜欢使用易失性函数,但我希望它可以直接与数组一起工作,或者通过使用
中间值(LET(X,SEQUENCE(ROWS(A1:A3))、中间值(OFFSET(A1:C1,X-1,0))
,正确地触发。然后我开始讨论这两种函数的组合
MMULT()
LARGE()
,但是我的尝试都没有成功

问题


因此,最终的问题是:我们如何在没有助手的情况下返回行计算的结果(数组)。如果不可能,这也是一个非常好的答案,这样我就可以安心了=)

是的。经过长时间的思考,据我所知,这在当前的公式中是不可能的。但是,目前在BETA版中,Excel365将采用新的
LAMBDA()
函数,使您可以在不使用VBA的情况下创建自己的函数,甚至可以递归地调用自己。这不是最漂亮的解决方案,但我想我可以在这里分享我所做的:

E3
中的公式:

=MED(A1:C3,"",ROWS(A1:A3))
其中
MED()
是我们自己在“名称管理器”菜单中创建的
LAMBDA()
函数。它的内容如下:

 =LAMBDA(rng,txt,rws,IF(rws=0,MEDIAN(FILTERXML("<t><s>"&txt&"</s></t>","//s")),MED(rng,TEXTJOIN("</s><s>",,txt,MEDIAN(INDEX(rng,rws;0))),rws-1)))
=LAMBDA(rng,txt,rws,IF(rws=0,中值(FILTERXML(“&txt&”,“/s”)),MED(rng,TEXTJOIN(“,”txt,中值(INDEX(rng,rws;0))),rws-1)
可以看出,有4个主要参数,其中3个变量:

  • rng
    -要检查的范围
  • txt
    -在
    FILTERXML()中使用的保留变量
  • rws
    -计数器
第四个参数是嵌套的
IF()
,如果计数器为0,它将返回所有中位数的中值。这是通过
FILTERXML()
完成的,我现在不详细介绍

如果计数器尚未为0,它将递归调用
LAMBDA()
函数,直到它为0为止,它所做的是使用相同的三个参数,但我们可以随时更改它们。因此,我们保持
rng
不变,我们通过
TEXTJOIN()连接行(当前计数器)的
media()
以创建有效的xml构造。最后但并非最不重要的是,我们需要降低计数器

这是一个难题,但是使用
LAMBDA()
现在就可以进行行计算了


注意,如果您对
FILTERXML()
构造感兴趣,您可能会喜欢这篇文章,其中我现在还包括了
LAMBDA()
版本的
SPLIT()
函数。

问题是中位数接受数组作为输入,所以第一个中位数,即使你得到了正确的偏移量,也会捕获所有数组并找到该数组的中位数,然后只将一个数字传递给外部中位数。SUM、AVERAGE、MIN、MAX做同样的事情。@ScottCraner,这正是我的问题。尽管
SUM()
AVERAGE()
我们可以通过
MMULT()
来处理,我希望有一种更通用的方法来进行每行计算。一个“不可能”也是完全可以接受的。这意味着我认为不可能。对于其他的,我们可以使用*IFS()公式和偏移量可以执行您想要的操作,但没有MEDIANIFS()我已经尝试了90分钟,我认为这是不可能的。我还没有lambda。但是你可以做递归,这很有趣。这太棒了。当我最终得到它时,我需要玩它。@ScottCraner。看看你的帐户,我直到今天才有它,但后来我意识到我还不是一个内幕人士。这是一个带有切换到说你想要BETA版环境。这带来了很多机会。我直接切入创建了字符的递归替换,而不是嵌套的
SUBSTITUTES()
。非常有趣!我不是在BETA版香奈儿上。好了。是时候切换频道并获得更新了=)@ScottCraner