personalizados personalizado paso para numero miles llenar hacer formatos formato como codigos celdas excel format

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:

  1. Si "/" está ausente y la longitud del número es menor que 6, agregue ceros al comienzo.
  2. Si "/" está presente y la longitud del número antes de "/" es menor que 6, agregue ceros al comienzo.
  3. Si "/" está presente y la longitud del número después de "/" es 1, agregue cero antes del último carácter.
  4. Si "/" está presente y la longitud del número después de "/" es 2, déjalo tal como está.
  5. 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