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

Вход

Регистрация

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

 

= Мир MS Excel/Как сделать макрос на замену - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как сделать макрос на замену (Формулы)
Как сделать макрос на замену
BobbyJo Дата: Суббота, 14.09.2013, 14:57 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
Добрый день!

Подскажите пожалуйста макрос:

Необходимо заменить "0" если он пишется в начале ячейки на "d."

В файле 8000 строк и много столбиков поэтому формула не подойдет.


Сообщение отредактировал BobbyJo - Суббота, 14.09.2013, 15:03
 
Ответить
СообщениеДобрый день!

Подскажите пожалуйста макрос:

Необходимо заменить "0" если он пишется в начале ячейки на "d."

В файле 8000 строк и много столбиков поэтому формула не подойдет.

Автор - BobbyJo
Дата добавления - 14.09.2013 в 14:57
Матрёна Дата: Суббота, 14.09.2013, 16:01 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 398
Репутация: 40 ±
Замечаний: 0% ±

Нулей в начале ячеек может быть более, чем 1?
 
Ответить
СообщениеНулей в начале ячеек может быть более, чем 1?

Автор - Матрёна
Дата добавления - 14.09.2013 в 16:01
Матрёна Дата: Суббота, 14.09.2013, 16:02 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 398
Репутация: 40 ±
Замечаний: 0% ±

Покажите файл.
 
Ответить
СообщениеПокажите файл.

Автор - Матрёна
Дата добавления - 14.09.2013 в 16:02
BobbyJo Дата: Суббота, 14.09.2013, 16:11 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
Цитата (Матрёна, Суббота, 14.09.2013, 16:01 # 2)
Нулей в начале ячеек может быть более, чем 1?

В данном случае нет.

Цитата (Матрёна, Суббота, 14.09.2013, 16:02 # 3)
Покажите файл.


Если первый символ "0" в ячейке то мы его меняем на "d."
К сообщению приложен файл: 1633693.xlsx (44.5 Kb)


Сообщение отредактировал BobbyJo - Суббота, 14.09.2013, 16:14
 
Ответить
Сообщение
Цитата (Матрёна, Суббота, 14.09.2013, 16:01 # 2)
Нулей в начале ячеек может быть более, чем 1?

В данном случае нет.

Цитата (Матрёна, Суббота, 14.09.2013, 16:02 # 3)
Покажите файл.


Если первый символ "0" в ячейке то мы его меняем на "d."

Автор - BobbyJo
Дата добавления - 14.09.2013 в 16:11
SkyPro Дата: Суббота, 14.09.2013, 16:26 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Пробуйте:
[vba]
Код
Sub ss()
Application.EnableEvents = False
Application.ScreenUpdating = False

Dim rCell As Range, i&
       For Each rCell In ActiveSheet.UsedRange
           If rCell.Value Like "0*" Then
              i = Len(rCell.Value) - 1
              rCell.Formula = "D" & Right(rCell.Value, i)
           End If
       Next
          
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
[/vba]

[offtop] Сегодня день какой-то такой странный? А то все разделом промахиваются.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Суббота, 14.09.2013, 16:29
 
Ответить
СообщениеПробуйте:
[vba]
Код
Sub ss()
Application.EnableEvents = False
Application.ScreenUpdating = False

Dim rCell As Range, i&
       For Each rCell In ActiveSheet.UsedRange
           If rCell.Value Like "0*" Then
              i = Len(rCell.Value) - 1
              rCell.Formula = "D" & Right(rCell.Value, i)
           End If
       Next
          
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
[/vba]

[offtop] Сегодня день какой-то такой странный? А то все разделом промахиваются.

Автор - SkyPro
Дата добавления - 14.09.2013 в 16:26
Hugo Дата: Суббота, 14.09.2013, 16:32 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
SkyPro, а зачем события отключаете? Вероятно была мысль о пересчёте? Вот его возможно есть смысл отключать - но я файл не смотрел, может и нет смысла...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеSkyPro, а зачем события отключаете? Вероятно была мысль о пересчёте? Вот его возможно есть смысл отключать - но я файл не смотрел, может и нет смысла...

Автор - Hugo
Дата добавления - 14.09.2013 в 16:32
SkyPro Дата: Суббота, 14.09.2013, 16:41 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
SkyPro, а зачем события отключаете?

Макрос сделал еще до того, как файл увидел. Перестраховался от пересчета формул, ведь циклом меняется значение ячейки.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Суббота, 14.09.2013, 16:42
 
Ответить
Сообщение
SkyPro, а зачем события отключаете?

Макрос сделал еще до того, как файл увидел. Перестраховался от пересчета формул, ведь циклом меняется значение ячейки.

Автор - SkyPro
Дата добавления - 14.09.2013 в 16:41
BobbyJo Дата: Суббота, 14.09.2013, 16:44 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
Респект! Спасибо SkyPro, ! Работает!
 
Ответить
СообщениеРеспект! Спасибо SkyPro, ! Работает!

Автор - BobbyJo
Дата добавления - 14.09.2013 в 16:44
SkyPro Дата: Суббота, 14.09.2013, 16:51 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Можно было бы заменить строку[vba]
Код

Application.EnableEvents = False
'на
Application.Calculation = xlCalculationManual

'а строку :
Application.EnableEvents = True
'на  
Application.Calculation = xlCalculationAutomatic
[/vba]
Но почему-то первая мысль в голове была именно все события отключить :)


skypro1111@gmail.com
 
Ответить
СообщениеМожно было бы заменить строку[vba]
Код

Application.EnableEvents = False
'на
Application.Calculation = xlCalculationManual

'а строку :
Application.EnableEvents = True
'на  
Application.Calculation = xlCalculationAutomatic
[/vba]
Но почему-то первая мысль в голове была именно все события отключить :)

Автор - SkyPro
Дата добавления - 14.09.2013 в 16:51
Hugo Дата: Суббота, 14.09.2013, 16:51 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Макрос сделал еще до того, как файл увидел.

Т.к. файл xlsx - там нет макросов на события. Хотя конечно может быть что-то на уровне application...
Перестраховался от пересчета формул
- это делается иначе :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение
Макрос сделал еще до того, как файл увидел.

Т.к. файл xlsx - там нет макросов на события. Хотя конечно может быть что-то на уровне application...
Перестраховался от пересчета формул
- это делается иначе :)

Автор - Hugo
Дата добавления - 14.09.2013 в 16:51
BobbyJo Дата: Суббота, 14.09.2013, 16:56 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
Можно было бы заменить строку

[vba]
Код
Application.EnableEvents = False
'на
Application.Calculation = xlCalculationManual

'а строку :
Application.EnableEvents = True
'на
Application.Calculation = xlCalculationAutomatic
[/vba]


Я в программировании совсем профан :) Вроде код прошлый код работает быстро и точно. Или нет? Обьясните пожалуйста в чем разница :)))


