Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2009, 17:17   #1
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
Вопрос Удаление пробелов внутри строки

Добрый день!

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

Пример: ячейка А1 содержит 19 025,26
ячейка А2 содержит 198 955 645,45 и т.д.

Цикл сделать не проблема, но как удалить пробел(ы) внутри строки?

Функция Replace(значение ячеки, " ", "") не помогает

Итог: требуется получить числовые значения!
Maxx вне форума Ответить с цитированием
Старый 13.07.2009, 17:26   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

отметить диапазон, назначить формат "число" или "общий", выполнить "найти и заменить", найти пробелы, заменить на "ничего"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.07.2009, 17:31   #3
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

IgorGO, конечно же я это умею и знаю. Дело в том, что таких столбцов около 10 и данные обновляются часто.

Поэтому
Цитата:
отметить диапазон, назначить формат "число" или "общий", выполнить "найти и заменить", найти пробелы, заменить на "ничего"
- очень муторно.

Надо с помощью макроса, который уже помимо этой функции, форматирует еще кучу всего.

Вот файлик:
Вложения
Тип файла: rar Сделки.rar (213.3 Кб, 85 просмотров)

Последний раз редактировалось Maxx; 13.07.2009 в 17:39.
Maxx вне форума Ответить с цитированием
Старый 13.07.2009, 18:28   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Работает медленно (обрабатывает лист за 2 секунды), но работает:
Код:
Sub замена()
    Dim cell As Range: Application.ScreenUpdating = False
    For Each cell In ActiveSheet.UsedRange.Cells
        If InStr(1, cell.Text, Chr(160)) Then cell = Replace(cell, Chr(160), "")
    Next cell
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 14.07.2009, 05:45   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Не раз сталкивался с проблемой символа [пробел].
Кроме кода символа = 160 (что редко встречается), в таблице ANSI есть еще и код символа = 32. Нужно бы контролировать оба.
А макрос можно немного упростить:
Код:
Sub замена2()
    Application.ScreenUpdating = False: ActiveSheet.UsedRange.Replace What:=" ", Replacement:=""
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 14.07.2009, 16:31   #6
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
Печаль

SAS888, Ваш код не работает, вернее работает, но ячейки, содержащие цифры, не обрабатывает.

EducatedFool, Ваш код работает, НО он к сожалению, делает тоже, что и код, записанный макрорекодером, т.е.

Примет: в ячейке I2 есть цифра 4 408,2041

после обработки она превращается в 44 082 041

а надо 4 408,2041 только в числовом формате

Что делать?

Вот файлик уже с Вашими кодами:
Вложения
Тип файла: rar Сделки.rar (214.3 Кб, 36 просмотров)
Maxx вне форума Ответить с цитированием
Старый 14.07.2009, 16:46   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Пробуем:
Код:
Sub замена()
    Dim cell As Range: Application.ScreenUpdating = False
    For Each cell In Intersect(ActiveSheet.UsedRange, Range("C:C,E:E,G:G,I:I,K:K,N:N"))
        If InStr(1, cell.Text, Chr(160)) Then
            cell = Replace(Replace(cell, Chr(160), ""), ",", ".")
        End If
    Next cell
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 14.07.2009, 16:55   #8
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

У-а-у! Все прекрасно работает!

Огромнейшее СПАСИБО!
Maxx вне форума Ответить с цитированием
Старый 15.07.2009, 05:21   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
SAS888, Ваш код не работает, вернее работает, но ячейки, содержащие цифры, не обрабатывает.
Совершенно верно. Это как раз и есть разница в кодах символов пробела: 32 в тексте и 160 в числах. Обратите внимание, что код от EducatedFool работает с точностью до наоборот.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.10.2010, 20:36   #10
sam00
Пользователь
 
Аватар для sam00
 
Регистрация: 22.09.2010
Сообщений: 21
По умолчанию

Dim s As String, s1 As String
Dim i As Integer
s = [a4].Value
For i = 1 To Len(s)
s1 = s1 & Mid(s, i, 1) & " "
Next
[a4].Value = s1


Этот макрос добавляет по пробелу между символами. А как сделать обратный, чтобы в ячейке A1 между символами убирался лишь один пробел? К примеру: Из "П р и в е т__к а к__д е л а" получить "Привет как дела" (где "__" - двойной пробел)

Последний раз редактировалось sam00; 02.10.2010 в 20:39.
sam00 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество пробелов до конца строки Qv_1 Microsoft Office Word 8 01.06.2009 19:58
Аналог функции Trim-удаление лишних пробелов в начале и в конце передаваемой строки GULINA Помощь студентам 6 23.05.2009 15:07
Удаление пробелов Иван 883 Помощь студентам 1 20.04.2009 22:23
Удаление лишних пробелов. Ввод/вывод в файл. Иван 883 Помощь студентам 13 31.03.2009 19:39
Строки(удаление пробелов). C language SuccEssoR Помощь студентам 4 15.01.2009 17:13