Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Округление до значащих цифр - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Округление до значащих цифр (Макросы/Sub)
Округление до значащих цифр
Dмитрий Дата: Пятница, 13.06.2014, 12:27 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 9 ±
Замечаний: 40% ±

Excel 2010
Всем Добрый день! Подскажите, пожалуйста, как при помощи 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митрий - Пятница, 13.06.2014, 12:35
 
Ответить
СообщениеВсем Добрый день! Подскажите, пожалуйста, как при помощи 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митрий
Дата добавления - 13.06.2014 в 12:27
Michael_S Дата: Пятница, 13.06.2014, 12:36 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Что не верн
отсутствие примера в файле. С разными значениями исходного и результата.
 
Ответить
Сообщение
Что не верн
отсутствие примера в файле. С разными значениями исходного и результата.

Автор - Michael_S
Дата добавления - 13.06.2014 в 12:36
Dмитрий Дата: Пятница, 13.06.2014, 12:51 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 9 ±
Замечаний: 40% ±

Excel 2010
Вот, сделал набросок
К сообщению приложен файл: 0095699.xlsb (20.3 Kb)
 
Ответить
СообщениеВот, сделал набросок

Автор - Dмитрий
Дата добавления - 13.06.2014 в 12:51
SkyPro Дата: Пятница, 13.06.2014, 13:20 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Не лучший вариант, но работает:
[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

Sub test()
Debug.Print rounder(0.009574)
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Пятница, 13.06.2014, 13:20
 
Ответить
СообщениеНе лучший вариант, но работает:
[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

Sub test()
Debug.Print rounder(0.009574)
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 13.06.2014 в 13:20
Michael_S Дата: Пятница, 13.06.2014, 15:01 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Из примера не понятно:
1,000000259 = 1,00000026 или 1,0?
16,67001 = 16,67 или 17
12547,01 =12547,01 или 13000?


Сообщение отредактировал Michael_S - Пятница, 13.06.2014, 15:02
 
Ответить
СообщениеИз примера не понятно:
1,000000259 = 1,00000026 или 1,0?
16,67001 = 16,67 или 17
12547,01 =12547,01 или 13000?

Автор - Michael_S
Дата добавления - 13.06.2014 в 15:01
_Boroda_ Дата: Пятница, 13.06.2014, 15:03 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А может, вот так?
[vba]
Код
Function ZnaTs(r, n)
ZnaTs = --Format(r, "0." & WorksheetFunction.Rept(0, n - 1) & "E+00")
End Function
[/vba]
Насколько я понял, значащие цифры - это кол-во цифр при представлении числа экспоненциальной форме с одной цифрой перед запятой
ссылка
К сообщению приложен файл: 0095699_1.xlsb (22.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА может, вот так?
[vba]
Код
Function ZnaTs(r, n)
ZnaTs = --Format(r, "0." & WorksheetFunction.Rept(0, n - 1) & "E+00")
End Function
[/vba]
Насколько я понял, значащие цифры - это кол-во цифр при представлении числа экспоненциальной форме с одной цифрой перед запятой
ссылка

Автор - _Boroda_
Дата добавления - 13.06.2014 в 15:03
Dмитрий Дата: Пятница, 13.06.2014, 17:23 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 9 ±
Замечаний: 40% ±

Excel 2010
Ребята, всем СПАСИБО!!!
_Boroda_ все верно. Поменять Round на ZnaTs и поместить в модуль одну строчку. Супер, минимум действий. Тему можем закрывать.
 
Ответить
СообщениеРебята, всем СПАСИБО!!!
_Boroda_ все верно. Поменять Round на ZnaTs и поместить в модуль одну строчку. Супер, минимум действий. Тему можем закрывать.

Автор - Dмитрий
Дата добавления - 13.06.2014 в 17:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Округление до значащих цифр (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!