Страницы: 1
RSS
Программно отследить ошибку #ДЕЛ/0
 
Из БД создаётся таблица, где, если значений нет, ставится 0. Далее, я макросом группирую её, в качестве промежуточных итогов используя среднее значение. Посколько мне требуется среднее только ненулевых значений, я запускаю цикл с проверкой If Cells( i , 6 ) = 0 Then Cells( i , 6 ) = Empty. Если в подгруппе все значения оказываются равными 0, то после очистки ячеек формула ПРОМЕЖУТОЧНЫЕ.ИТОГИ(1;[диапазон]) возвращает значение #ДЕЛ/0! Цикл доходит до ячейки с формулой, останавливается на строке с проверкой, и выдаётся сообщение "Type mismatch"
Как программно отследить, возвращает ли формула значение или ошибку, чтобы в случае ошибку просто очистить ячейку?
 
syt navy, если вы делаете макрос на основе функций листа, то и поступайте, как сделали бы на листе - "оберните" итоги в ЕСЛИОШИБКА
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Скрытый текст
Изменено: syt navy - 13.11.2019 14:28:07
 
Код
IF Cells(i, 6).Value = CVErr(xlErrDiv0)
 
То же самое.
Ниже код полностью
Скрытый текст
Изменено: syt navy - 13.11.2019 14:46:18
 
syt navy, покажите результат работы (до-после) в файле - я бы вообще код переписал заново
UPD. Не хотите - как хотите
Изменено: Jack Famous - 13.11.2019 15:23:41
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
If Cells(1, 1).Value = CVErr(xlErrDiv0) Then
    Cells(1, 1).Value = Empty
Else
    If Cells(1, 1).Value = 0 Then Cells(1, 1).Value = Empty
End If
 
Прим_До - исходная таблица
Прим_После - конечная таблица (как должно быть)
 
syt navy, я тут подумал - а нафига вам макросы вообще? Ведите в умной таблице - в ней всё есть. Нужно средее по полю - поставили фильтр и посмотрели (итоги снизу пересчитаются)
Изменено: Jack Famous - 13.11.2019 15:58:40
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Модуль выгрузки данных из БД в таблицу не работает с умными таблицами, с офисом новее 2003. По-этому работаю с тем, что имею. Пытаюсь в этих рамках действовать
 
Чтобы не изобретать костыли, нужно формулы листа писать с обходом ошибок
 
Цитата
syt navy: Модуль выгрузки данных из БД в таблицу не работает с умными таблицами
скопировать и вставить (только значения) ручками в готовую таблицу (как в моём примере)?

Просто я не понимаю, зачем выдумывать велосипед, когда есть готовое, динамичное, быстрое и простое решение?…
У меня голова кодить отказывается  :D
Изменено: Jack Famous - 13.11.2019 16:14:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
vikttur написал: нужно формулы листа писать с обходом ошибок
Цитата
Jack Famous написал: зачем выдумывать велосипед, когда есть готовое, динамичное, быстрое и простое ?…
Как с помощью формул обходить ошибки, знаю прекрасно. Но...

Формулы я тоже смогу прописать только в макросе.
У меня есть таблица со значениями формата .xls и возможность вставить макросы. В таблице изначально никаких формул нет.
С такими исходными данными надо получить сгруппированную таблицу с посчитанными средними значениями.
Всё упирается в возникающую ошибку
 
Цитата
syt navy: С такими исходными данными надо получить сгруппированную таблицу с посчитанными средними значениями
Цитата
Jack Famous: скопировать и вставить (только значения) ручками в готовую таблицу (как в моём примере)?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
скопировать и вставить (только значения) ручками в готовую таблицу (как в моём примере)?
Этим не будут заморачиваться. Надо, чтоб нажал на кнопку и получил результат. Без каких-либо камланий, танцев с бубном и т.п. Всё это я должен переложить на плечи автоматики.
 
Запишите макрорекодером: выделить данные,  инструментом Найти/Заменить убрать ошибки
 
Цитата
vikttur написал:
инструментом Найти/Заменить убрать ошибки
Инструмент Найти и Заменить" не ищет значения. Он работает только с формулами.
 
Цитата
syt navy: Инструмент Найти и Заменить" не ищет значения
вы глубоко заблуждаетесь
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Кто Вам такое сказал?
 
У меня при попытке найти и заменить хотя бы на 0 выдаётся сообщение "Приложению Microsoft Excel не удается найти искомое значение". Если есть возможность, покажите, как это должно выглядеть в коде
 
syt navy, Как в ячейке с формулой вместо ошибки показать 0
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
syt navy ,  Как в ячейке с формулой вместо ошибки показать 0
Перепробовал предложенные способы. Но что-то не получается.
Может кто-нибудь ввести в ячейку С1 формулу "= А//В1" где А1 и В 1 пустые ячейки ( получится ошибка #ДЕЛ/0! ), а затем написать код, где проводится проверка ячейки - если ошибка, то формула заменяется на значение "0" ?
 
Цитата
syt navy: написать код, где проводится проверка ячейки - если ошибка, то формула заменяется на значение "0"
играючи  :D
Код
If IsError(Range("C1").Value2)Then Range("C1").Value2="0" ' ноль в кавычках, это текст, ноль без кавычек - число
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
If IsError(Range("C1").Value2)Then Range("C1").Value2="0"
Попробовал
 
Цитата
syt navy: Попробовал
ошибка в A3, проверяете C1 — далеко пойдёте :D
Удачи!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Виноват  :D . Спасибо за помощь
Изменено: syt navy - 10.12.2019 11:08:42
 
Цитата
syt navy: Спасибо за помощь
пожалуйста, но я так и не понял, зачем нужна проверка в коде, если можно проверять прямо на листе с помощью =ЕСЛИОШИБКА(A1/B1;"0")
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Дело в том, что данные после выгрузки группируются с промежуточным итогом. В результате получаем формулы типа =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(номер_функции;диапазон). Номер функции 1 - ср.значение. По условию ТЗ мне надо находить среднее только значений, отличных от 0. Т.е. если в 7 строках встречаются 2 и 3, то среднее будет (2+3)/2 = 2,5, а не (2+3)/7 = 0,7. Для этого выполняется макрос, который очищает все ячейки, содержащие 0. Но если значений не оказалось, то очищаются все ячейки, а формула =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(номер_функции;диапазон) возвращает ошибку #ДЕЛ/0!
И вот тут два варианта: или мне искать и переписывать все формулы на =ЕСЛИОШИБКА(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(номер_функции;диапазон);"0"), или искать только те ячейки, где возникает данная ошибка.
Страницы: 1
Наверх