I am using this function to convert *"numbers formatted as strings"* to numbers.

```
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' **Occurence:**
' This function is used in multiple handlers.
'
' **Summary:**
' This function iterates over all the (a) rows & columns in the 1st table
' on the sheet. It checks non-empty values. If value is not formatted as
' to the table while *"numbers formated as text"* are converted to
' `Double` and added to the array. At the end this array is written back
' to the table while *"numbers formated as text"* are converted to `Double`.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function remove_numbers_formated_as_text(ByVal sh As Worksheet)
Dim r As Range
Dim arr As Variant
Dim i As Long '''' arr's rows
Dim j As Long '''' arr's columns
Dim s As String
Dim b As Boolean
Set r = sh.ListObjects(1).DataBodyRange
arr = r.Formula2
'''' Iterate over a whole row and then proceed to next column
For i = 1 To UBound(arr)
For j = 1 To UBound(arr, 2)
If IsEmpty(arr(i, j)) = False Then
'''' Check whether array mamber stores formula
b = r(i, j).HasFormula
If b = True Then GoTo A
'''' If cell doesn't treat numbers as text and is a numeric value,
'''' then this is definitely a measurement that somebody entered and
'''' it is therefore converted to double.
s = r(i, j).NumberFormat
If IsNumeric(arr(i, j)) And s <> "@" Then
arr(i, j) = CDbl(arr(i, j))
End If
End If
A:
Next
Next
r.Formula2 = arr
End Function
```

I thought that this works, but it does not. Original array stores everything as `Variant/Strings`

, e.g. `"0.544502556324005"`

but after these values are modified by `CDbl()`

, they become a `Variant/Double`

but they loose decimal separator, becoming e.g. `544502556324005`

. So data get's corrupted...

Why are decimal separators removed? Any idea how to solve this? Or if anyone has some idea on how to convert *"numbers formated as strings"* better...