** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - CAMBIAR LETRA POR NUMERO
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCAMBIAR LETRA POR NUMERO

 Responder Responder
Autor
Mensaje
jebcarlos Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Julio/2006
Localización: Colombia
Estado: Sin conexión
Puntos: 227
Enlace directo a este mensaje Tema: CAMBIAR LETRA POR NUMERO
    Enviado: 06/Abril/2019 a las 06:43
Buenas, mi inquietud es la siguiente tengo un campo de texto con varios valores

Texto1   Texto2
A1234
AB5637
P5639
123456

Y lo que pretendo es reemplazar los valores de las letras del alfabeto por un numero del 1 al 22
y en el campo Texto2 que me quede algo así

Texto1      Texto2
A1234       11234
AB5637     125637
P5639       165639
123456     123456 (este no tiene cambios)

Esto con el fin de crear una clave única (tipo numerico) al concatenar dicho resultado con otro valor
unico

Buscando he encontrado esta función para excel pero que tambien funciona en access. Solo que me extrae los numeros


Function EXTRAENUM(cadena As String)
 
'Variable numeros contendrá solo números de la cadena
Dim numeros As String
numeros = ""
 
'Recorrer la cadena
For i = 1 To Len(cadena)
    
    'Evaluar SI el carácter actual es un número
    If IsNumeric(Mid(cadena, i, 1)) Then
        
        'Concatenar valor numérico a la variable numeros
        numeros = numeros & Mid(cadena, i, 1)
    
    End If
Next
 
'Devolver los números encontrados
EXTRAENUM = numeros
 
End Function.

Pero como la adapto para que en caso que no sea numerico.

osea que me quede mas o menos así


Function EXTRAENUM(cadena As String)
 Dim numeros As String
numeros = ""
ALFABETOESP = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ")

'Recorrer la cadena
For i = 1 To Len(cadena)
    
    'Evaluar SI el carácter actual es un número
    If IsNumeric(Mid(cadena, i, 1)) Then
        
        'Concatenar valor numérico a la variable numeros
        numeros = numeros & Mid(cadena, i, 1)
       
       ElseIf (Mid(cadena, i, 1)) = ALFABETOESP Then numeros = numeros & InStr(1, cadena, ALFABETOESP)
    
    End If
Next
 
'Devolver los números encontrados
EXTRAENUM = numeros
 
End Function.







Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 10841
Enlace directo a este mensaje Enviado: 06/Abril/2019 a las 09:32
Yo recorrería la cadena con:

    For i = 1 to len(cadena)

Cogería el carácter con mid$ y lo analizaría con un SELECT CASE:

- si está comprendido entre 0 y 9 lo añadiría a la cadena
- si está comprendido entre la A y Z añadiría a la cadena su valor ascii (ASC) menos 64 (la A equivale es el valor ASCII 65)
- si no es ni número ni letra lo ignoraría y buscaría el siguiente carácter
- antes de nada convierte la cadena a mayúsculas ya que la "a" tiene un valor distinto a la "A"


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
jebcarlos Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Julio/2006
Localización: Colombia
Estado: Sin conexión
Puntos: 227
Enlace directo a este mensaje Enviado: 06/Abril/2019 a las 16:01
Mihura gracias. Aca voy.

Function EXTRAENUM1(cadena As String)
 
'Variable numeros contendrá solo números de la cadena
Dim numeros As String
numeros = ""
 
'Recorrer la cadena
For i = 1 To Len(cadena)
   
   
    Select Case (Mid$(cadena, i, 1))
    Case 0 To 9
       numeros = numeros & Mid(cadena, i, 1)
     Case "A" To "Z"
       numeros = numeros & Asc(Mid(cadena, i, 1)) - 64
    
     Case Else
      MsgBox "HAY UN ERROR EN EL CAMPO FAVOR VERIFIQUE"
      Exit Function
     End Select
   
Next
 
'Devolver los números encontrados
EXTRAENUM1 = numeros
 
End Function

He hecho algunas pruebas pero me gustaria otra opinión si se puede mejorar, hay algún ERROR, etc.

Ademas como lo adecuo para ejecutarlo en una consulta pues ya tengo informaió y me gustaria actualizar masivamene este campo


Editado por jebcarlos - 06/Abril/2019 a las 16:09
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 10841
Enlace directo a este mensaje Enviado: 06/Abril/2019 a las 16:40
Cambia la definición de la función a:

Function EXTRAENUM1(Byval Cadena as string) AS string
.
.




Para llamar a la función en una consulta de actualización tendrás que decirle que el campo AAA se actualiza al valor EXTRAENUM([AAA]), el Intelisense de access solo encontrará la función y te la propondrá.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
jebcarlos Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Julio/2006
Localización: Colombia
Estado: Sin conexión
Puntos: 227
Enlace directo a este mensaje Enviado: 06/Abril/2019 a las 22:12
Ok Mihura, gracias funciona perefectamente.  Se puede cerrar el hilo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable