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

Вход

Регистрация

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

 

= Мир MS Excel/Ошибки EXCEL и VBA - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
Ошибки EXCEL и VBA
msi2102 Дата: Пятница, 06.03.2015, 13:02 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Добрый день уважаемые форумчане!
Хочу поделиться небольшой ошибкой VBA. Возможно такие темы уже были, но их искать не очень удобно. Поэтому предложение к админам создать где-то между кнопками "Вопросы VBA" и "Готовые решения" (или ещё где-нибудь), кнопку "Ошибки EXCEL и VBA". Ведь, скорее всего, каждый сталкивался с какими-либо ошибками, и было бы удобно посмотреть уже известные косяки и как-то их обойти. Я, например, из-за этой ошибки два дня потерял. Переписал трижды алгоритм расчета, пока не вспомнил, что ноль это не всегда ноль. Возможно кто-то будет делиться методами обхода таких проблем.
К сообщению приложен файл: 9392326.xls (41.0 Kb)
 
Ответить
СообщениеДобрый день уважаемые форумчане!
Хочу поделиться небольшой ошибкой VBA. Возможно такие темы уже были, но их искать не очень удобно. Поэтому предложение к админам создать где-то между кнопками "Вопросы VBA" и "Готовые решения" (или ещё где-нибудь), кнопку "Ошибки EXCEL и VBA". Ведь, скорее всего, каждый сталкивался с какими-либо ошибками, и было бы удобно посмотреть уже известные косяки и как-то их обойти. Я, например, из-за этой ошибки два дня потерял. Переписал трижды алгоритм расчета, пока не вспомнил, что ноль это не всегда ноль. Возможно кто-то будет делиться методами обхода таких проблем.

Автор - msi2102
Дата добавления - 06.03.2015 в 13:02
Hugo Дата: Пятница, 06.03.2015, 13:14 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Достаточно первой строкой модуля написать
[vba]
Код
Dim a$, b$
[/vba]
и практически всюду будет ИСТИНА (ну где используются эти переменные).

Кстати, столкнулся уже давно с таким поведением при сравнении даже не результатов вычислений, а при сравнении двух значений ячеек, которые равны и по видимому в ячейке (и в отладке кода) значению, и по типу значения, но сравнение в VBA не проходят.
Эти значения были импортированы в ячейки извне, не заведены вручную.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Пятница, 06.03.2015, 13:31
 
Ответить
СообщениеДостаточно первой строкой модуля написать
[vba]
Код
Dim a$, b$
[/vba]
и практически всюду будет ИСТИНА (ну где используются эти переменные).

Кстати, столкнулся уже давно с таким поведением при сравнении даже не результатов вычислений, а при сравнении двух значений ячеек, которые равны и по видимому в ячейке (и в отладке кода) значению, и по типу значения, но сравнение в VBA не проходят.
Эти значения были импортированы в ячейки извне, не заведены вручную.

Автор - Hugo
Дата добавления - 06.03.2015 в 13:14
Leanna Дата: Пятница, 06.03.2015, 13:56 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
А в чем фишка, сложили три числа 23,4 получили 70,2 с какими-то ">миллионными"? Как это так?


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеА в чем фишка, сложили три числа 23,4 получили 70,2 с какими-то ">миллионными"? Как это так?

Автор - Leanna
Дата добавления - 06.03.2015 в 13:56
msi2102 Дата: Пятница, 06.03.2015, 13:57 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Нужно было обработать достаточно большую базу. Решил проверить на небольших цифрах. И волей случая выпала именно такая последовательность. Все результаты правильные, а одно ну ни в какую не находит. Только написано было так:
Код
If Cells(5, 1) = Cells(5, 2) Then

То есть без объявления переменных.
 
Ответить
СообщениеНужно было обработать достаточно большую базу. Решил проверить на небольших цифрах. И волей случая выпала именно такая последовательность. Все результаты правильные, а одно ну ни в какую не находит. Только написано было так:
Код
If Cells(5, 1) = Cells(5, 2) Then

То есть без объявления переменных.

Автор - msi2102
Дата добавления - 06.03.2015 в 13:57
Hugo Дата: Пятница, 06.03.2015, 14:11 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
В таком варианте думаю и cstr() может не помочь, надёжнее сперва округлять, а уж потом cstr(). А ещё надёжнее сперва это сделать по каждому слагаемому :)


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеВ таком варианте думаю и cstr() может не помочь, надёжнее сперва округлять, а уж потом cstr(). А ещё надёжнее сперва это сделать по каждому слагаемому :)

Автор - Hugo
Дата добавления - 06.03.2015 в 14:11
msi2102 Дата: Пятница, 06.03.2015, 14:15 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Собственно создал эту тему для того, что бы предупредить, что есть такая проблема и про неё не надо забывать, а то можно и пролететь. Я уже создавал подобную тему, только там ВПР не искал значения.
А здесь был немного удивлен, что у VBA 23,4+23,4+23,4 не равно 70,2.
 
Ответить
СообщениеСобственно создал эту тему для того, что бы предупредить, что есть такая проблема и про неё не надо забывать, а то можно и пролететь. Я уже создавал подобную тему, только там ВПР не искал значения.
А здесь был немного удивлен, что у VBA 23,4+23,4+23,4 не равно 70,2.

Автор - msi2102
Дата добавления - 06.03.2015 в 14:15
msi2102 Дата: Пятница, 06.03.2015, 14:19 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Кстати во втором варианте 23,4 представлены как 70,2/3, так в этом случае ошибки не выдает
 
Ответить
СообщениеКстати во втором варианте 23,4 представлены как 70,2/3, так в этом случае ошибки не выдает

Автор - msi2102
Дата добавления - 06.03.2015 в 14:19
Leanna Дата: Пятница, 06.03.2015, 14:43 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Так это частный случай? Или какая-то логика есть - почему ошибка? Не понимаю откуда этим миллионным долям взяться это же сложение а не деление.
Если логики нет, то о чем можно быть предупроежденным?
Если подставить вместо а 70.2 то условие а = b выполняется. Только разницу по прежнему отображает -1,42109E-14


Лучше день потерять, потом за пять минут долететь!
 
Ответить
СообщениеТак это частный случай? Или какая-то логика есть - почему ошибка? Не понимаю откуда этим миллионным долям взяться это же сложение а не деление.
Если логики нет, то о чем можно быть предупроежденным?
Если подставить вместо а 70.2 то условие а = b выполняется. Только разницу по прежнему отображает -1,42109E-14

Автор - Leanna
Дата добавления - 06.03.2015 в 14:43
Pelena Дата: Пятница, 06.03.2015, 14:50 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
Проблема погрешности вычислений обсуждается с завидной регулярностью. Вот не далее, как 5 дней назад
http://www.excelworld.ru/forum/1-16134-1
непосредственно про суммирование
http://www.cyberforum.ru/ms-excel/thread429571.html


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПроблема погрешности вычислений обсуждается с завидной регулярностью. Вот не далее, как 5 дней назад
http://www.excelworld.ru/forum/1-16134-1
непосредственно про суммирование
http://www.cyberforum.ru/ms-excel/thread429571.html

Автор - Pelena
Дата добавления - 06.03.2015 в 14:50
Leanna Дата: Пятница, 06.03.2015, 14:58 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 189
Репутация: 78 ±
Замечаний: 0% ±

excel 2010
Pelena, Спасибо)
Когда это было в делении это понятно. Меня удивило что при таком простом сложении возникло.

За вторую ссылку отдельное спасибо.


Лучше день потерять, потом за пять минут долететь!

Сообщение отредактировал Leanna - Пятница, 06.03.2015, 15:01
 
Ответить
СообщениеPelena, Спасибо)
Когда это было в делении это понятно. Меня удивило что при таком простом сложении возникло.

За вторую ссылку отдельное спасибо.

Автор - Leanna
Дата добавления - 06.03.2015 в 14:58
Yurbas Дата: Пятница, 13.03.2015, 16:26 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, Excel 2013
Здравствуйте!
Ошибка к вычислениям отношения не имеет, но существует в Excel.
Закладка "Рецензирование", надпись на значке команды "Защитить книгу" не меняется даже если книга уже защищена. Сам попался на этом, когда не смог через Alt+F11 переключить Visible листа с xlSheetVeryHidden на xlSheetVisible в защищённой книге.

Это наблюдается и в Excel 2013, и в Excel 2010, и в Excel 2007.

P. S. В отличии от защиты книги надпись "Защитить лист" меняется на "Снять защиту листа" после установки соответствующей защиты.


Где начало того конца, которым кончается начало?
 
Ответить
СообщениеЗдравствуйте!
Ошибка к вычислениям отношения не имеет, но существует в Excel.
Закладка "Рецензирование", надпись на значке команды "Защитить книгу" не меняется даже если книга уже защищена. Сам попался на этом, когда не смог через Alt+F11 переключить Visible листа с xlSheetVeryHidden на xlSheetVisible в защищённой книге.

Это наблюдается и в Excel 2013, и в Excel 2010, и в Excel 2007.

P. S. В отличии от защиты книги надпись "Защитить лист" меняется на "Снять защиту листа" после установки соответствующей защиты.

Автор - Yurbas
Дата добавления - 13.03.2015 в 16:26
Pelena Дата: Пятница, 13.03.2015, 16:33 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
Кнопка Защитить книгу остаётся нажатой, если книга защищена (2010)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеКнопка Защитить книгу остаётся нажатой, если книга защищена (2010)

Автор - Pelena
Дата добавления - 13.03.2015 в 16:33
Yurbas Дата: Пятница, 13.03.2015, 16:49 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, Excel 2013
Pelena, обратите внимание:

надпись на значке


Где начало того конца, которым кончается начало?
 
Ответить
СообщениеPelena, обратите внимание:

надпись на значке

