sql - ¿Hay una función de fusión en Excel?
xls coalesce (4)
Dentro de la matriz ingrese las variables que no están permitidas.
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
Necesito completar una celda con la primera entrada no vacía en un conjunto de columnas (de izquierda a derecha) en la misma fila, similar a coalesce () en SQL.
En la siguiente hoja de ejemplo
---------------------------------------
| | A | B | C | D |
---------------------------------------
| 1 | | x | y | z |
---------------------------------------
| 2 | | | y | |
---------------------------------------
| 3 | | | | z |
---------------------------------------
Quiero poner una función de celda en cada celda de la fila A para que obtenga:
---------------------------------------
| | A | B | C | D |
---------------------------------------
| 1 | x | x | y | z |
---------------------------------------
| 2 | y | | y | |
---------------------------------------
| 3 | z | | | z |
---------------------------------------
Sé que podría hacer esto con una cascada de funciones IF, pero en mi hoja de datos real, tengo 30 columnas para seleccionar, por lo que sería feliz si hubiera una manera más simple.
Llevando el enfoque de VBA un paso más allá, lo reescribí para permitir una combinación de ambas (o cualquiera) celdas individuales y rangos de celdas:
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
Entonces, ahora en Excel, puede usar cualquiera de las siguientes fórmulas en A1:
=Coalesce(B1, C1, D1)
=Coalesce(B1, C1:D1)
=Coalesce(B1:C1, D1)
=Coalesce(B1:D1)
O si desea comparar celdas individuales, puede crear una función Coalesce en VBA:
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
Y luego llámalo en Excel. En su ejemplo, la fórmula en A1 sería:
=Coalesce(B1, C1, D1)
=INDEX(B2:D2,MATCH(FALSE,ISBLANK(B2:D2),FALSE))
Esta es una fórmula de matriz. Después de ingresar la fórmula, presione CTRL + Mayús + Entrar para que Excel lo evalúe como una fórmula de matriz. Esto devuelve el primer valor no en blanco del rango de celdas dado. Para su ejemplo, la fórmula se ingresa en la columna con el encabezado "a"
A B C D
1 x x y z
2 y y
3 z z