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

Вход

Регистрация

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

 

= Мир MS Excel/Поиск и замена текста в массиве - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск и замена текста в массиве (Макросы/Sub)
Поиск и замена текста в массиве
forall Дата: Понедельник, 19.12.2016, 09:39 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
День добрый! Нашелся вот такой макрос, на другом форуме, для замены текста из ячеек, который вроде подходит для моей задачи.
Подскажите можно ли, и как, обозначить имя массива ( _массив) в коде, чтобы поиск происходил в желаемой области а не столбце "С"?

[vba]
Код
Sub tt()
Dim a, v, i&
a = Range([B1], Range("A" & Rows.Count).End(xlUp)).Value
For Each v In Range([C1], Range("C" & Rows.Count).End(xlUp))
If Len(v) Then
For i = 1 To UBound(a)
If Len(a(i, 1)) Then v.Value = Replace(v.Value, a(i, 1), a(i, 2))
Next i
End If
Next v
End Sub
[/vba]


Сообщение отредактировал forall - Понедельник, 19.12.2016, 09:39
 
Ответить
СообщениеДень добрый! Нашелся вот такой макрос, на другом форуме, для замены текста из ячеек, который вроде подходит для моей задачи.
Подскажите можно ли, и как, обозначить имя массива ( _массив) в коде, чтобы поиск происходил в желаемой области а не столбце "С"?

[vba]
Код
Sub tt()
Dim a, v, i&
a = Range([B1], Range("A" & Rows.Count).End(xlUp)).Value
For Each v In Range([C1], Range("C" & Rows.Count).End(xlUp))
If Len(v) Then
For i = 1 To UBound(a)
If Len(a(i, 1)) Then v.Value = Replace(v.Value, a(i, 1), a(i, 2))
Next i
End If
Next v
End Sub
[/vba]

Автор - forall
Дата добавления - 19.12.2016 в 09:39
_Boroda_ Дата: Понедельник, 19.12.2016, 09:45 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Не очень понял без файла.
Так?
[vba]
Код
For Each v In Range("_Массив")
[/vba]
Предположил, что _Массив обозначен в диспетчере имен в самом файле


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе очень понял без файла.
Так?
[vba]
Код
For Each v In Range("_Массив")
[/vba]
Предположил, что _Массив обозначен в диспетчере имен в самом файле

Автор - _Boroda_
Дата добавления - 19.12.2016 в 09:45
mlader Дата: Понедельник, 19.12.2016, 15:05 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Можно гибче сделать, в принципе - выделять нужную область на листе и искать в ней:

[vba]
Код
Sub f()

    Set Rng = Selection
    For Each i In Rng
        If i = 1 Then
            MsgBox "Element Found!"
            i.Select
            Exit Sub
        End If
    Next

End Sub
[/vba]
 
Ответить
СообщениеМожно гибче сделать, в принципе - выделять нужную область на листе и искать в ней:

[vba]
Код
Sub f()

    Set Rng = Selection
    For Each i In Rng
        If i = 1 Then
            MsgBox "Element Found!"
            i.Select
            Exit Sub
        End If
    Next

End Sub
[/vba]

Автор - mlader
Дата добавления - 19.12.2016 в 15:05
forall Дата: Понедельник, 19.12.2016, 15:29 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
А, с кавычками надо было..
Извиняюсь, ерунду какую-то я придумал, похоже этот макрос мне не совсем подходит.
Над было сразу прост описать задачку.
Необходим макрос для поиска и замены в раздельном массиве значений из одной ячейки (жёлтой) на значения из другой (зелёной).
Пример во вложении..
К сообщению приложен файл: 222.xlsm (16.3 Kb)
 
Ответить
СообщениеА, с кавычками надо было..
Извиняюсь, ерунду какую-то я придумал, похоже этот макрос мне не совсем подходит.
Над было сразу прост описать задачку.
Необходим макрос для поиска и замены в раздельном массиве значений из одной ячейки (жёлтой) на значения из другой (зелёной).
Пример во вложении..

Автор - forall
Дата добавления - 19.12.2016 в 15:29
forall Дата: Понедельник, 19.12.2016, 15:31 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
mlader, я из этого ничего не понял, но область будет постоянной, а вот значения в ней будут меняться..
 
Ответить
Сообщениеmlader, я из этого ничего не понял, но область будет постоянной, а вот значения в ней будут меняться..

Автор - forall
Дата добавления - 19.12.2016 в 15:31
китин Дата: Понедельник, 19.12.2016, 15:40 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
это надо все О на А поменять, что ли?


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениеэто надо все О на А поменять, что ли?

Автор - китин
Дата добавления - 19.12.2016 в 15:40
forall Дата: Понедельник, 19.12.2016, 15:47 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
китин, в примере да).. а в рабочем варианте будут словосочетания и предложения..
 
Ответить
Сообщениекитин, в примере да).. а в рабочем варианте будут словосочетания и предложения..

Автор - forall
Дата добавления - 19.12.2016 в 15:47
_Boroda_ Дата: Понедельник, 19.12.2016, 15:57 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Используйте метод Финд
Запишите макрорекодером замену через Контрл h и поправьте немного


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИспользуйте метод Финд
Запишите макрорекодером замену через Контрл h и поправьте немного

Автор - _Boroda_
Дата добавления - 19.12.2016 в 15:57
forall Дата: Понедельник, 19.12.2016, 16:19 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, точно О_о..
 
Ответить
Сообщение_Boroda_, точно О_о..

Автор - forall
Дата добавления - 19.12.2016 в 16:19
forall Дата: Понедельник, 19.12.2016, 16:23 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Загвоздка вот только.. Как обозначить ссылки на значения из ячеек? Просто адрес ячейки - выделение создается но ничего не меняется.. В приложении..
К сообщению приложен файл: 222-1-.xlsm (16.4 Kb)
 
Ответить
СообщениеЗагвоздка вот только.. Как обозначить ссылки на значения из ячеек? Просто адрес ячейки - выделение создается но ничего не меняется.. В приложении..

Автор - forall
Дата добавления - 19.12.2016 в 16:23
_Boroda_ Дата: Понедельник, 19.12.2016, 16:29 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Range("F5")
или
[F5]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеRange("F5")
или
[F5]

Автор - _Boroda_
Дата добавления - 19.12.2016 в 16:29
mlader Дата: Понедельник, 19.12.2016, 16:32 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
forall,

[vba]
Код
Sub f()
    ws = "Лист1"
    old_str = Sheets(ws).Range("F5").Value
    new_str = Sheets(ws).Range("G5").Value
     
    For Each i In Range("_Массив")
        i.Value = Replace(i.Value, old_str, new_str)
    Next

End Sub
[/vba]
 
Ответить
Сообщениеforall,

[vba]
Код
Sub f()
    ws = "Лист1"
    old_str = Sheets(ws).Range("F5").Value
    new_str = Sheets(ws).Range("G5").Value
     
    For Each i In Range("_Массив")
        i.Value = Replace(i.Value, old_str, new_str)
    Next

End Sub
[/vba]

Автор - mlader
Дата добавления - 19.12.2016 в 16:32
Manyasha Дата: Понедельник, 19.12.2016, 16:40 | Сообщение № 13
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
mlader, можно и без цикла, сразу:
[vba]
Код
Range("_Массив").Replace old_str, new_str, xlPart
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеmlader, можно и без цикла, сразу:
[vba]
Код
Range("_Массив").Replace old_str, new_str, xlPart
[/vba]

Автор - Manyasha
Дата добавления - 19.12.2016 в 16:40
forall Дата: Понедельник, 19.12.2016, 17:09 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Всем спасибо!.. А что значит xlPart? LookAt:=xlPart?
 
Ответить
СообщениеВсем спасибо!.. А что значит xlPart? LookAt:=xlPart?

Автор - forall
Дата добавления - 19.12.2016 в 17:09
Manyasha Дата: Понедельник, 19.12.2016, 17:17 | Сообщение № 15
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
forall, да, xlPart - искать в части ячейки, а LookAt:=xlWhole - искать ячейки целиком.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеforall, да, xlPart - искать в части ячейки, а LookAt:=xlWhole - искать ячейки целиком.

