Formato de la columna con la date al formatting específico – Excel VBA

Estoy escribiendo una macro excel vba.

Tengo una hoja de trabajo grande con más de 10,000 filas. Una de las columnas tiene la date en este formatting: 10/28/13 06:57 con las celdas que tienen un número general para formatear.

Me gustaría formatearlo para tener solo cuatro dígitos en este formatting: mmdd (1028 para el ejemplo anterior)

Esto es lo que tengo hasta ahora en la subrutina:

 ' This subroutine formats the columns to what is necessary for output Sub formatColumns() ' Set the LastRow variable to hold the last row number lastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row Dim cell As Range For Each cell In Range("B3:B" & lastRow) cell.NumberFormat = "mmdd;@" Next End Sub 

Realmente no se puede formatear de esa manera usando ese formatting de número mmdd . Al less no funciona para mí. (Excel 2010 / Win 7 Configuración regional europea )

Lo que sugeriría es agregar una columna adicional y copyr los datos para mantener el formatting original y luego ocultar esa columna al final. Mientras tanto, usaría las funciones Month() y Day() para crear el formatting deseado.

 Sub formatColumns() Dim lastRow As Long ' Set the LastRow variable to hold the last row number lastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row Dim cell As Range For Each cell In Range("B3:B" & lastRow) 'cell.NumberFormat = "mmdd;@" cell.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove cell.Offset(0, -1).NumberFormat = "@" cell.Offset(0, -1) = _ IIf(Len(Month(cell)) = 1, "0" & Month(cell), Month(cell)) & _ IIf(Len(Day(cell)) = 1, "0" & Day(cell), Day(cell)) Next Columns("C:C").EntireColumn.Hidden = True End Sub 

si no desea agregar una columna adicional pero no le importa perder el formatting original, entonces puede simplemente replace el contenido de las celdas usando este código

 Sub formatColumns() Dim lastRow As Long ' Set the LastRow variable to hold the last row number lastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row Dim cell As Range For Each cell In Range("B3:B" & lastRow) 'cell.NumberFormat = "mmdd;@" cell = IIf(Len(Month(cell)) = 1, "0" & Month(cell), Month(cell)) & _ IIf(Len(Day(cell)) = 1, "0" & Day(cell), Day(cell)) Next End Sub 

No creo que haya nada de malo en el código que ha publicado, así que no estoy muy seguro de lo que está intentando hacer o de dónde está fallando su esfuerzo actual, pero no necesita un ciclo For/Next para hacer esto. , puede aplicar la propiedad NumberFormat a todo el range:

 Sub formatColumns() Dim lastRow as Long ' Set the LastRow variable to hold the last row number lastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row Range("B3:B" & lastRow).NumberFormat = "mmdd" End Sub