Fab*_*ian 43 sql excel xls coalesce
我需要用同一行中的一组列(从左到右)填充第一个非空条目的单元格 - 类似于SQL中的coalesce().
在以下示例表中
---------------------------------------
| | A | B | C | D |
---------------------------------------
| 1 | | x | y | z |
---------------------------------------
| 2 | | | y | |
---------------------------------------
| 3 | | | | z |
---------------------------------------
Run Code Online (Sandbox Code Playgroud)
我想在A行的每个单元格中放置一个单元格函数,以便我得到:
---------------------------------------
| | A | B | C | D |
---------------------------------------
| 1 | x | x | y | z |
---------------------------------------
| 2 | y | | y | |
---------------------------------------
| 3 | z | | | z |
---------------------------------------
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过级联的IF函数来实现这一点,但在我的实际工作表中,我有30列可供选择,所以如果有更简单的方法我会很高兴.
How*_*let 47
=INDEX(B2:D2,MATCH(FALSE,ISBLANK(B2:D2),FALSE))
Run Code Online (Sandbox Code Playgroud)
这是一个数组公式.输入公式后,按CTRL+ Shift+ Enter使Excel将其评估为数组公式.这将返回给定单元格范围的第一个非空值.对于您的示例,公式将在标题为"a"的列中输入
A B C D
1 x x y z
2 y y
3 z z
Run Code Online (Sandbox Code Playgroud)
小智 10
我用了:
=IF(ISBLANK(A1),B1,A1)
Run Code Online (Sandbox Code Playgroud)
这将测试您要使用的第一个字段是否为空白,然后使用另一个。当您有多个字段时,可以使用“嵌套的条件”。
小智 7
或者,如果要比较单个单元格,可以在VBA中创建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
Run Code Online (Sandbox Code Playgroud)
然后在Excel中调用它.在您的示例中,A1中的公式为:
=Coalesce(B1, C1, D1)
Run Code Online (Sandbox Code Playgroud)
小智 7
进一步采用 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
Run Code Online (Sandbox Code Playgroud)
现在,在 Excel 中,您可以在 A1 中使用以下任意公式:
=Coalesce(B1, C1, D1)
=Coalesce(B1, C1:D1)
=Coalesce(B1:C1, D1)
=Coalesce(B1:D1)
Run Code Online (Sandbox Code Playgroud)
如果您知道列之间不会有任何重叠,或者想要重叠,那么这是解决合并问题的一种非常快速的方法。以下公式不适用于您的值和列,而是适用于我的模型,因此您需要进行调整以使其相关。
=LEFT(TRIM(CONCATENATE(Q38,R38,S38,T38,U38,V38,W38,X38,Y38)),1)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48400 次 |
最近记录: |