Excel中是否有类似于聚合的函数?

我需要用同一行中的一组列(从左到右)中的第一个非空条目来填充单元格 – 类似于SQL中的coalesce()。

在下面的示例工作表中

--------------------------------------- | | A | B | C | D | --------------------------------------- | 1 | | x | y | z | --------------------------------------- | 2 | | | y | | --------------------------------------- | 3 | | | | z | --------------------------------------- 

我想在行A的每个单元格中放一个单元格函数,这样我就可以得到:

 --------------------------------------- | | A | B | C | D | --------------------------------------- | 1 | x | x | y | z | --------------------------------------- | 2 | y | | y | | --------------------------------------- | 3 | z | | | z | --------------------------------------- 

我知道我可以通过级联IFfunction来做到这一点,但是在我的实际工作表中,我有30列可供select,所以如果有更简单的方法,我会很高兴。

 =INDEX(B2:D2,MATCH(FALSE,ISBLANK(B2:D2),FALSE)) 

这是一个数组公式。 input公式后,按CTRL + Shift + Enter使Excel将其评估为数组公式。 这将返回单元格给定范围的第一个非空白值。 对于您的示例,该公式input到标题为“a”的列中

  ABCD 1 xxyz 2 yy 3 zz 

或者如果你想比较单个单元格,你可以在VBA中创build一个Coalesce函数:

 Public Function Coalesce(ParamArray Fields() As Variant) As Variant Dim v As Variant For Each v In Fields If "" & v <> "" Then Coalesce = v Exit Function End If Next Coalesce = "" End Function 

然后在Excel中调用它。 在你的例子中,A1中的公式是:

 =Coalesce(B1, C1, D1) 

将VBA方法更进一步,我已经重新编写了它,以允许将两个(或者两个)单个单元格和单元格范围组合在一起:

 Public Function Coalesce(ParamArray Cells() As Variant) As Variant Dim Cell As Variant Dim SubCell As Variant For Each Cell In Cells If VarType(Cell) > vbArray Then For Each SubCell In Cell If VarType(SubCell) <> vbEmpty Then Coalesce = SubCell Exit Function End If Next Else If VarType(Cell) <> vbEmpty Then Coalesce = Cell Exit Function End If End If Next Coalesce = "" End Function 

所以,现在在Excel中,您可以在A1中使用以下任何公式:

 =Coalesce(B1, C1, D1) =Coalesce(B1, C1:D1) =Coalesce(B1:C1, D1) =Coalesce(B1:D1) 

在数组内input不允许的variables。

 Function Coalesce(ParamArray Fields() As Variant) As Variant Dim v As Variant For Each v In Fields If IsError(Application.Match(v, Array("", " ", 0), False)) Then Coalesce = v Exit Function End If Next Coalesce = "" End Function