Estadísticas de Google Analytics

    generado por GADWP 

    Material registrado:

    Safe Creative #1709190281730

¿Está mi número en esta lista?

Planteamiento del problema

El problema que pretendemos solucionar con Excel es el siguiente: dada una lista de números de longitud indeterminada contenida en una única celda y teniendo en cuenta que los números van separados por comas, queremos saber si un cierto número está en la lista. Por ejemplo, tenemos esta lista de números:

2,23,6,8,14,57,9,12,6,3,47

Y queremos saber si el número 5 está comprendido en ella.

Soluciones con fórmulas clásicas

Primera solución

La primera función de la biblioteca de Excel que viene a la cabeza es =ENCONTRAR, que nos devuelve la posición del caracter o grupo de caracteres buscados. Pero esta función nos dará problemas en un caso como el expuesto. Observemos que si esa lista de números está en la celda A1 y escribimos en celda A2 la función:

=ENCONTRAR(«5»;A1)

Nos devuelve el valor 11, es decir, está actuando como si encontrara el número 5, ya que nos está devolviendo el 5 del número 57, y eso es un FALSO POSITIVO que no nos interesa. Luego esta primera solución puede dar FALSOS POSITIVOS.

Segunda solución

La segunda solución puede consistir en encontrar primero las posiciones de todas las comas del string, a base de usar consecutivamente la función ENCONTRAR de la forma:

=ENCONTRAR(«,»;$A$13;B14+1)

Suponiendo que el texto original está en A13 y la posición de la coma anterior en B14.

Después podríamos usar =EXTRAER entre cada dos posiciones de comas, luego transformar los strings (todas estas funciones aceptan y devuelven caracteres) a números sin más que sumarles 0, y finalmente usar =CONTAR.SI, que solo nos devolverá 0 si no encuentra el número. Así evitamos los falsos positivos.

Tercera solución

Otra solución que no comento en el video puede empezar por la utilidad TEXTO A COLUMNAS, con la coma como separador, lo que nos cribaría los números y nos permitiría otra vez usar =CONTAR.SI.

Solución con Función Definida por el Usuario

Función que comprueba presencia de número en una lista
 
Function COMPROBARNUMERO(queNumero As Long, queString As String) As Boolean
    'Cribado de la cadena de entrada
    COMPROBARNUMERO = False
    Dim qChars As Long, qComas As Long, i As Long, j As Long
    Dim qNums() As String
    qChars = Len(queString)
    'Contamos el número de comas
    For i = 1 To qChars
        If Mid(queString, i, 1) = "," Then qComas = qComas + 1
    Next i
    'El número de números será el de comas más uno
    ReDim qNums(1 To qComas + 1)
    'Cribemos los números entre las comas
    j = 1
    For i = 1 To qChars
        If Mid(queString, i, 1) = "," Then
            j = j + 1
        Else
            qNums(j) = qNums(j) & Mid(queString, i, 1)
        End If
    Next i
    'Tengo el vector qNums() con mis números cribados
    'Si encuentro coincidencia, entonces mi número está en la cadena
    For i = 1 To UBound(qNums)
        If CStr(queNumero) = qNums(i) Then COMPROBARNUMERO = True
    Next i
End Function

Os propongo como tarea hacer los cambios pertinentes en esta función para que en lugar de comprobar si está o no un número, compruebe si está o no una palabra en cierta lista de palabras separadas por comas.

Comments

This post currently has 2 responses

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Sidebar



"

Si continuas utilizando este sitio, significa que aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar