2

Cómo sustituir grupos de números por letras

El otro día recibí en el foro un mensaje en la página de Facebook de AyudaExcel de un usuario que tenía una duda. No suelo resolver las dudas que no se plantean en el foro, pero esta vez hice una excepción.

El usuario dispone de una columna en cuyas celdas se encuentran varias series de números separados por espacios. Cada grupo de números estaba comprendido entre 1 y 100, con un número variable de grupos. Varias personas, aparte de él, debían hacer esa tarea

La duda o consulta que me hacía es que necesitaba sustituir cada cada grupo de números de la celda por una letra diferente atendiendo al criterio de que si estaba comprendido entre 1 y nueve, se debía sustituir por la letra “U” y si era mayor de nueve, por la letra “D”.

Pues manos a la obra.

Al principio pensé en dividir cada celda en columnas utilizando el espacio como separador, y una vez separados los números, crearía una función SI() donde se establecerían los criterios deseados por el usuario y en una columna auxiliar. Se concatenarían los valores devueltos de……..  demasiado enrevesado. Lo dejé.

Este usuario lo que necesita es una función personalizada, ya que el código VBA es mucho más eficiente  deja la hoja de cálculo más limpia que un montón de funciones y columnas auxiliares…. Además, si

Este es la función que escribí. Más abajo te explico el funcionamiento:

Function Sust_Num_Let(c)
' Declaro las variables a utilizar
Dim i As Integer
Dim a As String
Dim texto As String

' Si la celda está vacía, no se ejecuta la función
If Len(Trim(c)) = 0 Then Exit Function
' Bucle que se repite el mismo número de veces
' que caracteres tiene la celda

For i = 1 To Len(c) + 1
    If i > Len(c) Then GoTo Buc
' Se van acumulando números hasta que se encuentra un espacio
    If Mid(c, i, 1) <> " " Then

        a = a & Mid(c, i, 1)
    Else
Buc:
' Aquí establezco los criterios dados por el usuario
On Error GoTo Error
        If a >= 1 And a <= 9 Then
            texto = texto & "U "
        Else
            texto = texto & "D "
        End If
' Se vacía la variable para que pueda albergar el
' siguiente grupo de números
    a = ""
    End If

Next i

Sust_Num_Let = texto
' Si no existen errores, aquí termina la función
Exit Function

' Si se encuentran caracteres no numéricos en la celda,
' se produce un error que se gestiona con las siguientes líneas

Error:
Er = MsgBox("Solo se pueden evaluar números", , "Error")

End Function

Después de declarar las variables, se crear un bucle que cada vez que se ejecuta, agrupa los números y determina si cumple las condiciones. Dependiendo de si las cumple o no, se va agregando una letra diferente por cada grupo de números.

La función gestiona los posibles errores que se pueden dar si un usuario introduce una letra en la celda o si finaliza el contenido con un espacio.

El resultado final es una cadena de texto.

¿Te ha parecido útil el artículo? ¡Comenta!

 

Sustituir números por letras
Título: Sustituir números por letras (163 clics)
Tamaño: 18 KB

¡Compartir es vivir!
Sergio
 

La destreza y el perfeccionismo quizá sean las dos virtudes que me permiten ayudar a mis clientes a facilitar las tareas administrativas de sus negocios.

Haz clic aquí para dejar un comentario 2 comentarios
Crisanto De la Rosa Mendiola

Otra forma quizás más elegante podría ser:
Public Function traduce(p As String)
Dim arr() As String
Dim cade As String
arr = Split(p)
cade = «»
For Each num In arr
If Not IsNumeric(num) Then
Er = MsgBox(«Solo se pueden evaluar números», , «Error»)
Exit Function
End If
If num > 9 Then cade = cade & «D » Else cade = cade & «U »
Next
traduce = cade
End Function

Responder
Moises Guzman

Muy buena, excelente funcion
Gracias

Responder

Escribe una respuesta: