Формула содержит нераспознанный текст excel как исправить

Типы ошибок в формулах Excel: какие бывают и как исправить

Каждый, кто более-менее часто имеет дело с формулами Excel (пишет сам или пользуется файлами, созданными другими), знает, что иногда в этих формулах появляются крайне неприятные ошибки, которые приводят к их полной неработоспособности. В разнообразии ошибок легко запутаться. Но чтобы уметь быстро их исправлять, нужно знать, почему возникает та или иная ошибка и что с ней делать. Разберем их основные виды.

1) Ошибка ###############################

Если ячейка вдруг целиком заполнилась символами решётки, то варианта всего два: либо значение ячейки не помещается в нее, либо в ней введено отрицательное значение времени (случается, если формат ячейки – “Время”).

В первом случае достаточно расширить столбец или уменьшить шрифт, а во втором – исправить значение времени. Например, если в формуле из меньшего времени вычитается большее, то нужно сделать наоборот (или взять результат вычислений по модулю).

2) Ошибка #ДЕЛ/0!

Эту ошибку часто зовут “дело”, хотя говорит она не о делах а о том, что нельзя делить на ноль. Возникает, если в формуле происходит деление на 0 или на пустую ячейку. Соответственно, исправив нулевой или пустой знаменатель, можно исправить ошибку.

3) Ошибка #Н/Д

Самая распространенная ошибка. Возникает тогда, когда функция поиска данных не находит искомое значение в диапазоне. Функции поиска данных это: ВПР, ГПР, ПОИСКПОЗ, ПРОСМОТР. Соответственно, решается либо изменением поискового запроса (“что ищем”), либо внесением в диапазон искомого значения. Однако, чаще всего эта ошибка вполне ожидаема и просто помогает проверить наличие того или иного значения в списке. Многие пользователи предпочитают выводить вместо нее пустые значения или какой-то значимый текст с помощью функции ЕСЛИОШИБКА. Например:

=ЕСЛИОШИБКА(ВПР(A1;B:C;2;0);”Отсутствует в справочнике”)

4) Ошибка #ИМЯ?

Возникает, когда в формуле используется нераспознанное программой имя. Именем Excel считает любой текст, не являющийся названием функции, ссылкой на ячейку/диапазон и не взятый в кавычки. Например, в формуле =СЕГОДНЯ()+СЕГ-A4 слово СЕГ будет распознано как имя.

Когда распознанного имени нет в списке именованных диапазонов, появляется данная ошибка. Способы решения:

  • Создать нужное имя в диспетчере имен;
  • Проверить правильность написания уже существующего имени;
  • Проверить, верно ли написаны функции рабочего листа (опечатки приведут к возникновению ошибки)

5) Ошибка #ССЫЛКА!

Данная ошибка возникает в случае, когда ячейка или диапазон, на который ссылается формула, был удален, перемещен или стал недоступным. Например, если есть формула

=A1+C3

и Вы удалите столбец С, то формула выдаст ошибку #ССЫЛКА!, так как вместе со столбцом С была удалена и ячейка C3. Обратите внимание, что на листе по-прежнему есть ячейка с таким адресом, но физически это уже не та ячейка, которая раньше располагалась на этом месте (хотя адрес тот же).

Чтобы исправить ошибку, нужно отменить удаление ячейки (если есть такая возможность) или заново сослаться на нужный диапазон. Другой вариант – использовать функцию ДВССЫЛ для тех ячеек, которые могут быть удалены. Например, формула =A1+ДВССЫЛ(“C3”) будет работать даже тогда, когда мы удалим столбец C.

Другой вариант возникновения – файлы, на которые есть ссылки были перемещены, удалены или переименованы. Любое из этих действий при последующем обновлении связей выдаст указанную ошибку. Вывод – будьте аккуратнее с файлами, на которые делаете ссылки.

6) Ошибка #ЗНАЧ!

Возникает чаще всего тогда, когда в формуле использован неверный тип данных. Помните, что текст, число или дата – разные типы данных и обрабатываются по разному. Если передать, например, функции ДЕНЬНЕД() ссылку на ячейку с текстом, то появится указанная ошибка. То же самое произойдет, если попытаетесь вычесть из 100 слово “десять”. Для исправления – проверьте все аргументы Соответствуют ли они требуемым типам данных? Если нет – укажите правильные типы.

7) Ошибка #ПУСТО!

Крайне редкая ошибка, так как мало кто использует в работе оператор пересечения диапазонов (про него можно почитать тут). Собственно, возникает тогда, когда диапазоны не пересекаются. Для исправления – укажите пересекающиеся диапазоны. Например, формула:

={A1:B5 A6:B10}

выдаст ошибку. А формула:

={A1:B5 A5:B10}

будет работать безошибочно и вернет диапазон A5:B5

8) Ошибка #ЧИСЛО!

