我正在写一个excel vba宏。
我有一个超过10,000行的大型工作表。
其中一列具有以下格式的日期:10/28/13 06:57
,其中单元格具有用于格式化的常规编号。
我想将其格式化为只有这种格式的四位数:mmdd
(上例中为1028)
以下是我到目前为止在子程序中的内容:
' 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
答案 0 :(得分:5)
我认为您发布的代码没有任何问题,所以我不太确定您要做的是什么,或者您当前的努力失败了,但您不需要{{1} }循环执行此操作,您可以将For/Next
属性应用于整个范围:
NumberFormat
答案 1 :(得分:3)
您无法使用mmdd
数字格式对其进行格式化。至少它对我不起作用。 (Excel 2010 / Win 7 欧洲区域设置)
我建议它添加一个额外的列并复制数据以保留原始格式,然后将该列隐藏到最后。同时,您可以使用Month()
和Day()
函数来创建所需的格式。
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
如果您不想添加额外的列,但您不介意丢失原始格式,那么您只需使用此代码替换单元格的内容
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