Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
АЛКС
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 315
1

Оптимизация кода по замене текста

09.10.2016, 14:36. Просмотров 860. Ответов 5
Метки нет (Все метки)

Подскажите пожалуйста, как можно оптимизировать нижеуказанный код?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub www()
    Dim iSource As Range, iCell As Range
    Set iSource = Worksheets(1).Range("B:B")
    Set iCell = iSource.Find("найти1", , xlValues, xlPart)
    Do Until iCell Is Nothing
       iCell = "заменить1"
       Set iCell = iSource.FindNext
    Loop
    Set iCell = iSource.Find("найти2", , xlValues, xlPart)
    Do Until iCell Is Nothing
       iCell = "заменить2"
       Set iCell = iSource.FindNext
    Loop
    Set iCell = iSource.Find("найти...", , xlValues, xlPart)
    Do Until iCell Is Nothing
       iCell = "заменить..."
       Set iCell = iSource.FindNext
    Loop
End Sub
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2016, 14:36
Ответы с готовыми решениями:

Работа по замене текста в Word
Добрый день форумчане. Имеется документ Word с которым я работаю и постоянно вношу в него...

Не работает код по замене текста в текстбоксе
вот сам код. уже и не знаю что делать. Private Sub CommandButton1_Click()...

Макрос по замене текста во всем документе Word
На просторах интернета нашел вот такой макрос Sub FindInStories() Dim myStoryRange As Range ...

Создание макроса по поиску и замене текста в Word 2007
Помогите пожалуйста написать макрос, который будет в тексте, состоящем из статей, имеющих...

Оптимизация кода
Доброе время господа программеры! В следствии своих скудных познаний в VBA (да и в программировании...

5
Казанский
14909 / 6311 / 1720
Регистрация: 24.09.2011
Сообщений: 9,977
09.10.2016, 15:09 2
АЛКС, запишите макрорекордером: выделить B:B, Ctrl+H... , заменить все. Повторите для других значений поиска-замены.
В большинстве случаев это сработает. Отличие в том, что метод Replace ищет только в формулах, а Find может искать еще и в значениях (как в вашем коде), и в примечаниях.
1
АЛКС
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 315
09.10.2016, 19:06  [ТС] 3
Казанский, да, Find заменить на Replace можно, но есть нюансы, конечно, но код существеннее меньше! Спасибо! Хотелось бы Find оставить, м.б. есть способ с минимальным кодом и с Find?
0
Казанский
14909 / 6311 / 1720
Регистрация: 24.09.2011
Сообщений: 9,977
09.10.2016, 20:27 4
Лучший ответ Сообщение было отмечено АЛКС как решение

Решение

Цитата Сообщение от АЛКС Посмотреть сообщение
способ с минимальным кодом
Так Вы хотите оптимизировать в смысле длины кода, а не в смысле быстродействия? Можно так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub www()
Const FND = "найти1|найти2|найтиХ"
Const RPL = "заменить1|заменить2|заменитьX"
 
Dim iCell As Range, i&, aFnd, aRpl
  aFnd = Split(FND, "|"): aRpl = Split(RPL, "|")
  With Worksheets(1).Range("B:B")
    For i = 0 To UBound(aFnd)
      Set iCell = .Find(aFnd(i), , xlValues, xlPart)
      Do Until iCell Is Nothing
         iCell = aRpl(i)
         Set iCell = .FindNext
      Loop
    Next
  End With
End Sub
1
АЛКС
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 315
09.10.2016, 21:34  [ТС] 5
Казанский, круто, с вертикальной чертой!!!
0
pashulka
3347 / 1794 / 756
Регистрация: 01.12.2010
Сообщений: 3,568
10.10.2016, 12:16 6
Вариант без черты.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Test2v3()
    Dim iSource As Range, iCell As Range, iCount&
    
    iArr1 = Array("найти1", "найти2", "найтиХ")
    iArr2 = Array("заменить1", "заменить2", "заменитьX")
    
    Application.ScreenUpdating = False
    Set iSource = Worksheets(1).Columns(2)
    For iCount = 0 To UBound(iArr1)
        Set iCell = iSource.Find(iArr1(iCount), , xlValues, xlPart)
        Do Until iCell Is Nothing
           iCell = iArr2(iCount)
           Set iCell = iSource.FindNext
        Loop
    Next
    Application.ScreenUpdating = True
End Sub
1
10.10.2016, 12:16
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2016, 12:16

оптимизация кода
Всем Добрый день. Никогда раньше не писал на vba, однако появилась рабочая необходимость написать...

Оптимизация кода
Есть код для копирования листа в созданную книгу, листы копируются с системной датой. Можно ли как...

Оптимизация кода
Есть ли у кого будет свободная минутка - подскажите, что можно изменить, чтобы уменьшить время...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.