EJERCICIO PRÁCTICO CON LA FUNCIÓN SPLIT Y EL MÉTODO FIND

Hola a todos:

A lo largo de las semanas me van llegando consultas de los lectores, muchas de ellas requieren bastante trabajo de programación y en otros casos requieren un trabajo previo de análisis funcional. Como no puedo realizar un post con un ejercicio de este tipo, dado que sería muy extenso, creo que lo más interesante es realizar un ejemplo con algunas de las funciones utilizadas en esas consultas.

Por ejemplo, hoy quiero hablar sobre las funcionalidades de la función “Split” y su combinación con el método find.

Imaginamos un ejemplo práctico:

EJERCICIO PRÁCTICO CON LA FUNCIÓN SPLIT Y EL MÉTODO FIND

Lo que debemos hacer es confeccionar una función que nos permita obtener las sumas de los importes que se encuentran en la columna B y que coincidan entre la columna A y la celda D2. Como podéis observar en la celda D2 los números se encuentran delimitados por una “,”.

Para poder construir nuestro código debemos utilizar una función que nos permita extraer cada uno de los elementos de la celda D2, para ello tendremos que utilizar la función Split.

Para localizar esos elementos en la columna A, utilizaremos el método Find.

Podríamos realizar una macro directamente que funcionase con un botón de ejecución, pero para este ejemplo lo más práctico es una UDF (Función Definida por el Usuario).

Esta es la función que vamos a utilizar y que como siempre iremos comentando:

Option Explicit
Function SumaV(ByVal Target As Range)
'Declaramos variables
Dim Num As Variant, nCampo As Variant, sItem As Variant
Dim Numero As Double, Total As Double, nCol As String
Dim Celda As Range
'En la hoja activa
With ActiveSheet
'Recorremos celdas del rango seleccionado
For Each Celda In Target
'por cada dato delimitado buscamos en la columna1
For Each Num In Split(Celda, ",")
Set nCampo = .Range("A:A")
Set sItem = nCampo.Find(Num)
'Buscamos celda con el número buscado
nCol = sItem.Address
'Seleccionamos el valor de la siguiente columna
Numero = .Range(nCol).Offset(0, 1)
Total = Total + Numero
'Pasamos el valor al resultado
SumaV = Format(Total, "#,##0")
Next Num
Next Celda
End With
End Function

Lo primero que debemos tener en cuenta es que la función tendrá que seleccionar un rango (no solo una celda), por ello tenemos que utilizar una primera instrucción For Each que recorra el rango seleccionado, o lo que es lo mismo, las celdas seleccionadas.

For Each Celda In Target

Donde “Target” es el rango que seleccionemos.

Lo siguiente será realizar otra instrucción For Each por cada elemento delimitado en cada celda. Aquí es donde utilizaremos la función Split embebida en el ciclo:

For Each Num In Split(Celda, ",")

Es obvio que si estamos utilizando otro delimitador, como un punto y coma o una barra vertical, debemos modificarlo en el código.

Una vez que tenemos el item seleccionado, ahora debemos buscarlo en la columna A, para ello utilizaremos el métido Find (podríamos programar un buscar V o un For).

Set nCampo = .Range("A:A")
Set sItem = nCampo.Find(Num)
'Buscamos celda con el número buscado
nCol = sItem.Address

Con esto tendremos la celda de la columna A en la que hemos encontrado coincidencia. Pero necesitamos la cifra que debemos sumar, para ello vamos a utilizar la función Offset:

Numero = .Range(nCol).Offset(0, 1)

El resto ya es ir cerrando las dos instrucciones y proceder a sumar cada coincidencia.

El resultado es el siguiente:

EJERCICIO PRÁCTICO CON LA FUNCIÓN SPLIT Y EL MÉTODO FIND_1

Como habéis podido comprobar, la suma que realiza la función es la correcta.

Podríamos hacerlo con un rango de celdas y su resultado sería el correcto.

Descarga el archivo de ejemplo pulsando en: EJERCICIO PRÁCTICO CON LA FUNCIÓN SPLIT Y EL MÉTODO FIND

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

¿Te ha gustado?, Realiza un comentario.

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .