Necesito ayuda con mi función para mostrar nombres de Microsoft Excel

Tengo otras dos dudas haber si me pueden ayudar, estoy escribiendo una
función que al leer un nombre si tiene ciertos nombres los quite y me tome
como valor del nombre lo que reste, el código lo escribí así pero al
probarlo no me aparece nada a lo mejor las instrucciones están mal, si lo covierto en una macro si funciona solo eol nombreadepurar hago referencia a una celda y el resultado nombredepurado también hago la referencia a una celda.
Function Depurar(NombreADepurar As String)
IF (Mid(NombreADepurar, 1, 6)) = "DE LA "
KK = 7
ELSEIF (Mid(NombreADepurar, 1, 3)) = "DE "
KK = 4
ELSEIF(Mid(NombreADepurar, 1, 2)) = "Y "
KK = 3
ELSEIF (Mid(NombreADepurar, 1, 4)) = "DEL "
KK = 5
ELSEIF(Mid(NombreADepurar, 1, 10)) = "MA DE LOS "
KK = 11
ELSEIF (Mid(NombreADepurar, 1, 9)) = "MA DE LA "
KK = 10
ELSEIF (Mid(NombreADepurar, 1, 7)) = "MA DEL "
KK = 8
ELSEIF (Mid(NombreADepurar, 1, 12)) = "MARIA DE LA "
KK = 13
ELSEIF (Mid(NombreADepurar, 1, 9)) = "MARIA DE "
KK = 10
ELSEIF (Mid(NombreADepurar, 1, 10)) = "MARIA DEL "
KK = 11
ELSEIF(Mid(NombreADepurar, 1, 6)) = "MARIA "
KK = 7
ELSEIF (Mid(NombreADepurar, 1, 5)) = "JOSE "
KK = 6
ELSEIF (Mid(NombreADepurar, 1, 8)) = "JOSE DE "
KK = 9
Else
KK = 1
End Select
NOMBREDEPURADO = Mid(NombreADepurar, KK, 30)
End Function
DE ESTA FORMA SI CORRE COMO UNA MACRO NORMAL AL AGREGARLE UN VALOR A
"nombreadepurar" y al nombredepurado donde me pondrá el valor, de esa forma
si corre, pero con esta función no hace nada.
Y en esta función a partir de un numero quiero extraer los dos últimos
numero y si este es menor a 10 que me agregue un cero al izquierda de valor
para que me quede si es 1 por decir sea 01 si es 0 que sea 00
Function dos(numero As Long) As String
Dim RES As Long
For i = 2 To Len(numero)
RES = Right(numero, 2)
If RES < 10 Then
RES = 0 & numero
End If
End Function
Muchas gracias espero que me puedan ayudar
1

1 respuesta

Respuesta
1
En ambos casos tienes que considerar que al terminar el procesod e una función el resultado debe guardarse en una variable *con el mismo nombre que la función*
Así tu segunda función debería ser como esta:
Function dos(numero As Long) As String
dos = Format(Right(numero, 2), "00")
End Function
---
Teniendo en cuenta aquella consideración, otro tanto ocurre en tu primera función.
Pero hay un par de correcciones que hacerle para que funcione:
- Todas las lineas de código que empiezan con "If" o "ElseIf" deben terminar con "Then"
- Una instrucción IF finaliza con End If (no con End Select)
Adicionalmente le agregué una que convierte temporalmente el nombre a mayúsculas por si, eventualmente, hubiera algunos que no lo estuvieran)
La función que funciona sería esta:
Function Depurar(NombreADepurar As String)
Application.Volatile ' Recalcula función cuando cambia argumento
If UCase(Mid(NombreADepurar, 1, 6)) = "DE LA " Then 'faltaba "Then" (en todas)
KK = 7
ElseIf UCase(Mid(NombreADepurar, 1, 3)) = "DE " Then ' Convierte a Mayusculas en caso de que haya algunos nombres que no lo estén
KK = 4
ElseIf UCase(Mid(NombreADepurar, 1, 2)) = "Y " Then
KK = 3
ElseIf UCase(Mid(NombreADepurar, 1, 4)) = "DEL " Then
KK = 5
ElseIf UCase(Mid(NombreADepurar, 1, 10)) = "MA DE LOS " Then
KK = 11
ElseIf UCase(Mid(NombreADepurar, 1, 9)) = "MA DE LA " Then
KK = 10
ElseIf UCase(Mid(NombreADepurar, 1, 7)) = "MA DEL " Then
KK = 8
ElseIf UCase(Mid(NombreADepurar, 1, 12)) = "MARIA DE LA " Then
KK = 13
ElseIf UCase(Mid(NombreADepurar, 1, 9)) = "MARIA DE " Then
KK = 10
ElseIf UCase(Mid(NombreADepurar, 1, 10)) = "MARIA DEL " Then
KK = 11
ElseIf UCase(Mid(NombreADepurar, 1, 6)) = "MARIA " Then
KK = 7
ElseIf UCase(Mid(NombreADepurar, 1, 5)) = "JOSE " Then
KK = 6
ElseIf UCase(Mid(NombreADepurar, 1, 8)) = "JOSE DE " Then
KK = 9
Else
KK = 1
End If 'decía End Select
Depurar = Trim(Mid(NombreADepurar, KK, 30)) ' el resultado de este proceso, debe alojarse en una variable con el mismo nombre que la función
End Function
Espero que esto te aude a completar tu proyecto.
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas