paso - formato personalizado kg excel
Formato personalizado de Excel Verificar el personaje (1)
Lo que necesito es un formato personalizado para cambiar los valores de acuerdo con estas reglas:
- Si "/" está ausente y la longitud del número es menor que 6, agregue ceros al comienzo.
- Si "/" está presente y la longitud del número antes de "/" es menor que 6, agregue ceros al comienzo.
- Si "/" está presente y la longitud del número después de "/" es 1, agregue cero antes del último carácter.
- Si "/" está presente y la longitud del número después de "/" es 2, déjalo tal como está.
- La longitud total de la cuerda con "/" sería 8, sin ella - 6
Datos sin formato:
-534
1083
386840/2
12345/10
Resultado deseado:
000534
001083
38684002
01234510
Lo que surgió hasta ahora:
000000; 000000; 0 es una parte bastante obvia, el valor sin "/" se leerá como número de todos modos. Si fuera un número, usaría [>1000]0
o algo por el estilo, pero no funciona con Text
hasta donde yo entendía.
Fórmula que estoy usando (solo por ahora) en lugar del formato personalizado deseable:
=IF(ISERROR(FIND("/";A1));
CONCATENATE(REPT("0";6-LEN(A1));A1);
IF((LEN(A1)-FIND("/";A1))=1;
SUBSTITUTE(CONCATENATE(REPT("0";7-FIND("/";A1));A1);"/";"0");
SUBSTITUTE(CONCATENATE(REPT("0";7-FIND("/";A1));A1);"/";"")))
¿Alguien puede darme una pista?
Aquí hay una forma de lograr lo que quiere usando NumberFormat
. El formato de número apropiado es generado por el código de evento de VBA.
Existe una GRAN desventaja en el sentido de que necesitará un formato de número diferente para cada entrada única que contenga un "/"
, y la cantidad de formatos de números permitidos puede ser limitante.
Sin embargo, no requiere columnas auxiliares, y no altera los datos originales almacenados en la celda.
Todo lo que se ingrese en la columna A se formateará de acuerdo con las reglas. Si hay una barra inclinada, el código alterará las secciones numéricas; pero no prueba para ver que ambos son numéricos. Entonces abc/1
-> abc01
, pero puedes cambiar eso si quieres.
Este es el código de la Hoja de trabajo:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim FormatRange As Range, C As Range
Const Fmt As String = "000000;000000;000000;@"
Dim V As Variant
Set FormatRange = Range("A:A")
If Not Intersect(Target, FormatRange) Is Nothing Then
For Each C In Intersect(Target, FormatRange)
If InStr(C.Text, "/") = 0 Then
C.NumberFormat = Fmt
Else
V = Split(C.Text, "/")
V(0) = Format(V(0), "000000")
V(1) = Format(V(1), "00")
C.NumberFormat = ";;;" & Chr(34) & Join(V, "") & Chr(34)
End If
Next C
End If
End Sub