Автор - Manyasha
Дата добавления - 19.12.2016 в 17:17
forall Дата: Понедельник, 19.12.2016, 17:20 | Сообщение № 16
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
пнял, спасиб!
 
Ответить
Сообщениепнял, спасиб!

Автор - forall
Дата добавления - 19.12.2016 в 17:20
forall Дата: Понедельник, 19.12.2016, 20:20 | Сообщение № 17
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
mlader, Manyasha, а вот какой нюанс вылез при таком способе, с объявленными переменными - переименование рабочего листа)..
Поэтому так:
[vba]
Код
Range("_Массив").Select
        Selection.Replace What:=[F5], Replacement:=[G5], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
[/vba]
 
Ответить
Сообщениеmlader, Manyasha, а вот какой нюанс вылез при таком способе, с объявленными переменными - переименование рабочего листа)..
Поэтому так:
[vba]
Код
Range("_Массив").Select
        Selection.Replace What:=[F5], Replacement:=[G5], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
[/vba]

Автор - forall
Дата добавления - 19.12.2016 в 20:20
forall Дата: Вторник, 20.12.2016, 09:33 | Сообщение № 18
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Опять загвоздка.. Необходимо производить замену на разных листах, а вышеуказанный код работает только с активным. Как можно указать ссылку на неактивный лист, чтобы его переименование не вызывало ошибку в макросе, а поиск и замена происходили на обоих листах?
К сообщению приложен файл: 5709614.xlsm (16.6 Kb)


Сообщение отредактировал forall - Вторник, 20.12.2016, 09:36
 
Ответить
СообщениеОпять загвоздка.. Необходимо производить замену на разных листах, а вышеуказанный код работает только с активным. Как можно указать ссылку на неактивный лист, чтобы его переименование не вызывало ошибку в макросе, а поиск и замена происходили на обоих листах?

Автор - forall
Дата добавления - 20.12.2016 в 09:33
Manyasha Дата: Вторник, 20.12.2016, 10:36 | Сообщение № 19
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Ошибка не из-за переименования листа, а из-за того, что Вы пытаетесь одновременно выбрать диапазоны, расположенные на разных листах. Выделять вообще ничего не нужно, пишите сразу:
[vba]
Код
        Range("_Массив").Replace What:=Sheets("Массив1").[F1], Replacement:=Sheets("Массив1").[G1], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        Range("_Массив2").Replace What:=Sheets("Массив1").[F1], Replacement:=Sheets("Массив1").[G1], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
[/vba]
UPD.
перед ячейками с параметрами для замены (f1, g1) нужно указать лист


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Вторник, 20.12.2016, 10:39
 
Ответить
СообщениеОшибка не из-за переименования листа, а из-за того, что Вы пытаетесь одновременно выбрать диапазоны, расположенные на разных листах. Выделять вообще ничего не нужно, пишите сразу:
[vba]
Код
        Range("_Массив").Replace What:=Sheets("Массив1").[F1], Replacement:=Sheets("Массив1").[G1], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        Range("_Массив2").Replace What:=Sheets("Массив1").[F1], Replacement:=Sheets("Массив1").[G1], LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
[/vba]
UPD.
перед ячейками с параметрами для замены (f1, g1) нужно указать лист

Автор - Manyasha
Дата добавления - 20.12.2016 в 10:36
mlader Дата: Вторник, 20.12.2016, 10:46 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
forall, переименование листов на именованные диапазоны не влияет.
У вас в макросе в файле синтаксическая ошибка - Range("_Массив, _Массив2").
Надо либо Range("_Массив"), либо Range("_Массив2").
 
Ответить
Сообщениеforall, переименование листов на именованные диапазоны не влияет.
У вас в макросе в файле синтаксическая ошибка - Range("_Массив, _Массив2").
Надо либо Range("_Массив"), либо Range("_Массив2").

Автор - mlader
Дата добавления - 20.12.2016 в 10:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск и замена текста в массиве (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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