Sub iMinus() Dim cell As Range Dim n As Integer Dim flag As Boolean Dim temp As String For Each cell In Range("A1").CurrentRegion If InStr(1, cell, "-") = Len(cell) Then cell = Trim(Replace(cell, ".", ",")) flag = False For n = Len(cell) To 1 Step -1 If flag Then If Mid(cell, n, 1) = "," Then temp = cell Mid(temp, n, 1) = " " cell = temp End If Else If Mid(cell, n, 1) = "," Then flag = True End If End If Next cell = Mid(cell, 1, Len(cell) - 1) * (-1) End If Next End Sub
[/vba]
А так, проверьте [vba]
Код
Sub iMinus() Dim cell As Range Dim n As Integer Dim flag As Boolean Dim temp As String For Each cell In Range("A1").CurrentRegion If InStr(1, cell, "-") = Len(cell) Then cell = Trim(Replace(cell, ".", ",")) flag = False For n = Len(cell) To 1 Step -1 If flag Then If Mid(cell, n, 1) = "," Then temp = cell Mid(temp, n, 1) = " " cell = temp End If Else If Mid(cell, n, 1) = "," Then flag = True End If End If Next cell = Mid(cell, 1, Len(cell) - 1) * (-1) End If Next End Sub
спотыкается о первое число c разделителем групп разрядов ",", потом о число с несколькими разделителями групп разрядом и также удаляет ".", что лишнее в моем случае )
В целом вариант, предложеный Timber_Wolf, работает, так что наверное можно считать вопрос закрытым. Спасибо еще раз всем.
спотыкается о первое число c разделителем групп разрядов ",", потом о число с несколькими разделителями групп разрядом и также удаляет ".", что лишнее в моем случае )
В целом вариант, предложеный Timber_Wolf, работает, так что наверное можно считать вопрос закрытым. Спасибо еще раз всем.user0
В числах, записанныф в формате "#,##0.00". А в формате "# ##0,00" пропадает. Для любых чисел, включая числа в текстовом формате, содержащие пробел, или неразрывный пробел (как любит 1С выгружать) при русских или американских системных разделителях. [vba]
Код
Sub RestoreNumbers() Dim ar, sValue$, sVal# Dim i&, j& ar = [a1].CurrentRegion.Value On Error Resume Next For i = 1 To UBound(ar) For j = 1 To UBound(ar, 2) If Err Then Err.Clear sValue = Replace(Replace(ar(i, j), Chr(32), ""), Chr(160), "") If Len(sValue) Then ar(i, j) = CDbl(ar(i, j)) If Err Then Err.Clear sVal = Val(Replace(sValue, ",", "")) If sVal <> 0 Then ar(i, j) = IIf(Len(sVal) = Len(sValue), sVal, -sVal) End If End If End If Next Next [a1].Resize(UBound(ar), UBound(ar, 2)) = ar End Sub
В числах, записанныф в формате "#,##0.00". А в формате "# ##0,00" пропадает. Для любых чисел, включая числа в текстовом формате, содержащие пробел, или неразрывный пробел (как любит 1С выгружать) при русских или американских системных разделителях. [vba]
Код
Sub RestoreNumbers() Dim ar, sValue$, sVal# Dim i&, j& ar = [a1].CurrentRegion.Value On Error Resume Next For i = 1 To UBound(ar) For j = 1 To UBound(ar, 2) If Err Then Err.Clear sValue = Replace(Replace(ar(i, j), Chr(32), ""), Chr(160), "") If Len(sValue) Then ar(i, j) = CDbl(ar(i, j)) If Err Then Err.Clear sVal = Val(Replace(sValue, ",", "")) If sVal <> 0 Then ar(i, j) = IIf(Len(sVal) = Len(sValue), sVal, -sVal) End If End If End If Next Next [a1].Resize(UBound(ar), UBound(ar, 2)) = ar End Sub