Всем Добрый день! Подскажите, пожалуйста, как при помощи VBA округлить число до 2 значащих цифр. Насколько я понимаю, значащие цифры - это все цифры от первой слева не равной нулю, до последней записанной цифры справа. При этом нули, следующие из множителя 10 в n-степени не учитываются. Т.е. число 12,0 имеет 3 значащие цифры число 30 имеет 2 значащие цифры число 120*10^3 имеет три значащие цифры число 0,0056 имеет 2 значащие цифры В ячейке Cells(14, 22) = 0,009574. По идее должно быть 0,0096. по факту 0,01 Делал так [vba]
Код
Cells(14, 22) = Round(Cells(14, 22), 2)
[/vba] Что не верно? [p.s.] По ходу Round(...,2) - округление до второго знака после запятой. Можно ли тогда средствами VBA произвести именно округление окруление до 2 значащих цифр???
Всем Добрый день! Подскажите, пожалуйста, как при помощи VBA округлить число до 2 значащих цифр. Насколько я понимаю, значащие цифры - это все цифры от первой слева не равной нулю, до последней записанной цифры справа. При этом нули, следующие из множителя 10 в n-степени не учитываются. Т.е. число 12,0 имеет 3 значащие цифры число 30 имеет 2 значащие цифры число 120*10^3 имеет три значащие цифры число 0,0056 имеет 2 значащие цифры В ячейке Cells(14, 22) = 0,009574. По идее должно быть 0,0096. по факту 0,01 Делал так [vba]
Код
Cells(14, 22) = Round(Cells(14, 22), 2)
[/vba] Что не верно? [p.s.] По ходу Round(...,2) - округление до второго знака после запятой. Можно ли тогда средствами VBA произвести именно округление окруление до 2 значащих цифр???Dмитрий
Сообщение отредактировал Dмитрий - Пятница, 13.06.2014, 12:35
Function rounder#(dVal) Dim t$: t = CStr(dVal) Dim v$, c&, i& Dim start&: start = 1 For i = 1 To Len(t) v = Mid(t, i, 1) If v = "." Then start = i End If If v Like "#" Then If v > 0 Then c = c + 1 End If End If If c = 1 Then rounder = Round(CDbl(t), i - start) Exit Function End If Next End Function
Sub test() Debug.Print rounder(0.009574) End Sub
[/vba]
Не лучший вариант, но работает: [vba]
Код
Function rounder#(dVal) Dim t$: t = CStr(dVal) Dim v$, c&, i& Dim start&: start = 1 For i = 1 To Len(t) v = Mid(t, i, 1) If v = "." Then start = i End If If v Like "#" Then If v > 0 Then c = c + 1 End If End If If c = 1 Then rounder = Round(CDbl(t), i - start) Exit Function End If Next End Function
Ребята, всем СПАСИБО!!! _Boroda_ все верно. Поменять Round на ZnaTs и поместить в модуль одну строчку. Супер, минимум действий. Тему можем закрывать.
Ребята, всем СПАСИБО!!! _Boroda_ все верно. Поменять Round на ZnaTs и поместить в модуль одну строчку. Супер, минимум действий. Тему можем закрывать.Dмитрий