[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.
Figura 1. Encontrar el primer valor con datos de una fila.
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.
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