Быстрая конвертация текста в числа в Excel по выделению

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
AntonRU
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 16.05.2005 (Пн) 15:29
Откуда: Москва

Быстрая конвертация текста в числа в Excel по выделению

Сообщение AntonRU » 16.05.2005 (Пн) 15:55

Часто приходится копировать из различный прог. вроде 1С в Excel массивы с числами, а потом причесывать в произвольно выделяемых диапазонах все лишние знаки (к примеру: удалять запятые, заменять точки на запятые).
Когда такая процедура делеется ручками, то всё ок и в ячейках оказываются цифры, которые потом можно считать. Но при работе макроса все числа становятся записаными как текст внутри ячейки.
Обсчитывать их невозможно, только переделывать с помощью опять же ручек с помощью Автозамены. Но AutoCorrect невозможно прописать в макрос для автоматизации.
Огромная просьба помочь.

Антон.

Пример своего макроса прилагаю:

numRows = Selection.Rows.Count
numColumns = Selection.Columns.Count
Selection.Resize(numRows, numColumns).Select

Selection.Replace What:=",", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False

Selection.NumberFormat = "0.00"
Selection.Style = "Comma"

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.05.2005 (Вт) 13:41

Если я правильно тебя понял, то тебе нужно преобразовать числа в текстовом формате в числа в числовом формате :)

Слегка идиотский, но вполне работающий код:

Код: Выделить всё
For each i in Selection
i.NumberFormat="General"
i.Formula=i.Formula
Next i

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 17.05.2005 (Вт) 14:06

:D

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

Аватара (с) Тёмыч

AntonRU
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 16.05.2005 (Пн) 15:29
Откуда: Москва

Сообщение AntonRU » 17.05.2005 (Вт) 17:13

Чтобы было понятно что не получилось:
ставятся строки типа " 24,740.00" из другой программы в ячейки.
Все требуемые ячейки выделяются в диапазон мышкой или с шифтом.
Мой макрос благополучно заменяет все "," на " " и "." на ",", при это получается результат "230125,41", но ячейка не вычисляется,
автозаменщик пишет, что число сохренено как текст.
Если ручками зайти и сохранить его же, то все становится ок.

Попробовал подставить ваш код, но в результате не помогло, т. к. не затрагивается фарматирование ячеек.
Возможно я что-то не понял, но что попадает в i?
Ведь присваивается произвольный выделенный диапазон.
И что такое i в выделении: текущая перебираемая ячейка?
Но тогда необходимы ещё 2 цикла перебора всех ячеек. А с определением начально-конечных ячеек - еще проблема.

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 17.05.2005 (Вт) 17:53

i здесь это переменная типа Variant. Можеш объявить её явно как Range.
В i попадает каждая из ячеек выделенного диапазона. Даже если диапазоны не связанны между собой.
Ну а внутри цикла можешь поставить i.NumberFormat = "0.00"

AntonRU писал(а):А с определением начально-конечных ячеек - еще проблема

Какая проблема?
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

AntonRU
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 16.05.2005 (Пн) 15:29
Откуда: Москва

Сообщение AntonRU » 18.05.2005 (Ср) 9:12

Большое спасибо за помощь. Немного доработал предложенный вариант.
Проблема с определением начально-конечных ячеек: иногда бывают не связанные произвольные диапазоны выделений (через Ctrl) Но я не стал так глубоко копать, т.к. можно для каждого диапазона в отдельности применять макрос.

Ещё раз спасибо,
До свидания.

P.S.
Для всех интересующихся выкладываю окончательный вариант макроса.

Как он работает:
Необходимы числа с разделителями (запятые и точки:
пример " 26,500.10") в ячейках.
Выделить диапазон ячеек и выполнить макрос.
Все неправильные знаки удалятся и числа преобразуются в числа для Excel, который сможет их считать.
Весьма полезная программа при переносе данных через буфер из 1С в Excel, к примеру.

Dim i As Range
Selection.Select
Selection.Replace What:=",", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
For Each i In Selection
i.NumberFormat = "0.00"
i = CDbl(i)
i.Formula = i.Formula
Next i

Selection.NumberFormat = "0.00"
Selection.Style = "Comma"

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.05.2005 (Ср) 9:14

Несвязанные диапазоны перебираются в Areas, если интересно.
Lasciate ogni speranza, voi ch'entrate.

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.05.2005 (Ср) 10:39

А я, проходя мимо в Object Browser'е, думал что Areas делает. Спасибо! :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 93

    TopList