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

Вход

Регистрация

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

 

= Мир MS Excel/Статьи об Excel

МЕНЮ САЙТА
  • 1
  • 2
  • 3

КАТЕГОРИИ РАЗДЕЛА

ОПРОСЫ
Какой версией Excel Вы пользуетесь?
Всего ответов: 35740
Главная » Статьи » Эффективная работа в Excel » Приёмы работы с книгами, листами, диапазонами, ячейками

Число сохранено как текст или Почему не считается сумма?

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

 

В этой статье рассматриваются причины появления таких проблем и различные способы их устранения

 

Причина первая. Число сохранено как текст

 

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

Никакие изменения формата на Числовой, Общий или Дата ситуацию не исправляют, но если кликнуть в строку формул (или нажать F2), а затем Enter, то число становится числом, а дата датой. При большом количестве таких чисел вариант, согласитесь, неприемлемый.

 

Есть несколько способов решения данной проблемы

 

  • С помощью маркера ошибки и тега. Если в левом верхнем углу ячеек виден маркер ошибки (зелёный треугольник) и тег, то выделяем ячейки, кликаем мышкой по тегу и выбираем вариант Преобразовать в число

 

  • С помощью операции Найти/Заменить. Предположим, в таблице есть числа с десятичной запятой, сохраненные как текст. Выделяем диапазон с числами -- нажимаем Ctrl+h (либо находим на вкладке Главная или в меню Правка для версий до 2007 команду Заменить) -- в поле Найти вводим , (запятую) -- в поле Заменить на тоже вводим , (запятую) -- Заменить все. Таким образом, делая замену запятой на запятую, мы имитируем редактирование ячейки аналогично F2 -- Enter

 

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

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

 

Аналогичную замену можно проделать и формулой (см. ниже), используя функцию ПОДСТАВИТЬ()

 

  • С помощью Специальной вставки. Этот способ более универсальный, так как работает и с дробными числами, и с целыми, а также с датами. Выделяем любую пустую ячейку -- выполняем команду Копировать -- выделяем диапазон с проблемными числами -- Специальная вставка -- Сложить -- ОК. Таким образом, мы к числам (или датам) прибавляем 0, что никак не влияет на их значение, зато переводит в числовой формат

 

 

Вариантом этого приёма может быть умножение диапазона на 1

 

  • С помощью инструмента Текст по столбцам. Этот приём удобно использовать если преобразовать нужно один столбец, так как если столбцов несколько, то действия придётся повторять для каждого столбца отдельно. Итак, выделяем столбец с числами или датами, сохраненными как текст, устанавливаем формат ячейки Общий (для чисел можно установить, к примеру, Числовой или Финансовый). Далее выполняем команду Данные -- Текст по столбцам -- Готово
 
 
  • С помощью формул. Если таблица позволяет задействовать дополнительные столбцы, то для преобразования в число можно использовать формулы. Чтобы перевести текстовое значение в число, можно использовать двойной минус, сложение с нулём, умножение на единицу, функции ЗНАЧЕН(), ПОДСТАВИТЬ(). Более подробно можно почитать здесь. После преобразования полученный столбец можно скопировать и вставить как значения на место исходных данных

 

 

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

Приведу два примера макросов:

1) умножение на 1

 

Sub conv()
Dim c As Range
    For Each c In Selection
        If IsNumeric(c.Value) Then
            c.Value = c.Value * 1
            c.NumberFormat = "#,##0.00"
        End If
    Next
End Sub

 

2) текст по столбцам

 

Sub conv1()
    Selection.TextToColumns
    Selection.NumberFormat = "#,##0.00"
End Sub

 

Причина вторая. В записи числа присутствуют посторонние символы.

 

Чаще всего этими посторонними символами являются пробелы. Они могут располагаться как внутри числа в качестве разделителя разрядов, так и до/после числа. В этом случае, естественно, число становится текстом.

Убрать лишние пробелы также можно с помощью операции Найти/Заменить. В поле Найти вводим пробел, а поле Заменить на оставляем пустым, далее Заменить все. Если в числе были обычные пробелы, то этих действий будет достаточно. Но в числе могут встречаться так называемые неразрывные пробелы (символ с кодом 160). Такой пробел придётся скопировать прямо из ячейки, а затем вставить в поле Найти диалогового окна Найти/Заменить. Либо можно в поле Найти нажать сочетание клавиш Alt+0160 (цифры набираются на цифровой клавиатуре). 

 

Пробелы можно удалить и формулой. Варианты:

Для обычных пробелов: =--ПОДСТАВИТЬ(B4;" ";"")

Для неразрывных пробелов: =--ПОДСТАВИТЬ(B4;СИМВОЛ(160);"")

Сразу для тех и других пробелов: =--ПОДСТАВИТЬ(ПОДСТАВИТЬ(B4;СИМВОЛ(160);"");" ";"")

 

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

Категория: Приёмы работы с книгами, листами, диапазонами, ячейками | Добавил: Pelena (17.11.2014)
Просмотров: 10302 | Комментарии: 2 | Теги: число сохранено как текст, преобразование типов | Рейтинг: 5.0/2


Всего комментариев: 2
+1   Спам
1    Russel   (19.11.2014 14:03)
   Очень часто помогает просто выделить все ячейки, нажать на маркер ошибки и выбрать "преобразовать в число"

+1  
2    Pelena   (19.11.2014 14:53)
   Добавила этот вариант, спасибо за напоминание

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!