Option Explicit
Sub Number_Format()
Dim NumberFormat As String, PosNumberFormat As String
Dim Myrange As Range
Dim cel As Range
On Error Resume Next
Set Myrange = Intersect(ActiveSheet.UsedRange, ActiveSheet.Cells.SpecialCells(xlFormulas))
If Myrange Is Nothing Then
Set Myrange = Intersect(ActiveSheet.UsedRange, ActiveSheet.Cells.SpecialCells(xlConstants, xlNumbers))
Else
Set Myrange = Union(Myrange, Intersect(ActiveSheet.UsedRange, ActiveSheet.Cells.SpecialCells(xlConstants)))
End If
If Myrange Is Nothing Then
MsgBox "There are no constants or formulas on this sheet" & vbNewLine & "The macro will now exit"
Exit Sub
Else
Set Myrange = Union(Myrange, Intersect(ActiveSheet.UsedRange, ActiveSheet.Cells.SpecialCells(xlBlanks)))
End If
On Error GoTo 0
If Myrange Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each cel In Myrange
If IsNumeric(cel) And Not IsDate(cel) And InStr(1, cel.Text, ":") = 0 Then
NumberFormat = cel.NumberFormat
Select Case NumberFormat
Case "General"
Case Else
If InStr(NumberFormat, ";") = 0 And InStr(NumberFormat, "]") = 0 Then
NumberFormat = NumberFormat & ";[Red](-" & NumberFormat & ");""-""??"
ElseIf InStr(NumberFormat, "[Red](-") = 0 Or InStr(NumberFormat, " - ") = 0 Then
If InStr(NumberFormat, ";") <> 0 Then
PosNumberFormat = Left(NumberFormat, InStr(NumberFormat, ";") - 1)
Else
PosNumberFormat = NumberFormat
End If
PosNumberFormat = Right(PosNumberFormat, Len(PosNumberFormat) - InStr(PosNumberFormat, "]"))
NumberFormat = PosNumberFormat & ";[Red](-" & PosNumberFormat & ");""-""??"
End If
cel.NumberFormat = NumberFormat
End Select
End If
Next
Application.ScreenUpdating = True
End Sub
|