Еще одна не самая распространенная ошибка. Встречается, если задан недопустимый числовой аргумент. То есть, тип данных указан верно (поэтому не #ЗНАЧ!), но само число выбрано недопустимое. Чаще всего встречается в финансовых функциях. Например, формула:

=ПЛТ(-40;2;2)

выдаст эту ошибку, так как аргумент “Ставка” не может быть отрицательным.

Для исправления – введите допустимый числовой аргумент.

Знать, что означают ошибки – полбеды. Нужно еще понять, какая именно часть формулы генерирует ошибку. Для этого формулу нужно проанализировать. Советы на эту тему можно найти в этой статье. Желаем Вам только исправных формул!

Видеоверсию данной статьи смотрите на нашем канале на YouTube

Чтобы не пропустить новые уроки и постоянно повышать свое мастерство владения Excel – подписывайтесь на наш канал в Telegram Excel Everyday

Много интересного по другим офисным приложениям от Microsoft (Word, Outlook, Power Point, Visio и т.д.) – на нашем канале в Telegram Office Killer

Вопросы по Excel можно задать нашему боту обратной связи в Telegram @ExEvFeedbackBot

Вопросы по другому ПО (кроме Excel) задавайте второму боту – @KillOfBot

По заказам и предложениям обращайтесь к нам на сайте tDots.ru

С уважением, команда tDots.ru

Возможности Эксель позволяют выполнять вычисления практически любой сложности благодаря формулам и функциям. Однако иногда пользователи могут столкнуться с тем, что формула отказывается работать или вместо желаемого результата выдает ошибку. В данной статье мы рассмотрим, почему так получается, и какие действия предпринять для решения возникшей проблемы.

Содержание

  • Решение 1: меняем формат ячеек
  • Решение 2: отключаем режим “Показать формулы”
  • Решение 3: активируем автоматический пересчет формул
  • Решение 4: исправляем ошибки в формуле
  • Заключение

Решение 1: меняем формат ячеек

Очень часто Excel отказывается выполнять расчеты из-за того, что неправильно выбран формат ячеек.

Например, если задан текстовый формат, то вместо результата мы будем видеть просто саму формулу в виде обычного текста.

Формулы в ячейках Эксель в текстовом формате

В некоторых ситуациях, когда выбран не тот формат, результат может быть посчитан, но отображаться он будет совсем не так, как мы хотели бы.

Формулы в Эксель в формате даты

Очевидно, что формат ячеек нужно изменить, и делается это следующим образом:

  1. Чтобы определить текущий формат ячейки (диапазон ячеек), выделяем ее и, находясь во вкладке “Главная”, обращаем вниманием на группу инструментов “Число”. Здесь есть специальное поле, в котором показывается формат, используемый сейчас.Формулы в ячейках Excel в текстовом формате
  2. Выбрать другой формат можно из списка, который откроется после того, как мы кликнем по стрелку вниз рядом с текущим значением.Выбор формата для выделенных ячеек в Эксель

Формат ячеек можно сменить с помощью другого инструмента, который позволяет задать более расширенные настройки.

  1. Выбрав ячейку (или выделив диапазон ячеек) щелкаем по ней правой кнопкой мыши и в открывшемся списке жмем по команде “Формат ячеек”. Или вместо этого, после выделения жмем сочетание Ctrl+1.Переход в окно форматирования ячеек через контекстное меню в Excel
  2. В открывшемся окне мы окажемся во вкладке “Число”. Здесь в перечне слева представлены все доступные форматы, которые мы можем выбрать. С левой стороны отображаются настройки выбранного варианта, которые мы можем изменить на свое усмотрение. По готовности жмем OK.Выбор формата в окне форматирования ячеек в Эксель
  3. Чтобы изменения отразились в таблице, по очереди активируем режим редактирования для всех ячеек, в которых формула не работала. Выбрав нужный элемент перейти к редактированию можно нажатием клавиши F2, двойным кликом по нему или щелчком внутри строки формул. После этого, ничего не меняя, жмем Enter.Редактирование формулы в Эксель

Примечание: Если данных слишком много, на ручное выполнение последнего шага потребуется немало времени. В данном случае можно поступить иначе – воспользуемся Маркером заполнения. Но этот работает только в том случае, когда во всех ячейках используются одинаковая формула.

  1. Выполняем последний шаг только для самой верхней ячейки. Затем наводим указатель мыши на ее правый нижний угол, как только появится черный плюсик, зажав левую кнопку мыши тянем его до конца таблицы.Копирование формулы с помощью маркера заполнения в Excel
  2. Получаем столбец с результатами, посчитанными с помощью формул.Выделенный столбец с формулами в Эксель

Решение 2: отключаем режим “Показать формулы”

Когда мы вместо результатов видим сами формулы, это может быть связано с тем, что активирован режим показа формул, и его нужно отключить.

  1. Переключаемся во вкладку “Формулы”. В группе инструментов “Зависимость формул” щелкаем по кнопке “Показать формулы”, если она активна.Включение и отключение показа формул в таблице Эксель
  2. В результате, в ячейках с формулами теперь будут отображаться результаты вычислений. Правда, из-за этого могут измениться границы столбцов, но это поправимо.Результаты в ячейках с формулами в Эксель

Решение 3: активируем автоматический пересчет формул

Иногда может возникать ситуация, когда формула посчитала какой-то результат, однако, если мы решим изменить значение в одной из ячеек, на которую формула ссылается, пересчет выполнен не будет. Это исправляется в параметрах программы.

  1. Заходим в меню “Файл”.Переход в меню Файл в Эксель
  2. В перечне слева выбираем раздел “Параметры”.Переход в Параметры Excel
  3. В появившемся окне переключаемся в подраздел “Формулы”. В правой части окна в группе “Параметры вычислений” ставим отметку напротив опции “автоматически”, если выбран другой вариант. По готовности щелкаем OK.Включение автоматического вычисления формул в Эксель
  4. Все готово, с этого момента все результаты по формулам будут пересчитываться в автоматическом режиме.

Решение 4: исправляем ошибки в формуле

Если в формуле допустить ошибки, программа может воспринимать ее как простое текстовое значение, следовательно, расчеты по ней выполнятся не будут. Например, одной из самых популярных ошибок является пробел, установленный перед знаком “равно”. При этом помним, что знак “=” обязательно должен стоять перед любой формулой.

Ненужный пробел перед формулой в Эксель

Также, довольно часто ошибки допускаются в синтаксисах функций, так как заполнить их не всегда просто, особенно, когда используется несколько аргументов. Поэтому, рекомендуем использовать Мастер функций для вставки функции в ячейку.

Вставка функции в ячейку Excel

Чтобы формула заработала, все что нужно сделать – внимательно проверить ее и исправить все выявленные ошибки. В нашем случае нужно просто убрать пробел в самом начале, который не нужен.

Редактирование формулы в Эксель

Иногда проще удалить формулу и написать ее заново, чем пытаться искать ошибку в уже написанной. То же самое касается функций и их аргументов.

Распространенные ошибки

В некоторых случаях, когда пользователь допустил ошибку при вводе формулы, в ячейке могут отображаться такие значения:

  • #ДЕЛ/0! – результат деления на ноль;
  • #Н/Д – ввод недопустимых значений;
  • #ЧИСЛО! – неверное числовое значение;
  • #ЗНАЧ! – используется неправильный вид аргумента в функции;
  • #ПУСТО! – неверно указан адрес дапазона;
  • #ССЫЛКА! – ячейка, на которую ссылалась формула, удалена;
  • #ИМЯ? – некорректное имя в формуле.

Если мы видим одну из вышеперечисленных ошибок, в первую очередь проверяем, все ли данные в ячейках, участвующих в формуле, заполнены корректно. Затем проверяем саму формулу и наличие в ней ошибок, в том числе тех, которые противоречат законам математики. Например, не допускается деление на ноль (ошибка #ДЕЛ/0!).

Ошибка деления на ноль в Экселе

В случаях, когда приходится иметь со сложными функциями, которые ссылаются на много ячеек, можно воспользоваться инструментов проверки.

  1. Отмечаем ячейку, содержащую ошибку. Во вкладке “Формулы” в группе инструментов “Зависимости формул” жмем кнопку “Вычислить формулу”.Функция вычисления формулы в Эксель
  2. В открывшемся окне будет отображаться пошаговая информация по расчету. Для этого нажимаем кнопку “Вычислить” (каждое нажатие осуществляет переход к следующему шагу).Окно вычисления формулы в Excel
  3. Таким образом, можно отследить каждый шаг, найти ошибку и устранить ее.

Также можно воспользоваться полезным инструментом “Проверка ошибок”, который расположен в том же блоке.

Функция проверки ошибок в формуле в Эксель

Откроется окно, в котором будет описана причина ошибки, а также предложен ряд действий касательно нее, в т.ч. исправление в строке формул.

Окно проверки ошибок в Excel

Заключение

Работа с формулами и функциями – одна из главных функциональных возможностей Excel, и, несомненно, одно из основных направлений использования программы. Поэтому очень важно знать, какие проблемы могут возникать при работе с формулами, и как их можно исправить.

#1

alsuper

    Новичок

  • Пользователи
  • Pip

  • 5 сообщений

Отправлено 30 Октябрь 2006 – 02:12

с помощью импорта внешних данных с сайта получаю числовые данные. выходят они в таком формате 2,840.00 что означает 2840. Из-за последних трёх символов .00 невозможно вставить в формулу для автоматического расчёта. Как сделать либо автоматическое убирание этих символов, либо возможность расчёта данных чисел в формулах?

  • Наверх


#2

DeBOBAHer

DeBOBAHer

  • Город:)
  • Интересы:SithAdmin

Отправлено 30 Октябрь 2006 – 02:42

Можно попытаться настроить формат чисел в Windows в региональных настройках.

Какой же русский не любит быстрой езды – бессмысленной и беспощадной!
Нет такой чистой и светлой мысли, которую бы русский человек не смог бы выразить в грязной матерной форме.
Еще никто так, как русские, не глушил рыбу! (в Тихом океане – да космической станцией!)

  • Наверх


#3

joy

joy

  • Город:МО
  • Интересы:догадайтесь с трех раз… Вы знали!!!

Отправлено 30 Октябрь 2006 – 02:47

думаешь, поможет? он же выдирает это со странички в браузере. соответственно, как страничка сделана, так он и выдерет. или ты не это имел в виду?

“Что использовать чтобы огурцы ложкой банка майонеза.” ©bash.org.ru…

  • Наверх


#4

megaforce

megaforce

    Новичок

  • Пользователи
  • Pip

  • 1 сообщений

Отправлено 30 Октябрь 2006 – 02:55

Настройка – Панель управления – Языки и стандарты – Числа – Разделитель целой и дробной части числа

  • Наверх


#5

v_user

Отправлено 30 Октябрь 2006 – 03:00

Настройка – Панель управления – Языки и стандарты – Числа – Разделитель целой и дробной части числа

<{POST_SNAPBACK}>

Да, можно так. Но это тогда коснется всех программ.

Думаю наилучшее написать скрипт преобразования на VBA ввиде функции (т.е. подсьавляется в форулу). А сам скрипт прост: берет значение как текст, перебирает по каждому символу, запятые просто выкидывает, а точку меняет на запятую. Все, вопрос решен.

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


#6

v_user

Отправлено 30 Октябрь 2006 – 03:31

Вот, не поленился, написал.

Открой Ексел, запиши какой угодно макрос (главное чтоб он был). Теперь по <Alt><F11> открываешь окно VBA. Там найдешь раздел “Modules”. В нем подраздел, по умолчанию “Module1”. Открываешь этот подраздел. Там на VBA будет записан твой макрос. Нафиг стираешь его, а вместо него пишешь вот такой тест:

Public Function Convert_My(str As String) As Double
Dim dl_str As Long, i As Long, tmp As String, z_ish As String, z_end As String, otvet As Double
Convert_My = 0
On Error GoTo 11
z_end = ""
ish = str
dl_str = Len(ish)
For i = 1 To dl_str
    tmp = Mid(ish, i, 1)
    If tmp = "," Then GoTo 23
    If tmp = "." Then tmp = ","
    z_end = z_end & tmp
23
Next i
otvet = z_end
Convert_My = otvet
11
End Function

Сохраняешься. Теперь в итоговую ячеку прописываешь формулу, например =Convert_My(A5).
В ячейке А5 находится значение например 2,685.34, и функция будет возвращать в итоговую ячейку нормальной число 2685,34.

З.Ы. Подправил, ошибка была :D

Сообщение отредактировал v_user: 31 Октябрь 2006 – 03:35

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


#7

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 30 Октябрь 2006 – 10:25

2 v_user
По-моему загон, и по-любому должныа быть возможность в эксель это настроить.

Здесь, например: Меню “Сервис”-“Параметры”, вкладка “Международные”. Убрать галочку “Использовать системные разделители” и поставить нужный “Разделитель дробной и целой части”. По крайней мере данные можно импортировать, потом изменить формат на нужный и сохранить. А можно прямо так и работать.

Прикрепленные файлы

  • Прикрепленный файл
     excel.png   8,63К
      66 Количество загрузок:

Сообщение отредактировал ErV: 30 Октябрь 2006 – 10:27

ушел на Linux-ресурсы.

  • Наверх


#8

v_user

Отправлено 31 Октябрь 2006 – 06:52

2 v_user
По-моему загон, и по-любому должныа быть возможность в эксель это настроить.

Здесь, например: Меню “Сервис”-“Параметры”, вкладка “Международные”. Убрать галочку “Использовать системные разделители” и поставить нужный “Разделитель дробной и целой части”. По крайней мере данные можно импортировать, потом изменить формат на нужный и сохранить. А можно прямо так и работать.

<{POST_SNAPBACK}>

Так в том-то и дело, что это коснется всего Эксель. Да сколько уже раз сталкивался что люди изменив запятую на точку уже получали невнятный гемор. Одну свою задачу решали (а это решение через кривые руки программера который даже экспорт/импорт организовать не может по человечески), но другие наживали.
Что ж, если такой подход удовлетворяет, то ради бога. Только вот разбираться в числах, где запятая – разделитель разрядов, а точка – есть “десятичная точка” (вместо соответсвенно пробела и запятой) – думаю “продвинотому” бухгалтеру/менеджеру будет не весело.

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


#9

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 31 Октябрь 2006 – 03:24

Я просто думаю, что автор – не программер, это раз.
А следовательно, ему проще запомнить где галочка, чем весь твой скрипт. (без обид)
Переформатировал бы ты его, что ли… тут классный тэг есть – [code=auto:0]
читать удобнее, правда хайлайтинг и всякие загоны со шрифтами убивает.

ушел на Linux-ресурсы.

  • Наверх


#10

v_user

Отправлено 31 Октябрь 2006 – 03:39

Я просто думаю, что автор – не программер, это раз.
А следовательно, ему проще запомнить где галочка, чем весь твой скрипт. (без обид)
Переформатировал бы ты его, что ли… тут классный тэг есть – [code=auto:0]
читать удобнее, правда хайлайтинг и всякие загоны со шрифтами убивает.

<{POST_SNAPBACK}>

Да не, какие обиды.
Просто меня иногда нервируют программисты, которые делают что-то через одно место и/или не до конца. Очень часто это у них в превычке (они так начинали). Вот я и акцентировал на том, что если делать, то так чтоб работало, а не чтоб сперва настроить а уж потом работало.
Кстати, переделал, спс за подсказку про тэг. И кстати изложить посторался как программировать как для новиска.

Сообщение отредактировал v_user: 31 Октябрь 2006 – 03:41

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


#11

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 31 Октябрь 2006 – 09:21

Ещё рекомендация.
Я когда информатикам задачи делал ради прикола :) ,
обнаружил, что если человек не знает инглиш, то знает транслит.
Можно изменить имена и ему все будет понятно (Кстати, если не ошибаюсь, по русски в офисе тоже можно программить).
И ещё: у тебя z_ish не используется, как я понял.
И зачем копировать str в ish?
Вот так например (не факт что не сломал, не тестил, по тексту должно работать):

Public Function StrokuVChislo(stroka As String) As Double
Dim dlinaStroki As Long, positsiya As Long, curSimvol As String, 
strokaOtvet as String, otvet As Double
otvet = 0;
On Error GoTo 11
strokaOtvet = ""
dlinaStroki = Len(stroka)
For positsiya = 1 to dlinaStroki
    curSimvol = Mid(stroka, i, 1);
    if curSimvol = "," Then Goto 23
    if curSimvol = "." Then curSimvol = ","
    strokaOtvet = strokaOtvet & curSimvol
23
Next i
otvet = strokaOtvet
11
StrokuVChislo = otvet
End Function

У меня сейчас диск с офисом грохнулся, нет документации по бейсику и влом. Если хош, могу переделать в более человеческий вид на досуге.

Сообщение отредактировал ErV: 31 Октябрь 2006 – 09:36

ушел на Linux-ресурсы.

  • Наверх


#12

v_user

Отправлено 01 Ноябрь 2006 – 07:54

Все верно. Так и надо рисовать. Я писал на скоро рука в данном случае, но вообще название переменных стараюсь всегда продумывать. Но грешок ест – люблю короткие имена внутри отдельновзятой функции (все равно дальше функции они не уходят).
По поводу z_ish. В Экселе я на ВБА не пишу, я периодически работаю в Access. Понятно, что ВБА что для экселя, что для аксэса одинаково. Так вот. Столкнулся вот конкретно с каким глюком. Когды ты работаешь внутри функции с “входящими” переменными, то можешь нарваться на глюк необоснованной неправильной работы.
Public Function StrokuVChislo(stroka As String) As Double
Если внутри этой функции ты много раз вызовешь переменную “stroka”, то этот глюк может вылезти. Но стоит в начале обявить внутренюю переменную, ей присвоить значение “stroka”, то эту переменную хоть миллион раз используй – все будет работать как положено. Вот такой, блин, глюк. С тех пор, как я на него потратил целый день (пока въехал в чем дело), у меня уже в автомате никогда не использовать входящие переменные, а сразу передавать их значение внутренним переменным.

Да еще.

Public Function StrokuVChislo(stroka As String) As Double
Dim dlinaStroki As Long, positsiya As Long, curSimvol As String, 
strokaOtvet as String, otvet As Double
StrokuVChislo = 0;
On Error GoTo 11
strokaOtvet = ""
dlinaStroki = Len(stroka)
For positsiya = 1 to dlinaStroki
   curSimvol = Mid(stroka, i, 1);
   if curSimvol = "," Then Goto 23
   if curSimvol = "." Then curSimvol = ","
   strokaOtvet = strokaOtvet & curSimvol
23
Next i
otvet = strokaOtvet
StrokuVChislo = otvet
11
End Function

Я немного подправил твое. Я считаю (ИМХО) что после точки возврата по ошибке ничего быть не должно (или или должно, но только ссылка на другую точку возврата). Ведь ты же не знаешь что будет содержаться в otvet в момент ошибки…

Сообщение отредактировал v_user: 01 Ноябрь 2006 – 08:21

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


#13

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 01 Ноябрь 2006 – 10:30

2v_user
в otvet в момент ошибки должен содержаться 0. Но только, если ошибка не произойдет во время присваиавания. (Тогда, по логике вещей, тоже должен быть ноль, но не уверен, признаюсь, момент упустил). Документации по VBA сейчас нет и я под него не пишу – просто по аналогии синтаксисов накатал. Так что думаю, что твой вариант живучей.

ушел на Linux-ресурсы.

  • Наверх


#14

v_user

Отправлено 02 Ноябрь 2006 – 09:01

2v_user
в otvet в момент ошибки должен содержаться 0. Но только, если ошибка не произойдет во время присваиавания. (Тогда, по логике вещей, тоже должен быть ноль, но не уверен, признаюсь, момент упустил). Документации по VBA сейчас нет и я под него не пишу – просто по аналогии синтаксисов накатал. Так что думаю, что твой вариант живучей.

<{POST_SNAPBACK}>

Все правильно. По идее должен быть ноль. Но:
– кто сказал что клюков не бывает у Микрософта? :D
– Это в данном случае так. Но часто бывает что приходится вносить изменения в код (особенно если он дастаточно большой), и в итоге ситуация меняется, а об действии после возврата по ошибке как-то забываешь. Сколько раз сам же на свои грабли наступал, теперь вот всегда этот момент контролирую (даже если и не надо, как в данном случае).

Кстати, еще. Нашел еще ошибочку у тебя. При объявлении переменных ты перешел на вторую строку. Просто так это нельзя делать, надо в конце первой строки после пробела добавить знак подчеркивания. (Да точки с запятой парачку в конце строки убрал).
Еще добавил вывод ошибки. Предпоследняя строка (здесь отремирована). Чтоб выводило – надо убрать апостроф.

Public Function StrokuVChislo(stroka As String) As Double
Dim dlinaStroki As Long, positsiya As Long, curSimvol As String, _
strokaOtvet as String, otvet As Double
StrokuVChislo = 0
On Error GoTo 11
strokaOtvet = ""
dlinaStroki = Len(stroka)
For positsiya = 1 to dlinaStroki
  curSimvol = Mid(stroka, positsiya, 1)
  if curSimvol = "," Then Goto 23
  if curSimvol = "." Then curSimvol = ","
  strokaOtvet = strokaOtvet & curSimvol
