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

Вход

Регистрация

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

 

= Мир MS Excel/Странность UDF? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Странность UDF?
Serge_007 Дата: Вторник, 06.09.2011, 16:13 | Сообщение № 1
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Всем доброго дня.

Написал простую функцию, которая вычетает НДС из числа:
[vba]
Код
Function БЕЗ_НДС(Значение As Integer) As Integer
    БЕЗ_НДС = Значение / 1.18
End Function
[/vba]

Почему в ячейке D3 она работает, а в D2 - нет?
К сообщению приложен файл: Without_VAT.xls (31.0 Kb)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеВсем доброго дня.

Написал простую функцию, которая вычетает НДС из числа:
[vba]
Код
Function БЕЗ_НДС(Значение As Integer) As Integer
    БЕЗ_НДС = Значение / 1.18
End Function
[/vba]

Почему в ячейке D3 она работает, а в D2 - нет?

Автор - Serge_007
Дата добавления - 06.09.2011 в 16:13
Hugo Дата: Вторник, 06.09.2011, 16:18 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
[vba]
Код
Function БЕЗ_НДС(Значение As Double) As Double
     БЕЗ_НДС = Значение / 1.18
End Function
[/vba]

хотя As Long тоже работает. А Integer маловато...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение[vba]
Код
Function БЕЗ_НДС(Значение As Double) As Double
     БЕЗ_НДС = Значение / 1.18
End Function
[/vba]

хотя As Long тоже работает. А Integer маловато...

Автор - Hugo
Дата добавления - 06.09.2011 в 16:18
KuklP Дата: Вторник, 06.09.2011, 16:19 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Потому, что число 908600 в интегер не влазит. И почему интегер, а дробная часть? Пробуй:
[vba]
Код
Function БЕЗ_НДС(Значение!) As Single
    БЕЗ_НДС = Значение / 1.18
End Function
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеПотому, что число 908600 в интегер не влазит. И почему интегер, а дробная часть? Пробуй:
[vba]
Код
Function БЕЗ_НДС(Значение!) As Single
    БЕЗ_НДС = Значение / 1.18
End Function
[/vba]

Автор - KuklP
Дата добавления - 06.09.2011 в 16:19
Serge_007 Дата: Вторник, 06.09.2011, 16:20 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Hugo)
As Double

Спасибо Игорь, понял свою ошибку smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Hugo)
As Double

Спасибо Игорь, понял свою ошибку smile

Автор - Serge_007
Дата добавления - 06.09.2011 в 16:20
nilem Дата: Вторник, 06.09.2011, 16:21 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
[vba]
Код
Function БЕЗ_НДС(Значение As Double) As Double
     БЕЗ_НДС = Значение / 1.18
End Function
[/vba]
Integer - целые числа с максимальным значением 32000 (с чем-то), поэтому 908000 не воспринимается.
Упс, уже лишнего. Завалили ответами smile


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Вторник, 06.09.2011, 16:22
 
Ответить
Сообщение[vba]
Код
Function БЕЗ_НДС(Значение As Double) As Double
     БЕЗ_НДС = Значение / 1.18
End Function
[/vba]
Integer - целые числа с максимальным значением 32000 (с чем-то), поэтому 908000 не воспринимается.
Упс, уже лишнего. Завалили ответами smile

Автор - nilem
Дата добавления - 06.09.2011 в 16:21
Serge_007 Дата: Вторник, 06.09.2011, 16:22 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (KuklP)
Пробуй

Quote (nilem)
Завалили ответами


Сергей, Николай, спасибо, так тоже работает)
Тема закрыта.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (KuklP)
Пробуй

Quote (nilem)
Завалили ответами


Сергей, Николай, спасибо, так тоже работает)
Тема закрыта.

Автор - Serge_007
Дата добавления - 06.09.2011 в 16:22
KuklP Дата: Вторник, 06.09.2011, 16:22 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Игорь, ну двойная точность для подсчета копеек тоже перегиб:-)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеИгорь, ну двойная точность для подсчета копеек тоже перегиб:-)

Автор - KuklP
Дата добавления - 06.09.2011 в 16:22
Hugo Дата: Вторник, 06.09.2011, 16:25 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Да, точно, всё равно нужно до двух знаков округлять, а то потом бухгалтерия концы не сведёт smile


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеДа, точно, всё равно нужно до двух знаков округлять, а то потом бухгалтерия концы не сведёт smile

Автор - Hugo
Дата добавления - 06.09.2011 в 16:25
Serge_007 Дата: Вторник, 06.09.2011, 16:29 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Hugo)
всё равно нужно до двух знаков округлять

Значит правильнее As Single?

ЗЫ Это не для бухгалтерии wink


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Hugo)
всё равно нужно до двух знаков округлять

Значит правильнее As Single?

ЗЫ Это не для бухгалтерии wink

Автор - Serge_007
Дата добавления - 06.09.2011 в 16:29
KuklP Дата: Вторник, 06.09.2011, 16:35 | Сообщение № 10
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Правильно и так и так. Сингл съест вдвое меньше памяти, вдвое быстрей и вдвое меньше грузит проц. Но для современных машин это не существенно. Из справки:
Quote
Single (single-precision floating-point) variables are stored as IEEE 32-bit (4-byte) floating-point numbers, ranging in value from -3.402823E38 to -1.401298E-45 for negative values and from 1.401298E-45 to 3.402823E38 for positive values. The type-declaration character for Single is the exclamation point (!).

