[Video] Función personalizada (UDF) PrimerValor para encontrar el primer valor de una fila de datos

En más de una una ocasión me ha tocado trabajar con Tablas de muchas columnas. En varias de esas ocasiones tengo que obtener el valor de la primera celda que tenga datos en una fila. Tal como lo muestro en la Figura 1.

image

Figura 1. Encontrar el primer valor con datos de una fila.

Aquí más información sobre Funciones personalizadas UDF.

En otras palabras, en la columna A tengo que devolver el primer valor encontrado en cada fila, siempre y cuando sea diferente de cero. Una manera de hacerlo es con un SI anidado donde le decimos que si la celda de la columna B es diferente a cero, entonces que me devuelve el valor, si no que consulte el valor de la columna C y que haga la misma validación y así hasta llegar a la columna M.

La fórmula puede usarse la siguiente manera:

=SI(B2<>0,B2,SI(C2<>0,C2,SI(D2<>0,D2,SI…

Ahora imaginemos que tenemos muchas columnas para validar. La fórmula se vuelve muy larga al usar muchos SI anidados.

Devolver el primer valor con la función personalizada (UDF) PrimerValor

Las macros, entre otras cosas, nos sirven para optimizar procesos. En este caso a mi me sirvió para evitarme una fórmula larga y aprovechar mejor el tiempo. Pero fui más allá, además de seleccionar el rango a validar, también la función me permite ingresar un Valor el cual servirá para la comparación de cada columna.

Función UDF PrimerValor

La función PrimerValor devolverá el primer valor encontrado en una lista siempre y cuando sea diferente al parámetro Valor. Los parámetros son:

Rango – Es el rango en el cual se desea hacer la validación.

Valor – El es valor que servirára para comparar el contenido de cada celda de Rango.

UDF_PrimerValor_EXCELeINFO

Figura 2. Función UDF PrimerValor.

Código VBA de la macro

'---------------------------------------------------------------------------------------
' Module    : Módulo1
' Author    : MVP Excel, Sergio Alejandro Campos
' Date      : 27/11/2015
' Website   : http://www.exceleinfo.com
'---------------------------------------------------------------------------------------
'
Function PrimerValor(Rango As Range, Valor As Variant)
'
    Dim Celda As Range
    Dim Celda1 As String
'
    For Each Celda In Rango
        Celda1 = Celda.Value
        If Celda1 = "" Then Celda1 = Valor
'
        If Celda1 <> Valor Then
            PrimerValor = Celda.Value
            Exit Function
        End If
'
    Next Celda
'
End Function

Video tutorial

Mira el video desde Youtube: https://www.youtube.com/watch?v=HzVLrPhjhGg

You may also like...