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

Вход

Регистрация

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

 

= Мир MS Excel/Некорректные результаты обработки чисел в теле цикла For - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Некорректные результаты обработки чисел в теле цикла For (Функции/Function)
Некорректные результаты обработки чисел в теле цикла For
dude Дата: Воскресенье, 26.02.2017, 21:21 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
Добрый день
решил вставить обработку ошибок в функцию, вычисляющую дату и время окончания работы при заданном начале и длительности, исключать выходные, праздники, перерывы и нерабочее время.
Выходные дни и и нерабочее время отрабатывает, праздники и перерывы нет. Причём, в тестовой функции (модуль2) праздники отрабатывает.
Проверял: из цикла For выходит досрочно.
В чём проблема?
Спасибо!
К сообщению приложен файл: project_end_dat.xlsm (21.4 Kb)


Сообщение отредактировал dude - Воскресенье, 26.02.2017, 22:58
 
Ответить
СообщениеДобрый день
решил вставить обработку ошибок в функцию, вычисляющую дату и время окончания работы при заданном начале и длительности, исключать выходные, праздники, перерывы и нерабочее время.
Выходные дни и и нерабочее время отрабатывает, праздники и перерывы нет. Причём, в тестовой функции (модуль2) праздники отрабатывает.
Проверял: из цикла For выходит досрочно.
В чём проблема?
Спасибо!

Автор - dude
Дата добавления - 26.02.2017 в 21:21
Pelena Дата: Воскресенье, 26.02.2017, 21:30 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19177
Репутация: 4417 ±
Замечаний: ±

Excel 365 & Mac Excel
dude, название темы должно отражать суть Вашей задачи, а именно, что должна вычислять функция


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениеdude, название темы должно отражать суть Вашей задачи, а именно, что должна вычислять функция

Автор - Pelena
Дата добавления - 26.02.2017 в 21:30
dude Дата: Воскресенье, 26.02.2017, 21:38 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
функция работает корректно, описание её работы есть в теле сообщения и не является предметом вопроса
 
Ответить
Сообщениефункция работает корректно, описание её работы есть в теле сообщения и не является предметом вопроса

Автор - dude
Дата добавления - 26.02.2017 в 21:38
Pelena Дата: Воскресенье, 26.02.2017, 21:59 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19177
Репутация: 4417 ±
Замечаний: ±

Excel 365 & Mac Excel
функция работает корректно

В чём тогда вопрос?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
функция работает корректно

В чём тогда вопрос?

Автор - Pelena
Дата добавления - 26.02.2017 в 21:59
dude Дата: Воскресенье, 26.02.2017, 22:21 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
Перед блоком основных вычислений вставил обработку ошибок: не вычислять функцию, если дата и время не рабочие. блок ведёт себя странно. просто If (выходные дни, нерабочее время) отрабатывает, а в теле цикла (перебор праздников, дневных перерывов) нет
 
Ответить
СообщениеПеред блоком основных вычислений вставил обработку ошибок: не вычислять функцию, если дата и время не рабочие. блок ведёт себя странно. просто If (выходные дни, нерабочее время) отрабатывает, а в теле цикла (перебор праздников, дневных перерывов) нет

Автор - dude
Дата добавления - 26.02.2017 в 22:21
Pelena Дата: Воскресенье, 26.02.2017, 22:30 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19177
Репутация: 4417 ±
Замечаний: ±

Excel 365 & Mac Excel
Во-от, а теперь кратко сформулируйте это в названии темы. То, что Вы написали после двоеточия в предыдущем посте, подойдёт
Исправлено


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВо-от, а теперь кратко сформулируйте это в названии темы. То, что Вы написали после двоеточия в предыдущем посте, подойдёт
Исправлено

Автор - Pelena
Дата добавления - 26.02.2017 в 22:30
bmv98rus Дата: Воскресенье, 26.02.2017, 23:50 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
dude,
не по теме, за чем так сложно?
[vba]
Код
Fix(Abs(Fix(-d)) - DateSerial(Year(d), holim(j, 2), holim(j, 1))) = 0
[/vba]почему не?[vba]
Код
Int(d)=DateSerial(Year(d), holim(j, 2), holim(j, 1))
[/vba]
По теме:
Exit For дает команду выхода из циклв, и Exit Function не исполняется. Оставьте только Exit Function.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Воскресенье, 26.02.2017, 23:51
 
Ответить
Сообщениеdude,
не по теме, за чем так сложно?
[vba]
Код
Fix(Abs(Fix(-d)) - DateSerial(Year(d), holim(j, 2), holim(j, 1))) = 0
[/vba]почему не?[vba]
Код
Int(d)=DateSerial(Year(d), holim(j, 2), holim(j, 1))
[/vba]
По теме:
Exit For дает команду выхода из циклв, и Exit Function не исполняется. Оставьте только Exit Function.

Автор - bmv98rus
Дата добавления - 26.02.2017 в 23:50
dude Дата: Понедельник, 27.02.2017, 00:10 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
Спасибо! bmv98rus
Помогло

не по теме:
после excel2003 в 2013 иногда отлаживаю наугад
 
