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!
2 comentarios en “Cómo sustituir grupos de números por letras”
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
Muy buena, excelente funcion
Gracias
Los comentarios están cerrados.