23
Next positsiya
otvet = strokaOtvet
StrokuVChislo = otvet
11
'MsgBox Err.Description
End Function

Короче вот этот проверил, работает.

Сообщение отредактировал v_user: 02 Ноябрь 2006 – 09:20

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


#15

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 02 Ноябрь 2006 – 09:29

Кстати, еще. Нашел еще ошибочку у тебя. При объявлении переменных ты перешел на вторую строку. Просто так это нельзя делать, надо в конце первой строки после пробела добавить знак подчеркивания. (Да точки с запятой парачку в конце строки убрал).

Это все уже автоматом сделано (рефлекс) – у меня основной язык C++. Соответственно, по тому и точки с запятой в конце строк, и подчерка нет.

ушел на Linux-ресурсы.

  • Наверх


#16

v_user

Отправлено 02 Ноябрь 2006 – 09:42

Что-то автора темы не слышно, видать решил уже задачку сам как-то.

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


#17

alsuper

alsuper

    Новичок

  • Пользователи
  • Pip

  • 5 сообщений

Отправлено 02 Ноябрь 2006 – 10:13

Что-то автора темы не слышно, видать решил уже задачку сам как-то.

<{POST_SNAPBACK}>

О господа! Премного благодарен! так много ответов и не ожидал 🙂
я действительно не программер (хотя в школе на бейсике занял 2 место, но давно это было)), буду пытать разобраться в рекомендациях :-), об итогах напишу обязательно 🙂

данные берутся по ссылке http://www.lme.com/d…daily_metal.asp
импортируемые данные-верхняя таблица, и в середине правая (где курсы валют). Кстати с последней тоже косяк, необходимый мне курс евро отображаетсфя как дата (например сегодняшний курс 1.2755, в ячейке отображается как янв.55, а если посмотреть содержимое ячейки-01.01.2755)
Я знаю где-то в эксель есть что-то вроде отключения автоматического определения дат, но провозился час-неполучается найти где это.

  • Наверх


#18

v_user

Отправлено 02 Ноябрь 2006 – 10:42

Ну тут думаю надо делать Эксел в два листа.
Первый – промежуточный. Туда все импортируется. Все импортируется как текст! Второй лист итоговый – то что видно в Итоге. Там просто настрены ссылки на данные первого листа.
Когда экспортируешь как текст – все данные будут в том виде, как на сайте. А потом через ссылки (используя предложенну здесь функцию) числа сайта переводишь в числа понятные Эксель.

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


#19

alsuper

alsuper

    Новичок

  • Пользователи
  • Pip

  • 5 сообщений

Отправлено 02 Ноябрь 2006 – 12:52

Ну тут думаю надо делать Эксел в два листа.
Первый – промежуточный. Туда все импортируется. Все импортируется как текст! Второй лист итоговый – то что видно в Итоге. Там просто настрены ссылки на данные первого листа.
Когда экспортируешь как текст – все данные будут в том виде, как на сайте. А потом через ссылки (используя предложенну здесь функцию) числа сайта переводишь в числа понятные Эксель.

<{POST_SNAPBACK}>

Неполучается у меня, проверьте порядок действий
Порядок действий
Записываю любой макрос
Сервис-макрос-начать запись-ок
Alt f11, modules-module 1-кликая 2раза, в окно вставляю последнюю программу написанную v user
Сохраняюсь
На другом листе в ячейку пишу
=Convert_My(имя ячейки)

Пишет ошибку, формула содержит нераспознанный текст
И ещё, курс евро импортируется с точкой 1.2755 , что тоже не понятно экселю, для этого случая другой макрос?

  • Наверх


#20

v_user

Отправлено 02 Ноябрь 2006 – 02:59

Неполучается у меня, проверьте порядок действий
Порядок действий
Записываю любой макрос
Сервис-макрос-начать запись-ок
Alt f11, modules-module 1-кликая 2раза, в окно вставляю последнюю программу написанную v user
Сохраняюсь
На другом листе в ячейку пишу
=Convert_My(имя ячейки)

Пишет ошибку, формула содержит нераспознанный текст
И ещё, курс евро импортируется с точкой  1.2755 , что тоже не понятно экселю, для этого случая другой макрос?

<{POST_SNAPBACK}>

Если ты взял последнюю программу – то тогда не Convert_My, а StrokuVChislo (ErV ее переименовал, когда переписывал скрипт более понятно).
Это функция присутствует в списке. Т.е. когда вызываешь список стандартных функций, то среди там ОКРУЛ, СУММ, ЕСЛИ и т.д. будет еще и функция StrokuVChislo.

Сообщение отредактировал v_user: 02 Ноябрь 2006 – 03:01

Разве “Pentium M” – это мобильно? Вот “Тополь М” – это мобильно!

  • Наверх


Возможности Эксель позволяют выполнять вычисления практически любой сложности благодаря формулам и функциям. Однако иногда пользователи могут столкнуться с тем, что формула отказывается работать или вместо желаемого результата выдает ошибку. В данной статье мы рассмотрим, почему так получается, и какие действия предпринять для решения возникшей проблемы.

Содержание

  • Решение 1: меняем формат ячеек
  • Решение 2: отключаем режим “Показать формулы”
  • Решение 3: активируем автоматический пересчет формул
  • Решение 4: исправляем ошибки в формуле
  • Заключение

Решение 1: меняем формат ячеек

Очень часто Excel отказывается выполнять расчеты из-за того, что неправильно выбран формат ячеек.

Например, если задан текстовый формат, то вместо результата мы будем видеть просто саму формулу в виде обычного текста.

Формулы в ячейках Эксель в текстовом формате

В некоторых ситуациях, когда выбран не тот формат, результат может быть посчитан, но отображаться он будет совсем не так, как мы хотели бы.

Формулы в Эксель в формате даты

Очевидно, что формат ячеек нужно изменить, и делается это следующим образом:

  1. Чтобы определить текущий формат ячейки (диапазон ячеек), выделяем ее и, находясь во вкладке “Главная”, обращаем вниманием на группу инструментов “Число”. Здесь есть специальное поле, в котором показывается формат, используемый сейчас.Формулы в ячейках Excel в текстовом формате
  2. Выбрать другой формат можно из списка, который откроется после того, как мы кликнем по стрелку вниз рядом с текущим значением.Выбор формата для выделенных ячеек в Эксель

Формат ячеек можно сменить с помощью другого инструмента, который позволяет задать более расширенные настройки.

  1. Выбрав ячейку (или выделив диапазон ячеек) щелкаем по ней правой кнопкой мыши и в открывшемся списке жмем по команде “Формат ячеек”. Или вместо этого, после выделения жмем сочетание Ctrl+1.Переход в окно форматирования ячеек через контекстное меню в Excel
  2. В открывшемся окне мы окажемся во вкладке “Число”. Здесь в перечне слева представлены все доступные форматы, которые мы можем выбрать. С левой стороны отображаются настройки выбранного варианта, которые мы можем изменить на свое усмотрение. По готовности жмем OK.Выбор формата в окне форматирования ячеек в Эксель
  3. Чтобы изменения отразились в таблице, по очереди активируем режим редактирования для всех ячеек, в которых формула не работала. Выбрав нужный элемент перейти к редактированию можно нажатием клавиши F2, двойным кликом по нему или щелчком внутри строки формул. После этого, ничего не меняя, жмем Enter.Редактирование формулы в Эксель

Примечание: Если данных слишком много, на ручное выполнение последнего шага потребуется немало времени. В данном случае можно поступить иначе – воспользуемся Маркером заполнения. Но этот работает только в том случае, когда во всех ячейках используются одинаковая формула.

  1. Выполняем последний шаг только для самой верхней ячейки. Затем наводим указатель мыши на ее правый нижний угол, как только появится черный плюсик, зажав левую кнопку мыши тянем его до конца таблицы.Копирование формулы с помощью маркера заполнения в Excel
  2. Получаем столбец с результатами, посчитанными с помощью формул.Выделенный столбец с формулами в Эксель

Решение 2: отключаем режим “Показать формулы”

Когда мы вместо результатов видим сами формулы, это может быть связано с тем, что активирован режим показа формул, и его нужно отключить.

  1. Переключаемся во вкладку “Формулы”. В группе инструментов “Зависимость формул” щелкаем по кнопке “Показать формулы”, если она активна.Включение и отключение показа формул в таблице Эксель
  2. В результате, в ячейках с формулами теперь будут отображаться результаты вычислений. Правда, из-за этого могут измениться границы столбцов, но это поправимо.Результаты в ячейках с формулами в Эксель

Решение 3: активируем автоматический пересчет формул

Иногда может возникать ситуация, когда формула посчитала какой-то результат, однако, если мы решим изменить значение в одной из ячеек, на которую формула ссылается, пересчет выполнен не будет. Это исправляется в параметрах программы.

  1. Заходим в меню “Файл”.Переход в меню Файл в Эксель
  2. В перечне слева выбираем раздел “Параметры”.Переход в Параметры Excel
  3. В появившемся окне переключаемся в подраздел “Формулы”. В правой части окна в группе “Параметры вычислений” ставим отметку напротив опции “автоматически”, если выбран другой вариант. По готовности щелкаем OK.Включение автоматического вычисления формул в Эксель
  4. Все готово, с этого момента все результаты по формулам будут пересчитываться в автоматическом режиме.

Решение 4: исправляем ошибки в формуле

Если в формуле допустить ошибки, программа может воспринимать ее как простое текстовое значение, следовательно, расчеты по ней выполнятся не будут. Например, одной из самых популярных ошибок является пробел, установленный перед знаком “равно”. При этом помним, что знак “=” обязательно должен стоять перед любой формулой.

Ненужный пробел перед формулой в Эксель

Также, довольно часто ошибки допускаются в синтаксисах функций, так как заполнить их не всегда просто, особенно, когда используется несколько аргументов. Поэтому, рекомендуем использовать Мастер функций для вставки функции в ячейку.

Вставка функции в ячейку Excel

Чтобы формула заработала, все что нужно сделать – внимательно проверить ее и исправить все выявленные ошибки. В нашем случае нужно просто убрать пробел в самом начале, который не нужен.

Редактирование формулы в Эксель

Иногда проще удалить формулу и написать ее заново, чем пытаться искать ошибку в уже написанной. То же самое касается функций и их аргументов.

Распространенные ошибки

В некоторых случаях, когда пользователь допустил ошибку при вводе формулы, в ячейке могут отображаться такие значения:

  • #ДЕЛ/0! – результат деления на ноль;
  • #Н/Д – ввод недопустимых значений;
  • #ЧИСЛО! – неверное числовое значение;
  • #ЗНАЧ! – используется неправильный вид аргумента в функции;
  • #ПУСТО! – неверно указан адрес дапазона;
  • #ССЫЛКА! – ячейка, на которую ссылалась формула, удалена;
  • #ИМЯ? – некорректное имя в формуле.

Если мы видим одну из вышеперечисленных ошибок, в первую очередь проверяем, все ли данные в ячейках, участвующих в формуле, заполнены корректно. Затем проверяем саму формулу и наличие в ней ошибок, в том числе тех, которые противоречат законам математики. Например, не допускается деление на ноль (ошибка #ДЕЛ/0!).

Ошибка деления на ноль в Экселе

В случаях, когда приходится иметь со сложными функциями, которые ссылаются на много ячеек, можно воспользоваться инструментов проверки.

  1. Отмечаем ячейку, содержащую ошибку. Во вкладке “Формулы” в группе инструментов “Зависимости формул” жмем кнопку “Вычислить формулу”.Функция вычисления формулы в Эксель
  2. В открывшемся окне будет отображаться пошаговая информация по расчету. Для этого нажимаем кнопку “Вычислить” (каждое нажатие осуществляет переход к следующему шагу).Окно вычисления формулы в Excel
  3. Таким образом, можно отследить каждый шаг, найти ошибку и устранить ее.

Также можно воспользоваться полезным инструментом “Проверка ошибок”, который расположен в том же блоке.

Функция проверки ошибок в формуле в Эксель

Откроется окно, в котором будет описана причина ошибки, а также предложен ряд действий касательно нее, в т.ч. исправление в строке формул.

Окно проверки ошибок в Excel

Заключение

Работа с формулами и функциями – одна из главных функциональных возможностей Excel, и, несомненно, одно из основных направлений использования программы. Поэтому очень важно знать, какие проблемы могут возникать при работе с формулами, и как их можно исправить.

#1

alsuper

    Новичок

  • Пользователи
  • Pip

  • 5 сообщений

Отправлено 30 Октябрь 2006 — 02:12

с помощью импорта внешних данных с сайта получаю числовые данные. выходят они в таком формате 2,840.00 что означает 2840. Из-за последних трёх символов .00 невозможно вставить в формулу для автоматического расчёта. Как сделать либо автоматическое убирание этих символов, либо возможность расчёта данных чисел в формулах?

  • Наверх

#2

DeBOBAHer

DeBOBAHer

  • Город:)
  • Интересы:SithAdmin

Отправлено 30 Октябрь 2006 — 02:42

Можно попытаться настроить формат чисел в Windows в региональных настройках.

Какой же русский не любит быстрой езды — бессмысленной и беспощадной!
Нет такой чистой и светлой мысли, которую бы русский человек не смог бы выразить в грязной матерной форме.
Еще никто так, как русские, не глушил рыбу! (в Тихом океане — да космической станцией!)

  • Наверх

#3

joy

joy

  • Город:МО
  • Интересы:догадайтесь с трех раз… Вы знали!!!

Отправлено 30 Октябрь 2006 — 02:47

думаешь, поможет? он же выдирает это со странички в браузере. соответственно, как страничка сделана, так он и выдерет. или ты не это имел в виду?

«Что использовать чтобы огурцы ложкой банка майонеза.» ©bash.org.ru…

  • Наверх

#4

megaforce

megaforce

    Новичок

  • Пользователи
  • Pip

  • 1 сообщений

Отправлено 30 Октябрь 2006 — 02:55

Настройка — Панель управления — Языки и стандарты — Числа — Разделитель целой и дробной части числа

  • Наверх

#5

v_user

Отправлено 30 Октябрь 2006 — 03:00

Настройка — Панель управления — Языки и стандарты — Числа — Разделитель целой и дробной части числа

<{POST_SNAPBACK}>

Да, можно так. Но это тогда коснется всех программ.

Думаю наилучшее написать скрипт преобразования на VBA ввиде функции (т.е. подсьавляется в форулу). А сам скрипт прост: берет значение как текст, перебирает по каждому символу, запятые просто выкидывает, а точку меняет на запятую. Все, вопрос решен.

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

#6

v_user

Отправлено 30 Октябрь 2006 — 03:31

Вот, не поленился, написал.

Открой Ексел, запиши какой угодно макрос (главное чтоб он был). Теперь по <Alt><F11> открываешь окно VBA. Там найдешь раздел «Modules». В нем подраздел, по умолчанию «Module1». Открываешь этот подраздел. Там на VBA будет записан твой макрос. Нафиг стираешь его, а вместо него пишешь вот такой тест:

Public Function Convert_My(str As String) As Double
Dim dl_str As Long, i As Long, tmp As String, z_ish As String, z_end As String, otvet As Double
Convert_My = 0
On Error GoTo 11
z_end = ""
ish = str
dl_str = Len(ish)
For i = 1 To dl_str
    tmp = Mid(ish, i, 1)
    If tmp = "," Then GoTo 23
    If tmp = "." Then tmp = ","
    z_end = z_end & tmp
23
Next i
otvet = z_end
Convert_My = otvet
11
End Function

Сохраняешься. Теперь в итоговую ячеку прописываешь формулу, например =Convert_My(A5).
В ячейке А5 находится значение например 2,685.34, и функция будет возвращать в итоговую ячейку нормальной число 2685,34.

З.Ы. Подправил, ошибка была :D

Сообщение отредактировал v_user: 31 Октябрь 2006 — 03:35

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

#7

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 30 Октябрь 2006 — 10:25

2 v_user
По-моему загон, и по-любому должныа быть возможность в эксель это настроить.

Здесь, например: Меню «Сервис»-«Параметры», вкладка «Международные». Убрать галочку «Использовать системные разделители» и поставить нужный «Разделитель дробной и целой части». По крайней мере данные можно импортировать, потом изменить формат на нужный и сохранить. А можно прямо так и работать.

Прикрепленные файлы

  • Прикрепленный файл
     excel.png   8,63К
      66 Количество загрузок:

Сообщение отредактировал ErV: 30 Октябрь 2006 — 10:27

ушел на Linux-ресурсы.

  • Наверх

#8

v_user

Отправлено 31 Октябрь 2006 — 06:52

2 v_user
По-моему загон, и по-любому должныа быть возможность в эксель это настроить.

Здесь, например: Меню «Сервис»-«Параметры», вкладка «Международные». Убрать галочку «Использовать системные разделители» и поставить нужный «Разделитель дробной и целой части». По крайней мере данные можно импортировать, потом изменить формат на нужный и сохранить. А можно прямо так и работать.

<{POST_SNAPBACK}>

