I’m looking for a code that will convert the format of cells for large amount of cells with numbers. The procedure I apply is that I write the number “1” to an empty cell, copy it and then multiply the whole selection, where numbers are stored as text. That is really fast compared to the automatic “Convert to Number” suggestion which offers Excel (which takes ages for a Selection of 1000+ cells).
I wrote this macro (it works, but is not as fast as the above mentioned procedure):
Option Explicit Sub nasobeni() Dim cell As Range Dim one As Integer one = 1 For Each cell In Selection cell.value = cell.value * one Next Application.CutCopyMode = False Selection.NumberFormat = "0" End Sub
Has anybody some suggestion, which would speed up this process?
After setting the range and changing the format, merely write the Value back to the range.
Option Explicit Sub colaTextToNumbers() Dim R As Range 'Can be set in many different ways Set R = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)) 'for column A 'Set R = Selection 'Set R = whatever With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With With R .EntireColumn.NumberFormat = "General" 'or could limit this just to R, not entire column .Value = .Value End With With Application .ScreenUpdating = True .EnableEvents = True .Calculation = xlCalculationAutomatic End With End Sub
Ensure a General cell number format then Text to Columns, Fixed width, Finish.
with selection.columns(1) .numberformat = "General" .TextToColumns Destination:=.cells(1), DataType:=xlFixedWidth, FieldInfo:=Array(0, 1) end with
Text to Columns can only process one column at a time but it is a small matter to cycle through columns.
dim i as long with selection .numberformat = "General" for i=1 to .columns.count .columns(i).TextToColumns Destination:=.columns(i).cells(1), DataType:=xlFixedWidth, FieldInfo:=Array(0, 1) end with end with