Сообщение отредактировал BobbyJo - Суббота, 14.09.2013, 16:59
 
Ответить
Сообщение
Можно было бы заменить строку

[vba]
Код
Application.EnableEvents = False
'на
Application.Calculation = xlCalculationManual

'а строку :
Application.EnableEvents = True
'на
Application.Calculation = xlCalculationAutomatic
[/vba]


Я в программировании совсем профан :) Вроде код прошлый код работает быстро и точно. Или нет? Обьясните пожалуйста в чем разница :)))

Автор - BobbyJo
Дата добавления - 14.09.2013 в 16:56
SkyPro Дата: Суббота, 14.09.2013, 16:59 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Правильно работает код :)
Просто вышеперечисленные строки в коде лишние. На работоспособность макроса они не влияют.
enableevents - отвечает за все события на листе
calculation - за пересчет формул


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Суббота, 14.09.2013, 17:01
 
Ответить
СообщениеПравильно работает код :)
Просто вышеперечисленные строки в коде лишние. На работоспособность макроса они не влияют.
enableevents - отвечает за все события на листе
calculation - за пересчет формул

Автор - SkyPro
Дата добавления - 14.09.2013 в 16:59
BobbyJo Дата: Суббота, 14.09.2013, 17:07 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
Еще раз огромное спасибо! Ваш код мне очень помог и поможет всем кто попадет на эту тему! С полученным документом мне надо сделать еще одну операцию. Если будет возможность загляните пожалуйста еще в новую тему.
 
Ответить
СообщениеЕще раз огромное спасибо! Ваш код мне очень помог и поможет всем кто попадет на эту тему! С полученным документом мне надо сделать еще одну операцию. Если будет возможность загляните пожалуйста еще в новую тему.

Автор - BobbyJo
Дата добавления - 14.09.2013 в 17:07
Hugo Дата: Воскресенье, 15.09.2013, 13:20 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Думаю на практике этот код нужно подкорректировать.
Иначе получается такое:
[vba]
Код
art.    kg.
47784-05    d.,50
47784-07    d.,75
47784-10    1,00
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДумаю на практике этот код нужно подкорректировать.
Иначе получается такое:
[vba]
Код
art.    kg.
47784-05    d.,50
47784-07    d.,75
47784-10    1,00
[/vba]

Автор - Hugo
Дата добавления - 15.09.2013 в 13:20
SkyPro Дата: Воскресенье, 15.09.2013, 14:03 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Думаю на практике этот код нужно подкорректировать.

Код работает именно так, как просил ТС.
Но можно и подкорректировать:
[vba]
Код
Sub ss()
Application.ScreenUpdating = False

Dim rCell As Range, i&
      For Each rCell In ActiveSheet.UsedRange
          If rCell.Value Like "0*" And Not rCell.Value Like "0,*" Then
              i = Len(rCell.Value) - 1
              rCell.Formula = "D" & Right(rCell.Value, i)
          End If
      Next

Application.ScreenUpdating = True
End Sub
[/vba]
Или так:
[vba]
Код
Sub ss()
Application.ScreenUpdating = False