Так в том-то и дело, что это коснется всего Эксель. Да сколько уже раз сталкивался что люди изменив запятую на точку уже получали невнятный гемор. Одну свою задачу решали (а это решение через кривые руки программера который даже экспорт/импорт организовать не может по человечески), но другие наживали.
Что ж, если такой подход удовлетворяет, то ради бога. Только вот разбираться в числах, где запятая — разделитель разрядов, а точка — есть «десятичная точка» (вместо соответсвенно пробела и запятой) — думаю «продвинотому» бухгалтеру/менеджеру будет не весело.

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

#9

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 31 Октябрь 2006 — 03:24

Я просто думаю, что автор — не программер, это раз.
А следовательно, ему проще запомнить где галочка, чем весь твой скрипт. (без обид)
Переформатировал бы ты его, что ли… тут классный тэг есть — [code=auto:0]
читать удобнее, правда хайлайтинг и всякие загоны со шрифтами убивает.

ушел на Linux-ресурсы.

  • Наверх

#10

v_user

Отправлено 31 Октябрь 2006 — 03:39

Я просто думаю, что автор — не программер, это раз.
А следовательно, ему проще запомнить где галочка, чем весь твой скрипт. (без обид)
Переформатировал бы ты его, что ли… тут классный тэг есть — [code=auto:0]
читать удобнее, правда хайлайтинг и всякие загоны со шрифтами убивает.

<{POST_SNAPBACK}>

Да не, какие обиды.
Просто меня иногда нервируют программисты, которые делают что-то через одно место и/или не до конца. Очень часто это у них в превычке (они так начинали). Вот я и акцентировал на том, что если делать, то так чтоб работало, а не чтоб сперва настроить а уж потом работало.
Кстати, переделал, спс за подсказку про тэг. И кстати изложить посторался как программировать как для новиска.

Сообщение отредактировал v_user: 31 Октябрь 2006 — 03:41

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

#11

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 31 Октябрь 2006 — 09:21

Ещё рекомендация.
Я когда информатикам задачи делал ради прикола :) ,
обнаружил, что если человек не знает инглиш, то знает транслит.
Можно изменить имена и ему все будет понятно (Кстати, если не ошибаюсь, по русски в офисе тоже можно программить).
И ещё: у тебя z_ish не используется, как я понял.
И зачем копировать str в ish?
Вот так например (не факт что не сломал, не тестил, по тексту должно работать):

Public Function StrokuVChislo(stroka As String) As Double
Dim dlinaStroki As Long, positsiya As Long, curSimvol As String, 
strokaOtvet as String, otvet As Double
otvet = 0;
On Error GoTo 11
strokaOtvet = ""
dlinaStroki = Len(stroka)
For positsiya = 1 to dlinaStroki
    curSimvol = Mid(stroka, i, 1);
    if curSimvol = "," Then Goto 23
    if curSimvol = "." Then curSimvol = ","
    strokaOtvet = strokaOtvet & curSimvol
23
Next i
otvet = strokaOtvet
11
StrokuVChislo = otvet
End Function

У меня сейчас диск с офисом грохнулся, нет документации по бейсику и влом. Если хош, могу переделать в более человеческий вид на досуге.

Сообщение отредактировал ErV: 31 Октябрь 2006 — 09:36

ушел на Linux-ресурсы.

  • Наверх

#12

v_user

Отправлено 01 Ноябрь 2006 — 07:54

Все верно. Так и надо рисовать. Я писал на скоро рука в данном случае, но вообще название переменных стараюсь всегда продумывать. Но грешок ест — люблю короткие имена внутри отдельновзятой функции (все равно дальше функции они не уходят).
По поводу z_ish. В Экселе я на ВБА не пишу, я периодически работаю в Access. Понятно, что ВБА что для экселя, что для аксэса одинаково. Так вот. Столкнулся вот конкретно с каким глюком. Когды ты работаешь внутри функции с «входящими» переменными, то можешь нарваться на глюк необоснованной неправильной работы.
Public Function StrokuVChislo(stroka As String) As Double
Если внутри этой функции ты много раз вызовешь переменную «stroka», то этот глюк может вылезти. Но стоит в начале обявить внутренюю переменную, ей присвоить значение «stroka», то эту переменную хоть миллион раз используй — все будет работать как положено. Вот такой, блин, глюк. С тех пор, как я на него потратил целый день (пока въехал в чем дело), у меня уже в автомате никогда не использовать входящие переменные, а сразу передавать их значение внутренним переменным.

Да еще.

Public Function StrokuVChislo(stroka As String) As Double
Dim dlinaStroki As Long, positsiya As Long, curSimvol As String, 
strokaOtvet as String, otvet As Double
StrokuVChislo = 0;
On Error GoTo 11
strokaOtvet = ""
dlinaStroki = Len(stroka)
For positsiya = 1 to dlinaStroki
   curSimvol = Mid(stroka, i, 1);
   if curSimvol = "," Then Goto 23
   if curSimvol = "." Then curSimvol = ","
   strokaOtvet = strokaOtvet & curSimvol
23
Next i
otvet = strokaOtvet
StrokuVChislo = otvet
11
End Function

Я немного подправил твое. Я считаю (ИМХО) что после точки возврата по ошибке ничего быть не должно (или или должно, но только ссылка на другую точку возврата). Ведь ты же не знаешь что будет содержаться в otvet в момент ошибки…

Сообщение отредактировал v_user: 01 Ноябрь 2006 — 08:21

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

#13

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 01 Ноябрь 2006 — 10:30

2v_user
в otvet в момент ошибки должен содержаться 0. Но только, если ошибка не произойдет во время присваиавания. (Тогда, по логике вещей, тоже должен быть ноль, но не уверен, признаюсь, момент упустил). Документации по VBA сейчас нет и я под него не пишу — просто по аналогии синтаксисов накатал. Так что думаю, что твой вариант живучей.

ушел на Linux-ресурсы.

  • Наверх

#14

v_user

Отправлено 02 Ноябрь 2006 — 09:01

2v_user
в otvet в момент ошибки должен содержаться 0. Но только, если ошибка не произойдет во время присваиавания. (Тогда, по логике вещей, тоже должен быть ноль, но не уверен, признаюсь, момент упустил). Документации по VBA сейчас нет и я под него не пишу — просто по аналогии синтаксисов накатал. Так что думаю, что твой вариант живучей.

<{POST_SNAPBACK}>

Все правильно. По идее должен быть ноль. Но:
— кто сказал что клюков не бывает у Микрософта? :D
— Это в данном случае так. Но часто бывает что приходится вносить изменения в код (особенно если он дастаточно большой), и в итоге ситуация меняется, а об действии после возврата по ошибке как-то забываешь. Сколько раз сам же на свои грабли наступал, теперь вот всегда этот момент контролирую (даже если и не надо, как в данном случае).

Кстати, еще. Нашел еще ошибочку у тебя. При объявлении переменных ты перешел на вторую строку. Просто так это нельзя делать, надо в конце первой строки после пробела добавить знак подчеркивания. (Да точки с запятой парачку в конце строки убрал).
Еще добавил вывод ошибки. Предпоследняя строка (здесь отремирована). Чтоб выводило — надо убрать апостроф.

Public Function StrokuVChislo(stroka As String) As Double
Dim dlinaStroki As Long, positsiya As Long, curSimvol As String, _
strokaOtvet as String, otvet As Double
StrokuVChislo = 0
On Error GoTo 11
strokaOtvet = ""
dlinaStroki = Len(stroka)
For positsiya = 1 to dlinaStroki
  curSimvol = Mid(stroka, positsiya, 1)
  if curSimvol = "," Then Goto 23
  if curSimvol = "." Then curSimvol = ","
  strokaOtvet = strokaOtvet & curSimvol
23
Next positsiya
otvet = strokaOtvet
StrokuVChislo = otvet
11
'MsgBox Err.Description
End Function

Короче вот этот проверил, работает.

Сообщение отредактировал v_user: 02 Ноябрь 2006 — 09:20

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

#15

ErV

ErV

  • Город:Воронеж
  • Интересы:C++, coding, programming, 3d-programming, Game-development, OpenGL, DirectX.

Отправлено 02 Ноябрь 2006 — 09:29

Кстати, еще. Нашел еще ошибочку у тебя. При объявлении переменных ты перешел на вторую строку. Просто так это нельзя делать, надо в конце первой строки после пробела добавить знак подчеркивания. (Да точки с запятой парачку в конце строки убрал).

Это все уже автоматом сделано (рефлекс) — у меня основной язык C++. Соответственно, по тому и точки с запятой в конце строк, и подчерка нет.

ушел на Linux-ресурсы.

  • Наверх

#16

v_user

Отправлено 02 Ноябрь 2006 — 09:42

Что-то автора темы не слышно, видать решил уже задачку сам как-то.

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