-3.402823E38 представляешь какая точность? Для подсчета копеек и такая не нужна.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Вторник, 06.09.2011, 16:40
 
Ответить
СообщениеПравильно и так и так. Сингл съест вдвое меньше памяти, вдвое быстрей и вдвое меньше грузит проц. Но для современных машин это не существенно. Из справки:
Quote
Single (single-precision floating-point) variables are stored as IEEE 32-bit (4-byte) floating-point numbers, ranging in value from -3.402823E38 to -1.401298E-45 for negative values and from 1.401298E-45 to 3.402823E38 for positive values. The type-declaration character for Single is the exclamation point (!).

-3.402823E38 представляешь какая точность? Для подсчета копеек и такая не нужна.

Автор - KuklP
Дата добавления - 06.09.2011 в 16:35
Hugo Дата: Вторник, 06.09.2011, 16:40 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Прикольно сообщение №3 выглядит, если пост целиком смотреть smile


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПрикольно сообщение №3 выглядит, если пост целиком смотреть smile

Автор - Hugo
Дата добавления - 06.09.2011 в 16:40
KuklP Дата: Вторник, 06.09.2011, 16:42 | Сообщение № 12
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Quote (Hugo)
Прикольно сообщение №3 выглядит, если пост целиком смотреть
А я и не обратил внимания biggrin


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Quote (Hugo)
Прикольно сообщение №3 выглядит, если пост целиком смотреть
А я и не обратил внимания biggrin

Автор - KuklP
Дата добавления - 06.09.2011 в 16:42
_Boroda_ Дата: Вторник, 06.09.2011, 16:43 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16734
Репутация: 6534 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А я бы написал даже так:
[vba]
Код
Function БЕЗ_НДС(Значение As Single) As Single
      БЕЗ_НДС = Round(Round(Значение, 2) / 1.18, 2)
End Function
[/vba]
Сначала приводим "Значение" к двум знакам после запятой, потом делим на 1,18, потом опять приводим к двум знакам


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА я бы написал даже так:
[vba]
Код
Function БЕЗ_НДС(Значение As Single) As Single
      БЕЗ_НДС = Round(Round(Значение, 2) / 1.18, 2)
End Function
[/vba]
Сначала приводим "Значение" к двум знакам после запятой, потом делим на 1,18, потом опять приводим к двум знакам

Автор - _Boroda_
Дата добавления - 06.09.2011 в 16:43
KuklP Дата: Вторник, 06.09.2011, 16:47 | Сообщение № 14
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Саш, а смысл два раза округлять? Только тормоз лишний. К тому же на входе с большой вероятностью будет либо целое - либо и так, с двумя знаками после запятой.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Вторник, 06.09.2011, 16:53
 
Ответить
СообщениеСаш, а смысл два раза округлять? Только тормоз лишний. К тому же на входе с большой вероятностью будет либо целое - либо и так, с двумя знаками после запятой.

Автор - KuklP
Дата добавления - 06.09.2011 в 16:47
Serge_007 Дата: Вторник, 06.09.2011, 17:14 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (KuklP)
Правильно и так и так. Сингл съест вдвое меньше памяти, вдвое быстрей и вдвое меньше грузит проц...

Но правильнее сингл smile
Всем ещё раз спасибо!


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (KuklP)
Правильно и так и так. Сингл съест вдвое меньше памяти, вдвое быстрей и вдвое меньше грузит проц...

Но правильнее сингл smile
Всем ещё раз спасибо!

Автор - Serge_007
Дата добавления - 06.09.2011 в 17:14
RAN Дата: Вторник, 06.09.2011, 20:10 | Сообщение № 16
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Для этого вроде Currency предусмотрен! cool


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеДля этого вроде Currency предусмотрен! cool

Автор - RAN
Дата добавления - 06.09.2011 в 20:10
KuklP Дата: Вторник, 06.09.2011, 21:55 | Сообщение № 17
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Андрюш, ты прав. Но тип Currency ест 64 бита по сравнению с Single 32 - bit. Хотя - в первом случае фиксированная точка, а во втором плавающая. Но поскольку еще, кажется, начиная с 486 процессоров в процессоре был предусмотрен отдельный модуль для обработки чисел с плавающей точкой, все преимущества фиксированной точки заключаются только в величине максимального обрабатываемого числа. Т.е. я хочу сказать, в зависимости от того, что нужно - выбираем нужный тип. Да и то, это критично, если таких расчетов ну очень много. Иначе, как я уже писал
Цитата
для современных машин это не существенно


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеАндрюш, ты прав. Но тип Currency ест 64 бита по сравнению с Single 32 - bit. Хотя - в первом случае фиксированная точка, а во втором плавающая. Но поскольку еще, кажется, начиная с 486 процессоров в процессоре был предусмотрен отдельный модуль для обработки чисел с плавающей точкой, все преимущества фиксированной точки заключаются только в величине максимального обрабатываемого числа. Т.е. я хочу сказать, в зависимости от того, что нужно - выбираем нужный тип. Да и то, это критично, если таких расчетов ну очень много. Иначе, как я уже писал
Цитата
для современных машин это не существенно

Автор - KuklP
Дата добавления - 06.09.2011 в 21:55
  • Страница 1 из 1
  • 1
Поиск:

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