%20en%20una%20entrada%20de%2018%20d%C3%ADgitos%3F.png)
Se trata de códigos contables de 18 dígitos que contienen múltiples períodos, a modo de separadores. Me gustaría ingresar solo los dígitos sin escribir los puntos. Ejemplo:
112233333444555556
se formatearía automáticamente como
11.22.33333.444.55555.6
He usado esta fórmula:
??"."??"."?????"."???"."?????"."?
que funciona excepto por el último dígito siempre aparece como 0
¿Cómo se debe cambiar este código para aceptar cualquier número ingresado en el último espacio?
Respuesta1
Aquí está el código VBA que monitorea la columna A y agrega los puntos cuando la entrada de texto tiene 18 caracteres. Seleccione toda la columna y el formato sea Texto, luego puede escribir o pegar el código de 18 dígitos.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As String
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Application.EnableEvents = False
If Len(Target) = 18 Then
s = Left(Target, 2) & "." & _
Mid(Target, 3, 2) & "." & _
Mid(Target, 5, 5) & "." & _
Mid(Target, 10, 3) & "." & _
Mid(Target, 13, 5) & "." & _
Right(Target, 1)
Target.Value = s
End If
Application.EnableEvents = True
End If
End Sub
Respuesta2
Como lo menciona @teylyn, Excel sigue la especificación IEEE 754 para números de punto flotante y solo puede almacenar 15 dígitos significativos. La solución alternativa más sencilla y no macro es dividir la fórmula en dos partes (los 15 dígitos situados más a la izquierda y los dígitos restantes más a la derecha).
=TEXT(
LEFT([input], 15), format_left
) &
TEXT(
RIGHT([input], LEN([input]) - 15), format_right
)
es decir
= TEXT(LEFT(A2,15),"00-00-00000-000-000") & TEXT(RIGHT(A2,3),"00-0")
| Account number | Account number (formatted) |
| ------------------ | -------------------------- |
| 112233333444555556 | 11-22-33333-444-55555-6 |