Ответить
СообщениеСпасибо! bmv98rus
Помогло

не по теме:
после excel2003 в 2013 иногда отлаживаю наугад

Автор - dude
Дата добавления - 27.02.2017 в 00:10
bmv98rus Дата: Понедельник, 27.02.2017, 00:15 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop]
после excel2003 в 2013 иногда отлаживаю наугад

ну с этим Fix(Abs(Fix(-d)) вы сильно нагадали :-)[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop]
после excel2003 в 2013 иногда отлаживаю наугад

ну с этим Fix(Abs(Fix(-d)) вы сильно нагадали :-)[/offtop]

Автор - bmv98rus
Дата добавления - 27.02.2017 в 00:15
dude Дата: Понедельник, 27.02.2017, 00:18 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
С этим как раз не гадал, в VBA нет функции ЦЕЛОЕ
 
Ответить
СообщениеС этим как раз не гадал, в VBA нет функции ЦЕЛОЕ

Автор - dude
Дата добавления - 27.02.2017 в 00:18
krosav4ig Дата: Понедельник, 27.02.2017, 02:32 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
в VBA нет функции ЦЕЛОЕ

хто это вам такое сказал? :o Int() это есть ЦЕЛОЕ()


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение
в VBA нет функции ЦЕЛОЕ

хто это вам такое сказал? :o Int() это есть ЦЕЛОЕ()

Автор - krosav4ig
Дата добавления - 27.02.2017 в 02:32
bmv98rus Дата: Понедельник, 27.02.2017, 08:01 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop] krosav4ig,
Я сам был озадачен, но так как проверить не могу, а все доки MS, что нашел, на 2010 и выше, то сижу репу чешу, пользовал ли я INT На XP и более младших :-) Спасибо успкоил старика, думал в маразм впадаю.[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop] krosav4ig,
Я сам был озадачен, но так как проверить не могу, а все доки MS, что нашел, на 2010 и выше, то сижу репу чешу, пользовал ли я INT На XP и более младших :-) Спасибо успкоил старика, думал в маразм впадаю.[/offtop]

Автор - bmv98rus
Дата добавления - 27.02.2017 в 08:01
Alex_ST Дата: Понедельник, 27.02.2017, 08:32 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
в VBA нет функции ЦЕЛОЕ
Что за чушь?
Int - это вообще одна из стандартных изначально присутствовавших функций Basic, а даже не VBA.
К сожалению, с работы скачать файл с макросами, чтобы разобраться "где собака порылась" не могу. Но скорее всего - просто некорректное использование.
Вот выдержка из русского справочника:
Функция Int
Int(Number)
Функция Int отбрасывает дробную часть числа и возвращает целое значение. Функция схожа с функцией Fix. Различие между функциями Int и Fix состоит в том, что для отрицательного значения аргумента число функция Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному, а Fix ближайшее отрицательное целое число, большее либо равное указанному. Например, функция Int преобразует -8.4 в -9, а функция Fix преобразует -8,4 в -8
Возвращаемое значение
Функция возвращает значение типа, совпадающего с типом аргумента, которое содержит целую часть числа
Параметры
Number
Обязательный аргумент Number может представлять любое допустимое числовое выражение или число типа Double. Если аргумент имеет значение Null, то возвращается также Null
Примечание Если значение аргумента не попадает в диапазон допустимых значений Double, то генерируется ошибка стадии выполнения Overflow
Если аргумент имеет тип данных String, то он должен представлять собой число, иначе генерируется ошибка стадии выполнения Type mismatch



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 27.02.2017, 08:33
 
Ответить
Сообщение
в VBA нет функции ЦЕЛОЕ
Что за чушь?
Int - это вообще одна из стандартных изначально присутствовавших функций Basic, а даже не VBA.
К сожалению, с работы скачать файл с макросами, чтобы разобраться "где собака порылась" не могу. Но скорее всего - просто некорректное использование.
Вот выдержка из русского справочника:
Функция Int
Int(Number)
Функция Int отбрасывает дробную часть числа и возвращает целое значение. Функция схожа с функцией Fix. Различие между функциями Int и Fix состоит в том, что для отрицательного значения аргумента число функция Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному, а Fix ближайшее отрицательное целое число, большее либо равное указанному. Например, функция Int преобразует -8.4 в -9, а функция Fix преобразует -8,4 в -8
Возвращаемое значение
Функция возвращает значение типа, совпадающего с типом аргумента, которое содержит целую часть числа
Параметры
Number
Обязательный аргумент Number может представлять любое допустимое числовое выражение или число типа Double. Если аргумент имеет значение Null, то возвращается также Null
Примечание Если значение аргумента не попадает в диапазон допустимых значений Double, то генерируется ошибка стадии выполнения Overflow
Если аргумент имеет тип данных String, то он должен представлять собой число, иначе генерируется ошибка стадии выполнения Type mismatch

