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

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

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

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

Господа, спасибо огромное, все работает. Почти.

В числе вида 2.570 макрос просто удаляет точку :( . Подскажите пожалуйста, как с этим бороться...
Worksheets("Расчет DDP").Range("P12:P1000").Replace _
What:=".", Replacement:=",", LookAt:=xlPart ' Заменяем точку на запятую
For Each cell In Worksheets("Расчет DDP").Range("P12:P1000")
If cell.Value <> 0 Then cell.Value = cell.Value * 1 ' Преображаем в число
Next
Fedozzz
Сообщения: 34
Зарегистрирован: 12 окт 2007, 15:30

1) Несмотря на строчку On Error Resume Next макрос прерывался и выскакивала ошибка
2) Я убрал цикл и все (вообще все ) заработало :)

Работающий код выглядит следующим образом:
Worksheets("Расчет DDP").Range("P12:P1000").Replace _
What:=".", Replacement:=",", LookAt:=xlPart
точки заменяет, ячейки в числа сами превращаются... Красотень!
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

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

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

Sub Test()

    Dim MyRange As Range
    Set MyRange = Worksheets("Расчет DDP").Range("P12:P1000")
    With MyRange
        .Replace What:=".", Replacement:=Application.DecimalSeparator, LookAt:=xlPart
        .NumberFormat = "General"
    End With
      
End Sub
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Fedozzz,
точки заменяет, ячейки в числа сами превращаются...
а у меня вот этого не происходит.

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

Worksheets("Расчет DDP").Range("P12:P1000").Replace _
What:=".", Replacement:=",", LookAt:=xlPart
только заменяет "." на "," и в ячейке получаем текст :confused:
Видимо действительно
Все зависит от того, какой исходно установлен формат ячеек Вашего диапазона.
====
если VictorM не против
ради Бога, какие могут быть против. :) Все, что здесь выкладывается, как я говорил, пример, набросок. Так что любые дополнения, изменения только приветствуются ;)
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Господа, а не проще ли локально макросом изменить DecimalSeparator?

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

 Application.[B]DecimalSeparator[/B] = ","
 Application.UseSystemSeparators = False
Разумеется надо поменять и формат с типом выравнивания
Fedozzz
Сообщения: 34
Зарегистрирован: 12 окт 2007, 15:30

Господа, спасибо большое за ответы.

Все решил встроенной функцией val. Она сама распознала текст и преобразовала его в число в правильном формате.
.Cells(i, 16) = Val(Worksheets("IA").Cells(i - 5, 11))
Ответить