Автор - Yurbas
Дата добавления - 13.03.2015 в 16:49
msi2102 Дата: Пятница, 31.07.2015, 13:15 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Доброго времени суток.
Хочу поделиться очередным косячком EXCEL. Собственно это тема не новая, но с таким я столкнулся в первый раз, вернее такая ошибка появлялась при использовании ВПР, суммесли и тому подобное, а вот при элементарном вычитании впервые.
Я писал небольшую обработку для базы данных, и чтобы ее опробовать забил в первые две ячейки 300,01 и 299. После чего протянул до отрицательных чисел (Получилось как в столбце D). Включаю обработку, выдает неверный результат. Провозился с макросом три часа. Трижды его переписал, результат тот же. Постепенно начал терять веру в жизнь, пока случайно в строке формул не увидел это: 243,4500000000010, вместо 243,45 (которые были в ячейке, формат ячеек Общий). Решил тупо вычесть из 300,01 – 1,01 и протянул формулу, результат точно с такой же погрешностью, в том же месте. Причем предыдущее число 244,4600000000000 идет без погрешности. Если (в соседних ячейках) из 244,46 вычесть 1,01 то результат получается 243,450000000000 т.е. без единицы на конце. Причем самое смешное это когда из получившегося результата с погрешностью вычесть результат без погрешности, по логике должно получиться 0,000000000001, оказывается не все так просто, результат: 0,0000000000004832.
Причина этого известна и обсуждалась не один раз, просто сам факт того, что данная ошибка появилась при простом вычитании удивляет. Способов борьбы с этим тоже большое множество, в зависимости от поставленной задачи, начиная от точности на экране и заканчивая различными формулами, я думаю смысла останавливаться на этом нет. Просто имейте ввиду данный факт при работе, чтобы не потратить лишнего времени. Кстати я на эти грабли наступил уже дважды, даже зная об этом, потому что ошибка вылезла не сразу, а на 55 строке.
К сообщению приложен файл: 2690429.xls (48.0 Kb)
 
Ответить
СообщениеДоброго времени суток.
Хочу поделиться очередным косячком EXCEL. Собственно это тема не новая, но с таким я столкнулся в первый раз, вернее такая ошибка появлялась при использовании ВПР, суммесли и тому подобное, а вот при элементарном вычитании впервые.
Я писал небольшую обработку для базы данных, и чтобы ее опробовать забил в первые две ячейки 300,01 и 299. После чего протянул до отрицательных чисел (Получилось как в столбце D). Включаю обработку, выдает неверный результат. Провозился с макросом три часа. Трижды его переписал, результат тот же. Постепенно начал терять веру в жизнь, пока случайно в строке формул не увидел это: 243,4500000000010, вместо 243,45 (которые были в ячейке, формат ячеек Общий). Решил тупо вычесть из 300,01 – 1,01 и протянул формулу, результат точно с такой же погрешностью, в том же месте. Причем предыдущее число 244,4600000000000 идет без погрешности. Если (в соседних ячейках) из 244,46 вычесть 1,01 то результат получается 243,450000000000 т.е. без единицы на конце. Причем самое смешное это когда из получившегося результата с погрешностью вычесть результат без погрешности, по логике должно получиться 0,000000000001, оказывается не все так просто, результат: 0,0000000000004832.
Причина этого известна и обсуждалась не один раз, просто сам факт того, что данная ошибка появилась при простом вычитании удивляет. Способов борьбы с этим тоже большое множество, в зависимости от поставленной задачи, начиная от точности на экране и заканчивая различными формулами, я думаю смысла останавливаться на этом нет. Просто имейте ввиду данный факт при работе, чтобы не потратить лишнего времени. Кстати я на эти грабли наступил уже дважды, даже зная об этом, потому что ошибка вылезла не сразу, а на 55 строке.

Автор - msi2102
Дата добавления - 31.07.2015 в 13:15
Skif-F Дата: Суббота, 01.08.2015, 13:17 | Сообщение № 15
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
В VBA для переменных типа Single это постоянная проблема, что появляются "довески".
И даже в MathCAD'е на такое нарывался
Вообще говоря, я ещё в 90-е годы читал в книгах, что не рекомендуется напрямую сравнивать числа с плавающей запятой, а нужно, например, так:

[vba]
Код
if v1-v2>0.0001 then
[/vba]

Вместо 0.0001 вставляете своё значение, зависящее от обрабатываемых данных.
Но никто никогда не говорил, что это не касается формульных вычислений в электронных таблицах и базах данных.
 
Ответить
СообщениеВ VBA для переменных типа Single это постоянная проблема, что появляются "довески".
И даже в MathCAD'е на такое нарывался
Вообще говоря, я ещё в 90-е годы читал в книгах, что не рекомендуется напрямую сравнивать числа с плавающей запятой, а нужно, например, так:

[vba]
Код
if v1-v2>0.0001 then
[/vba]

Вместо 0.0001 вставляете своё значение, зависящее от обрабатываемых данных.
Но никто никогда не говорил, что это не касается формульных вычислений в электронных таблицах и базах данных.

Автор - Skif-F
Дата добавления - 01.08.2015 в 13:17
  • Страница 1 из 1
  • 1
Поиск:

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