Автор - Alex_ST
Дата добавления - 27.02.2017 в 08:32
Alex_ST Дата: Понедельник, 27.02.2017, 21:59 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Из дома скачал-таки файл ради интереса.
Да... Написано, конечно, со знанием дела - с обработкой процедурами вычисляемых формулами листа динамических диапазонов. Но написано ДЛЯ СЕБЯ, знающего, что и как вычисляется и куда заносится. Если спрашиваете совета, так хоть бы в примере на листе заголовки столбцов добавили, чтобы не гадать что и куда заносится руками, а что вычисляется макросом.
Но по сути вопроса bmv98rus, конечно, прав:
Exit For дает команду выхода из цикла, и Exit Function не исполняется. Оставьте только Exit Function



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеИз дома скачал-таки файл ради интереса.
Да... Написано, конечно, со знанием дела - с обработкой процедурами вычисляемых формулами листа динамических диапазонов. Но написано ДЛЯ СЕБЯ, знающего, что и как вычисляется и куда заносится. Если спрашиваете совета, так хоть бы в примере на листе заголовки столбцов добавили, чтобы не гадать что и куда заносится руками, а что вычисляется макросом.
Но по сути вопроса bmv98rus, конечно, прав:
Exit For дает команду выхода из цикла, и Exit Function не исполняется. Оставьте только Exit Function

Автор - Alex_ST
Дата добавления - 27.02.2017 в 21:59
bmv98rus Дата: Понедельник, 27.02.2017, 22:13 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop]Алексей,

ответ на четко поставленный вопрос :-). про INT то я так спросил, глаз зацепился пока смотрел бегло что там за обраьотка ошибок и "Читал пейджер, долго думал " ....[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop]Алексей,

ответ на четко поставленный вопрос :-). про INT то я так спросил, глаз зацепился пока смотрел бегло что там за обраьотка ошибок и "Читал пейджер, долго думал " ....[/offtop]

Автор - bmv98rus
Дата добавления - 27.02.2017 в 22:13
dude Дата: Вторник, 28.02.2017, 17:35 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
Согласен, не корректная формулировка, функции есть
но:
[vba]
Код
Sub ddd()
[a1] = Int(1 * (0.5 - 0.4 - 0.1))
[a2] = Fix(1 * (0.5 - 0.4 - 0.1))
[a3] = Abs(Fix(-(1 * (0.5 - 0.4 - 0.1))))
[a4] = Int(Log(1000) / Log(10))
[a5] = Fix(Log(1000) / Log(10))
[a6] = Round(Log(1000) / Log(10), 0)
End Sub
[/vba]
 
Ответить
СообщениеСогласен, не корректная формулировка, функции есть
но:
[vba]
Код
Sub ddd()
[a1] = Int(1 * (0.5 - 0.4 - 0.1))
[a2] = Fix(1 * (0.5 - 0.4 - 0.1))
[a3] = Abs(Fix(-(1 * (0.5 - 0.4 - 0.1))))
[a4] = Int(Log(1000) / Log(10))
[a5] = Fix(Log(1000) / Log(10))
[a6] = Round(Log(1000) / Log(10), 0)
End Sub
[/vba]

Автор - dude
Дата добавления - 28.02.2017 в 17:35
bmv98rus Дата: Вторник, 28.02.2017, 18:11 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop] dude,
https://msdn.microsoft.com/en-us/library/office/gg264147.aspx
разные функции о этому и разные, что должны давать разный результат. то что вы демонстрируете - это в том числе и проблемы операций с плавающей точкой.

В вашем случае который меня и удивил, использование конструкции вида Abs(Fix(-(1 * (0.5 - 0.4 - 0.1)))) не имеет смысла, но она работает. это я не отрицаю.[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop] dude,
https://msdn.microsoft.com/en-us/library/office/gg264147.aspx
разные функции о этому и разные, что должны давать разный результат. то что вы демонстрируете - это в том числе и проблемы операций с плавающей точкой.

В вашем случае который меня и удивил, использование конструкции вида Abs(Fix(-(1 * (0.5 - 0.4 - 0.1)))) не имеет смысла, но она работает. это я не отрицаю.[/offtop]

Автор - bmv98rus
Дата добавления - 28.02.2017 в 18:11
dude Дата: Вторник, 28.02.2017, 18:28 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 28 ±
Замечаний: 0% ±

2016
Да, но я пишу коды очень редко. Давно увидел эту конструкцию и ставлю, не думая,
 
Ответить
СообщениеДа, но я пишу коды очень редко. Давно увидел эту конструкцию и ставлю, не думая,

Автор - dude
Дата добавления - 28.02.2017 в 18:28
bmv98rus Дата: Вторник, 28.02.2017, 19:36 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop]
и ставлю, не думая
и как раз от таких действий и надо избавляться. давайте на этом закончим ибо меня успокоили, что я не в маразме и INT на своем месте и в 2003, вы получили ответ на первый вопрос. Успехов.[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop]
и ставлю, не думая
и как раз от таких действий и надо избавляться. давайте на этом закончим ибо меня успокоили, что я не в маразме и INT на своем месте и в 2003, вы получили ответ на первый вопрос. Успехов.[/offtop]

Автор - bmv98rus
Дата добавления - 28.02.2017 в 19:36
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Некорректные результаты обработки чисел в теле цикла For (Функции/Function)
  • Страница 1 из 1
  • 1
Поиск:

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