#17

alsuper

alsuper

    Новичок

  • Пользователи
  • Pip

  • 5 сообщений

Отправлено 02 Ноябрь 2006 — 10:13

Что-то автора темы не слышно, видать решил уже задачку сам как-то.

<{POST_SNAPBACK}>

О господа! Премного благодарен! так много ответов и не ожидал :-)
я действительно не программер (хотя в школе на бейсике занял 2 место, но давно это было)), буду пытать разобраться в рекомендациях :-), об итогах напишу обязательно :-)

данные берутся по ссылке http://www.lme.com/d…daily_metal.asp
импортируемые данные-верхняя таблица, и в середине правая (где курсы валют). Кстати с последней тоже косяк, необходимый мне курс евро отображаетсфя как дата (например сегодняшний курс 1.2755, в ячейке отображается как янв.55, а если посмотреть содержимое ячейки-01.01.2755)
Я знаю где-то в эксель есть что-то вроде отключения автоматического определения дат, но провозился час-неполучается найти где это.

  • Наверх

#18

v_user

Отправлено 02 Ноябрь 2006 — 10:42

Ну тут думаю надо делать Эксел в два листа.
Первый — промежуточный. Туда все импортируется. Все импортируется как текст! Второй лист итоговый — то что видно в Итоге. Там просто настрены ссылки на данные первого листа.
Когда экспортируешь как текст — все данные будут в том виде, как на сайте. А потом через ссылки (используя предложенну здесь функцию) числа сайта переводишь в числа понятные Эксель.

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

#19

alsuper

alsuper

    Новичок

  • Пользователи
  • Pip

  • 5 сообщений

Отправлено 02 Ноябрь 2006 — 12:52

Ну тут думаю надо делать Эксел в два листа.
Первый — промежуточный. Туда все импортируется. Все импортируется как текст! Второй лист итоговый — то что видно в Итоге. Там просто настрены ссылки на данные первого листа.
Когда экспортируешь как текст — все данные будут в том виде, как на сайте. А потом через ссылки (используя предложенну здесь функцию) числа сайта переводишь в числа понятные Эксель.

<{POST_SNAPBACK}>

Неполучается у меня, проверьте порядок действий
Порядок действий
Записываю любой макрос
Сервис-макрос-начать запись-ок
Alt f11, modules-module 1-кликая 2раза, в окно вставляю последнюю программу написанную v user
Сохраняюсь
На другом листе в ячейку пишу
=Convert_My(имя ячейки)

Пишет ошибку, формула содержит нераспознанный текст
И ещё, курс евро импортируется с точкой 1.2755 , что тоже не понятно экселю, для этого случая другой макрос?

  • Наверх

#20

v_user

Отправлено 02 Ноябрь 2006 — 02:59

Неполучается у меня, проверьте порядок действий
Порядок действий
Записываю любой макрос
Сервис-макрос-начать запись-ок
Alt f11, modules-module 1-кликая 2раза, в окно вставляю последнюю программу написанную v user
Сохраняюсь
На другом листе в ячейку пишу
=Convert_My(имя ячейки)

Пишет ошибку, формула содержит нераспознанный текст
И ещё, курс евро импортируется с точкой  1.2755 , что тоже не понятно экселю, для этого случая другой макрос?

<{POST_SNAPBACK}>

Если ты взял последнюю программу — то тогда не Convert_My, а StrokuVChislo (ErV ее переименовал, когда переписывал скрипт более понятно).
Это функция присутствует в списке. Т.е. когда вызываешь список стандартных функций, то среди там ОКРУЛ, СУММ, ЕСЛИ и т.д. будет еще и функция StrokuVChislo.

Сообщение отредактировал v_user: 02 Ноябрь 2006 — 03:01

Разве «Pentium M» — это мобильно? Вот «Тополь М» — это мобильно!

  • Наверх

Ципихович Эндрю

1487 / 461 / 52

Регистрация: 10.04.2009

Сообщений: 7,903

1

Формула содержит не распознанный текст

29.03.2014, 11:38. Показов 2244. Ответов 2

Метки нет (Все метки)


здравствуйте, подскажите почему я вижу сообщение «Формула содержит не распознанный текст»
после прохода строки кода:

Visual Basic
1
Worksheets("Лист1").Range(Столбец_буквой & 13).Formula = "=СУММ(" & Столбец_буквой & "6:" & Столбец_буквой & "12)"

Спасибо

0

15131 / 6405 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

29.03.2014, 11:45

2

Если .Formula, то имя функции SUM.
Если .FormulaLocal, то СУММ, но работать будет только на русском Экселе.

0

1487 / 461 / 52

Регистрация: 10.04.2009

Сообщений: 7,903

29.03.2014, 12:01

 [ТС]

3

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

Столбец_буквой

= «В»

Добавлено через 15 минут

Цитата
Сообщение от Казанский
Посмотреть сообщение

Если .Formula, то имя функции SUM.
Если .FormulaLocal, то СУММ, но работать будет только на русском Экселе.

точно, спасибо

0

Как мы все знаем, в основном используется MS Excel, известный своими функциями, формулами и макросами. Но что, если при написании формулы у нас возникают проблемы или мы не можем получить желаемый результат в ячейке, так как мы неправильно сформулировали функцию. Вот почему MS Excel предоставляет множество встроенных инструментов для аудита формул и устранения неполадок формул.

Инструменты, которые мы можем использовать для аудита и устранения неполадок формул в Excel:

  1. Прецеденты трассировки
  2. Следить за зависимыми
  3. Удалить стрелки
  4. Показать формулы
  5. Проверка ошибок
  6. Оценить формулу

Инструменты аудита в Excel

Примеры инструментов аудита в Excel

Мы узнаем о каждом из вышеперечисленных инструментов аудита один за другим, используя несколько примеров в Excel.

Вы можете скачать этот шаблон Excel для инструментов аудита здесь — Шаблон Excel для инструментов аудита

# 1 — Отслеживание прецедентов

Предположим, у нас есть следующая формула в ячейке D2 для расчета процентов по счету FD в банке.

Инструменты аудита, пример 1

Если мы хотим проверить прецеденты формулы, мы можем нажать F2 для перехода в режим редактирования после выбора нужной ячейки так, чтобы ячейки прецедентов были окаймлены разными цветами и одного цвета, записывается ссылка на ячейку.

Инструменты аудита, пример 1-1

Мы видим, что A2 написано синим цветом в ячейке формулы, и этим же цветом выделена ячейка A2.

Таким же образом

Ячейка B2 имеет красный цвет.

Ячейка C2 имеет фиолетовый цвет.

Этот способ хорош, но у нас есть более удобный способ проверить прецеденты для ячейки формулы.

Чтобы отследить прецеденты, мы можем использовать ‘Следы прецедентов’ команда в ‘Формула аудита’ группа под ‘Формулы’ таб.

Инструменты аудита, пример 1-2

Нам нужно выбрать ячейку с формулой, а затем нажать на ‘Следы прецедентов’ команда. Затем вы увидите стрелку, как показано ниже.

Инструменты аудита, пример 1-3

Мы видим, что прецедентные ячейки выделены синими точками.

# 2 — Удалить стрелки

Чтобы удалить эти стрелки, мы можем использовать ‘Удалить стрелки’ команда в ‘Формульный аудит’ группа под ‘Формулы’ таб.

Инструменты аудита, пример 1-4

# 3 — Следить за зависимыми

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

Воспользуемся этой командой на примере.

Предположим, у нас есть четыре суммы, в которые мы можем инвестировать. Мы хотим знать, сколько процентов мы можем заработать, если будем инвестировать.

Инструменты аудита, пример 2

Мы можем видеть, что на изображении выше мы применили формулу для расчета процентов с суммой 1 и указанным процентом процентов и продолжительностью в году.

Мы скопируем формулу и вставим ее в соседние ячейки для суммы 2, суммы 3 и суммы 4. Можно заметить, что мы использовали абсолютную ссылку на ячейку для ячеек G2 и I2, поскольку мы не хотим изменять эти ссылки. при копировании и вставке.

Пример 2-1 инструментов аудита

Теперь, если мы хотим проверить, зависят ли какие ячейки от ячейки G2, мы будем использовать «Следить за зависимыми» команда доступна в ‘Формула аудита’ группа под ‘Формулы’ таб.

Инструменты аудита (зависимые от трассировки)

Выберите ячейку G2 и нажмите на «Следить за зависимыми» команда.

Инструменты аудита, пример 2-2

На изображении выше мы можем видеть линии со стрелками, где стрелки указывают, какие ячейки зависят от ячеек.

Теперь удалим линии со стрелками, используя ‘Удалить стрелки’ команда.

# 4 — Показать формулы

