Insertar signo

Hola Fernando !
Quisiera saber como realizar por medio de VBA, un formato personalizado, en el cual pueda insertar el signo " - " entre cada tres posiciones del numero digitado.
Ejemplo :
123456789 separe la cantidad de la siguiente forma 123-456-789
150000000 150-000-000
181515150 181-515-150
Invariablemente tienen que ser 9 dígitos, y que trabaje sobre determinada columna.
Por la atención que prestes a mi correo mil gracias.
Recibe un fuerte abrazo
José

1 respuesta

1
Respuesta de
Hola, José!
En realidad no es tan difícil.
Este sería el código a colocar en el panel de macros de la hoja donde el proceso debe ejecutarse:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'indica rango donde quieres que ocurra:
Enrango = "B1:B888"
Separa = "-"
If Not Intersect(Target, Range(Enrango)) Is Nothing Then
If Not IsEmpty(Target) Then
If Not Target.HasFormula Then
Application.EnableEvents = False
If IsNumeric(Target) Then
'secuencia de separación del número
Texto = Trim(Target.Value)
If InStr(1, Texto, Separa) = 0 Then 'controla si ya está separado o no
Cadena = ""
For posicion = Len(Texto) To 1 Step -1
Carakter = Mid(Texto, posicion, 1)
Cadena = Carakter & Cadena
If (Len(Texto) - posicion + 1) Mod 3 = 0 And posicion <> 1 Then Cadena = Separa & Cadena
Next
Target.Value = Cadena
End If
End If
Application.EnableEvents = True
End If
End If
End If
End Sub
Verás que solo reemplacé la línea que colocaba el prefijo "F-" por la secuencia de separación del número.
Como sólo debe actuar en la celda activa el ciclo Do...Loop Until no es necesario.
En aquella secuencia reemplacé ActiveCell por Target que serían equivalentes pero conviene aprovechar que VBA detecta cual es la celda donde se hizo el cambio.
Obviamente, le agregué la variable que guarda el separador a usar.
Mantuve los controles de intersección de rangos, de que la celda no haya quedado vacía (cuando borras su contenido) y que la celda no tenga una fórmula.
Y le agregué también un control de que sea un número por si tuvieras que ingresar un texto en aquel rango (en cuyo caso no querrías que lo separe con guiones)
Pruébalo y coméntame si funcioné para ti.
Que tengas un gran fin de semana!
Fernando
Efectivamente, como comentas las opciones funcionan de maravilla ya las puse a funcionar y que decir eres un genio, no quiero terminar esta pregunta sin, aclarar otra duda al respecto, pudiera ser posible ejecutar la macro que enviaste por medio de un evento como fue el caso anterior de "concatenar", y que para tal efecto me enviaste el siguiente código :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'indica rango donde quieres que ocurra:
Enrango = "F:F"
If Not Intersect(Target, Range(Enrango)) Is Nothing Then
If Not IsEmpty(Target) Then
If Not Target.HasFormula Then
Application.EnableEvents = False
Target.Value = "F-" & Target
Application.EnableEvents = True
End If
End If
End If
End Sub
Con este código, que enviaste la verdad funciona muy bien y de ser posible quisiera la macro que enviaste se ejecutara por del evento antes señalado
Recibe un fuerte abrazo !
Jose
Hola, José
Supongo, por los ejemplos, que el signo a insertar es el guión, ya que en el enunciado de la pregunta aparecen unos códigos como estos " - &#8220 (comillas y algo entre ellas)
De todos modos la siguiente macro te permite colocar en una variable (separa) el carácter que desees para separar el número:
Sub PoneGuion()
Separa = "-"
Do
'secuencia de separación del número
Texto = Trim(ActiveCell.Value)
If InStr(1, Texto, Separa) = 0 Then 'controla si ya está separado o no
Cadena = ""
For posicion = Len(Texto) To 1 Step -1
Carakter = Mid(Texto, posicion, 1)
Cadena = Carakter & Cadena
If (Len(Texto) - posicion + 1) Mod 3 = 0 And posicion <> 1 Then Cadena = Separa & Cadena
Next
ActiveCell.Value = Cadena
End If
ActiveCell.Offset(1).Select
Loop Until IsEmpty(ActiveCell)
End Sub
---
Este procedimiento coloca el separador indicado cada tres posiciones contados de derecha a izquierda, con lo cual no sólo sirve para números de nueve dígitos sino para otros de cualquier extensión.
Deberás seleccionar la celda con el primer número de la lista y ejecutar la macro PoneGuion.
Esta controla que el número no tenga ya colocado el carácter y se repite hasta encontrar una celda vacía.
---
Explicada la parte difícil de tu pregunta, cabré mencionar que lograrías un efecto similar asignándole a la celda un formato personalizado ("Formato" | "Celda" | "Número" | "Personalizada"") del tipo:
###-###-###
Esto evita modificar el número y lo *muestra* separado con guiones. La ventaja de este método es que es automático (i.e. no hay que ejecutar macro alguna), supuesto que hayas asignado tal formato a la celda previamente.
Espero que te sea de utilidad.
Un abrazo!
Fernando
Estoy en lo dicho eres genio, ya probé tu respuesta, funciona a la perfección, realmente esta rutina corta y efectiva, mde va ser de gran utilidad.
Mil gracias, recibe un fuerte abrazo
Jose
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: