sql excel xls coalesce

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