I suspect this would be fairly simple, but I am missing it. I am simply trying to take a number that is formatted in a time format and changing them all to seconds, so I can work with the same units. The original value is formatted with decimals, like 1.234.567.890, and it will be designated at (ns), (us), (ms), etc. So the first thing I need to do is replace all except the first decimal. I am trying to use the replace function for that. But it is replacing all, despite the starting number I am entering.
Dim myArray() As VariantDim NumText As StringDim DecPos As IntegerDim i as longi = 0ReDim myArray(Selection.Count)For Each cel In Selection myArray(i) = cel.Value i = i + 1NextFor i = LBound(myArray) To UBound(myArray)NumText = myArray(i)DecPos = InStr(1, NumText, ".")If DecPos > 0 Then If InStr(1, (Right(NumText, Len(NumText) - DecPos)), ".") > 0 Then NumText = Replace(NumText, ".", "", Start:=DecPos + 1) End IfEnd If
So NumText starts as '1.412.877.593 (s)', but after the replace function, it is '412877593 (s)'. What happened to the "1." at the beginning?
Thanks,
Elena
VBAVisual Basic Classic
Last Comment
Patrick Matthews
8/22/2022 - Mon
Patrick Matthews
Not sure why you would need to keep the first decimal point, but this function does it:
Function KeepOnlyFirstDecimal(InputStr As String) Dim arr As Variant Dim Counter As Long If InputStr <> "" Then arr = Split(InputStr, ".") If UBound(arr) > 0 Then KeepOnlyFirstDecimal = arr(0) & "." & arr(1) For Counter = 2 To UBound(arr) KeepOnlyFirstDecimal = KeepOnlyFirstDecimal & arr(Counter) Next Else KeepOnlyFirstDecimal = InputStr End If Else KeepOnlyFirstDecimal = InputStr End IfEnd Function
Open in new window