Мы можем использовать эту команду для отображения формул, написанных на листе Excel. Сочетание клавиш для этой команды: Ctrl + ~.

Инструменты аудита, пример 3

См. Изображение ниже, где мы можем видеть формулы в ячейке.

Инструменты аудита, пример 3-1

Мы видим, что вместо результатов формулы мы можем видеть формулу. Для сумм формат валюты не отображается.

Чтобы отключить этот режим, нажмите ‘Ctrl + ~’ еще раз или нажмите на ‘Показать формулы’ команда.

# 5 — Проверка ошибок

Эта команда используется для проверки ошибки в указанной формуле или функции.

Давайте рассмотрим пример, чтобы понять это.

См. Изображение ниже, где у нас есть ошибка в функции, примененной к результату.

Инструменты аудита, пример 4

Теперь, чтобы решить эту ошибку, мы будем использовать «Проверка ошибок» команда.

Шаги будут:

Выберите ячейку, в которой записана формула или функция, затем нажмите «Проверка ошибок».

Инструменты аудита, пример 4-1

Когда мы нажимаем на команду, мы получаем следующее диалоговое окно с заголовком «Проверка ошибок».

Инструменты аудита, пример 4-2

В приведенном выше диалоговом окне можно увидеть, что произошла некоторая ошибка недопустимого имени. Формула содержит нераспознанный текст.

Если мы используем функцию или построили формулу впервые, то мы можем нажать на ‘Помощь по этой ошибке’ Кнопка, которая откроет страницу справки для функции в браузере, где мы сможем просмотреть всю связанную информацию в Интернете, понять причину и найти все возможные решения.

Щелкнув сейчас по этой кнопке, мы обнаружим следующую страницу.

Инструменты аудита, пример 4-3

На этой странице мы узнаем об ошибке, которая возникает, когда

  1. Формула относится к имени, которое не было определено. Это означает, что имя функции или именованный диапазон ранее не были определены.
  2. В названии формулы есть опечатка. Это означает, что произошла опечатка.

Если мы использовали эту функцию ранее и знаем о ней, то мы можем нажать на ‘Показать шаги расчета’ кнопку, чтобы проверить, как оценка функции приводит к ошибке.

Если мы нажмем на эту кнопку, отобразятся следующие шаги:

  • Следующее диалоговое окно отображается, когда мы нажимаем на ‘Показать шаги расчета’ кнопка.

показать шаги расчетов Пример 4-4

  • После нажатия на ‘Оценить’ кнопка, подчеркнутое выражение, т. е. «IIF,» оценивается и дает следующую информацию, отображаемую в диалоговом окне.

подчеркнутое выражение Пример 4-5

Как видно на изображении выше, ‘IIF’ Выражение оценивается как ошибка, то есть ‘#NAME?’. Теперь следующее выражение или ссылка, то есть B2, было подчеркнуто. Если мы нажмем на «Шаг внутрь» кнопку, то мы также можем проверить внутренние детали шага и выйти, нажав кнопку ‘Выйти’ кнопка.

Функциональная ошибка Пример 4-6

Оценить ошибку Пример 4-7

  • Теперь мы нажмем на ‘Оценить’ кнопку, чтобы проверить результат подчеркнутого выражения. После нажатия получаем следующий результат.

Оцените пример 4-8

  • После нажатия на ‘Оценить’ кнопку, получаем результат примененной функции.

Перезапустить Пример 4-9

  • В результате мы получили ошибку, и, анализируя функцию шаг за шагом, мы узнали, что в IIF. Для этого мы можем использовать ‘Вставить функцию’ команда в ‘Библиотека функций’ группу на вкладке «Формулы».

Формулы Пример 4-10

Когда мы набирали ‘если,’ у нас в списке появилась аналогичная функция, нам нужно выбрать соответствующую функцию.

Пример функции вставки 4-11

После выбора ‘Если’ функция, мы получаем следующее диалоговое окно с текстовыми полями для аргумента, и мы заполним все детали.

Аргументы функции Пример 4-12

После нажатия на ‘Хорошо,’ получаем результат в ячейке. Мы скопируем функцию для всех студентов.

Инструменты аудита, пример 4-13.png

То, что нужно запомнить

  1. Если мы активируем команду «Показать формулы», даты также будут показаны в числовом формате.
  2. При оценке формулы мы также можем использовать F9 как ярлык в Excel.

УЗНАТЬ БОЛЬШЕ >>

Post Views: 1 518

На чтение 2 мин Опубликовано 29.05.2016

В этой статье мы расскажем о том, как справляться с некоторыми наиболее распространёнными ошибками формул в Excel.

Содержание

  1. Ошибка #####
  2. Ошибка #ИМЯ?
  3. Ошибка #ЗНАЧ!
  4. Ошибка #ДЕЛ/0!
  5. Ошибка #ССЫЛКА!

Ошибка #####

Появление в ячейке такого кода ошибки означает, что столбец недостаточно широк, чтобы отобразить значение полностью.

Ошибки в формулах Excel

Наведите указатель мыши на правую границу столбца рядом с его заголовком (в нашем примере это столбец A), чтобы указатель принял вид, как на рисунке ниже. Нажмите левую кнопку мыши и перетащите границу столбца до нужной ширины.

Ошибки в формулах Excel

Совет: Если дважды кликнуть по границе столбца A рядом с его заголовком, то ширина столбца автоматически изменится и будет соответствовать самой широкой ячейке столбца.

Ошибка #ИМЯ?

Ошибка #ИМЯ? (#NAME?) возникает в том случае, когда Excel не может распознать текст в формуле (например, из-за опечатки).

Ошибки в формулах Excel

Просто исправьте SU на SUM.

Ошибки в формулах Excel

Ошибка #ЗНАЧ!

Excel показывает сообщение об ошибке #ЗНАЧ! (#VALUE!) в том случае, когда для формулы введён аргумент не подходящего типа.

Ошибки в формулах Excel

a) Измените значение в ячейке A3.

b) Используйте функцию, которая игнорирует ячейки, содержащие текст.

Ошибки в формулах Excel

Ошибка #ДЕЛ/0!

Сообщение об ошибке #ДЕЛ/0! (#DIV/0!) появляется при попытке деления числа на ноль или на пустую ячейку.

Ошибки в формулах Excel

a) Изменить значение в ячейке A2 на любое число, не равное нулю.

b) Предотвратите возникновение ошибки при помощи логической функции ЕСЛИ (IF).

Ошибки в формулах Excel

Пояснение: Если ячейка A2 будет равна нулю, то значением ячейки A3 будет пустая строка. Если нет – то в ячейке A3 будет вычислен результат формулы =A1/A2.

Ошибка #ССЫЛКА!

Сообщение об ошибке #ССЫЛКА! (#REF!) говорит о том, что формула ссылается на ячейку, которая не существует.

  1. В ячейке C1 содержатся ссылки на ячейки A1 и B1.Ошибки в формулах Excel
  2. Удаляем столбец B. Для этого кликаем по заголовку столбца правой кнопкой и в контекстном меню нажимаем Удалить (Delete).Ошибки в формулах Excel
  3. Выделите ячейку B1. Ссылка на ячейку B1 в формуле превратилась в ссылку на несуществующую ячейку.Ошибки в формулах Excel
  4. Чтобы исправить эту ошибку, нужно либо удалить несуществующую ссылку в формуле, либо отменить действие, кликнув по иконке Отменить (Undo) на панели быстрого доступа (или нажать Ctrl+Z).Ошибки в формулах Excel

Оцените качество статьи. Нам важно ваше мнение:

Андрей Воронин



Просветленный

(21647),
закрыт



10 лет назад

Доброго времени суток. Помогите с проблемой. Начал изучать VBA. И на первом же примере простейший макрос не работает. Пишу такой код

Public Sub MySub()
Range(“А3”).Select
ActiveCell.Formula = “=СУММ (A1:A2)”
End Sub

Всё как в примере в книге. Перед выполнением макроса ввожу цифры в ячейки А1 и А2. И сумма в А3 не считается. Пишет “формула содержит нераспознанный текст”. Причём если в ячейке формулу прописать
=СУММ (A1:A2) то всё считается, а через макрос не работает. В чём проблема? ?

Максим Головченко

Профи

(941)


10 лет назад

У меня так получилось
Sub Макрос1()

‘ Макрос1 Макрос

Range(“B2”).Select
ActiveCell.FormulaR1C1 = “=SUM(R[-1]C[-1]:RC[-1])”

End Sub

В тех источниках по которым я учил написано, что нажимаешь на запись делаешь то, что тебе нужно, а потом смотришь на код который сгенерировался.

По моему просто в макросах программа не понимает росийский вариант названий формул. Нужно использовать английский. Например не “СРЗНАЧ” а ” AVERAGE”

Добавить комментарий