Dim rCell As Range, i&
     For Each rCell In ActiveSheet.UsedRange
         If rCell.Value Like "0*" And IsNumeric(rCell.Value) = False Then
             i = Len(rCell.Value) - 1
             rCell.Formula = "D" & Right(rCell.Value, i)
         End If
     Next

Application.ScreenUpdating = True
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Воскресенье, 15.09.2013, 14:13
 
Ответить
Сообщение
Думаю на практике этот код нужно подкорректировать.

Код работает именно так, как просил ТС.
Но можно и подкорректировать:
[vba]
Код
Sub ss()
Application.ScreenUpdating = False

Dim rCell As Range, i&
      For Each rCell In ActiveSheet.UsedRange
          If rCell.Value Like "0*" And Not rCell.Value Like "0,*" Then
              i = Len(rCell.Value) - 1
              rCell.Formula = "D" & Right(rCell.Value, i)
          End If
      Next

Application.ScreenUpdating = True
End Sub
[/vba]
Или так:
[vba]
Код
Sub ss()
Application.ScreenUpdating = False

Dim rCell As Range, i&
     For Each rCell In ActiveSheet.UsedRange
         If rCell.Value Like "0*" And IsNumeric(rCell.Value) = False Then
             i = Len(rCell.Value) - 1
             rCell.Formula = "D" & Right(rCell.Value, i)
         End If
     Next

Application.ScreenUpdating = True
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 15.09.2013 в 14:03
Hugo Дата: Воскресенье, 15.09.2013, 14:10 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Претензия не к коду - претензия к заказчику :)
Думаю BobbyJo этот аспект не продумал. Вероятно нужно заменять только в строках "заголовков", или в ячейках с нецифровым значением.
Но BobbyJo виднее.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПретензия не к коду - претензия к заказчику :)
Думаю BobbyJo этот аспект не продумал. Вероятно нужно заменять только в строках "заголовков", или в ячейках с нецифровым значением.
Но BobbyJo виднее.

Автор - Hugo
Дата добавления - 15.09.2013 в 14:10
BobbyJo Дата: Воскресенье, 15.09.2013, 16:15 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
а точно! 0,5 и т.д. тоже заменило. Сделал замену "d.," на "0," и все ок
 
Ответить
Сообщениеа точно! 0,5 и т.д. тоже заменило. Сделал замену "d.," на "0," и все ок

Автор - BobbyJo
Дата добавления - 15.09.2013 в 16:15
Wasilich Дата: Воскресенье, 15.09.2013, 23:36 | Сообщение № 18
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Ребята, как я заметил, замену надо произвести только в строке "art" столбца В.
Так может и так можно:
[vba]
Код
Sub Замена()
     For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
        If Left(Range("A" & i), 3) = "art" And Left(Range("B" & i), 1) = "0" Then  Range("B" & i).Replace What:="0", Replacement:="D"
     Next
End Sub
[/vba]
 
Ответить
СообщениеРебята, как я заметил, замену надо произвести только в строке "art" столбца В.
Так может и так можно:
[vba]
Код
Sub Замена()
     For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
        If Left(Range("A" & i), 3) = "art" And Left(Range("B" & i), 1) = "0" Then  Range("B" & i).Replace What:="0", Replacement:="D"
     Next
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 15.09.2013 в 23:36
Hugo Дата: Понедельник, 16.09.2013, 00:33 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну там иногда бывает "Art*", и на практике замена кажется нужна не только в B, а случайным образом где попало.
И количество строк ~13000, столбцов десяток...
Но я бы тоже привязывался к "ART*" в первом столбце, и затем вправо по строке пока есть значения заменял.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу там иногда бывает "Art*", и на практике замена кажется нужна не только в B, а случайным образом где попало.
И количество строк ~13000, столбцов десяток...
Но я бы тоже привязывался к "ART*" в первом столбце, и затем вправо по строке пока есть значения заменял.

Автор - Hugo
Дата добавления - 16.09.2013 в 00:33
BobbyJo Дата: Понедельник, 16.09.2013, 15:33 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
замена везде где 0 в начале ячейки. Просто FineReader распознал значок диаметра(кружок такой перечеркнутый) как 0. И в значениях где должен быть диаметр 12 например стало 012 см и т.д. Макрос SkyPro работает отлично все поправил. а где лишнее 0,1 например так это легко возвращаю заменой.


Сообщение отредактировал BobbyJo - Понедельник, 16.09.2013, 15:35
 
Ответить
Сообщениезамена везде где 0 в начале ячейки. Просто FineReader распознал значок диаметра(кружок такой перечеркнутый) как 0. И в значениях где должен быть диаметр 12 например стало 012 см и т.д. Макрос SkyPro работает отлично все поправил. а где лишнее 0,1 например так это легко возвращаю заменой.

Автор - BobbyJo
Дата добавления - 16.09.2013 в 15:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как сделать макрос на замену (Формулы)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!