Макрос для редактирование содержимого ячейки и изменения ее формата

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Fedozzz
Сообщения: 34
Зарегистрирован: 12 окт 2007, 15:30

Уважаемые Господа,

Помогите пожалуйста решить следующую (нутром чую, что чрезвычайно простую) задачу:

В рабочем листе есть куча дробных чисел вида : .001; .562; .785;

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

т.е. необходимо
1. во всех ячейках с такими числами точку заменить на запятую
2. получившиеся мета-числа (они уже нормально написаны, но все еще имеют текстовой формат) преобразовать в собственно числа.

ПОдскажите пожалуйста код...

Я попробовал создать такой макрос автоматической записькю, но не получилось...
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Пример, набросок... Посмотрите.

Код: Выделить всё

 
Sub test()
Dim UsedRange As Range
Worksheets(1).UsedRange.Replace _
What:=".", Replacement:=",", LookAt:=xlPart
For Each cell In Worksheets(1).UsedRange
       cell.Value = cell.Value * 1'чтобы получить число, умножаем на 1
Next
End Sub

"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Fedozzz
Сообщения: 34
Зарегистрирован: 12 окт 2007, 15:30

1) Не умножает: Type Mismatch
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Умножает, посмотрите.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Такое сообщение об ошибке будет, например, при попытке умножить на 1 текстовую строку, которые, скорее всего, на листе присутствуют.
Поэтому, достаточно просто игнорировать ошибку с помощью On Error Resume Next.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

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

.001; .562; .785;
я же понял, что исходные данные выглядят так как приведено в файле, т.е.
.001
.562
.785
p.s. диапазон данных, при желании можно ( да и наверное, нужно) задать жестко, например - Range("A1:A10").
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Fedozzz
Сообщения: 34
Зарегистрирован: 12 окт 2007, 15:30

Спасибо большое,





Worksheets(1).Range("A1:A10") .Replace What:=".", Replacement:=",", LookAt:=xlPart


А что делает
LookAt:=xlPart
? Подскажите пожалуйста
Fedozzz
Сообщения: 34
Зарегистрирован: 12 окт 2007, 15:30

Дело действительно в том, что в рабочей книге есть ячейки с текстом, и из-за этого вылезает ошибка.

А Метод On Error Resume Next не сработал.
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

VictorM, код-то рабочий, кто спорит? Просто, ошибка "Type Mismatch" как раз и наводит на мысль, что происходит именно то, о чем я говорил. По поводу того, что делать, считаю, что все-таки проще перед циклом в Вашем коде вставить On Error Resume Next, а по выходу из цикла On Error GoTo 0. Это оправдано тем, что во-первых, другие ошибки не возможны, во-вторых, если обрабатывается несколько листов (книг), то не нужно для каждого случая подставлять свой диапазон.
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Fedozzz, Что значит
Метод On Error Resume Next не сработал?
Ответить