Поиск и замена текста в массиве
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]
День добрый! Нашелся вот такой макрос, на другом форуме, для замены текста из ячеек, который вроде подходит для моей задачи. Подскажите можно ли, и как, обозначить имя массива ( _массив) в коде, чтобы поиск происходил в желаемой области а не столбце "С"? [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
Сообщение отредактировал 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] Предположил, что _Массив обозначен в диспетчере имен в самом файле
Не очень понял без файла. Так? [vba]Код
For Each v In Range("_Массив")
[/vba] Предположил, что _Массив обозначен в диспетчере имен в самом файле _Boroda_
Скажи мне, кудесник, любимец ба’гов... Платная помощь: 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
Ответить
Сообщение Можно гибче сделать, в принципе - выделять нужную область на листе и искать в ней: [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
А, с кавычками надо было.. Извиняюсь, ерунду какую-то я придумал, похоже этот макрос мне не совсем подходит. Над было сразу прост описать задачку. Необходим макрос для поиска и замены в раздельном массиве значений из одной ячейки (жёлтой) на значения из другой (зелёной). Пример во вложении..
А, с кавычками надо было.. Извиняюсь, ерунду какую-то я придумал, похоже этот макрос мне не совсем подходит. Над было сразу прост описать задачку. Необходим макрос для поиска и замены в раздельном массиве значений из одной ячейки (жёлтой) на значения из другой (зелёной). Пример во вложении.. forall
К сообщению приложен файл:
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
Ответить
Сообщение 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
Ответить
Сообщение китин, в примере да).. а в рабочем варианте будут словосочетания и предложения.. Автор - forall Дата добавления - 19.12.2016 в 15:47
_Boroda_
Дата: Понедельник, 19.12.2016, 15:57 |
Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация:
6481
±
Замечаний:
0% ±
2003; 2007; 2010; 2013 RUS
Используйте метод Финд Запишите макрорекодером замену через Контрл h и поправьте немного
Используйте метод Финд Запишите макрорекодером замену через Контрл h и поправьте немного _Boroda_
Скажи мне, кудесник, любимец ба’гов... Платная помощь: 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
Загвоздка вот только.. Как обозначить ссылки на значения из ячеек? Просто адрес ячейки - выделение создается но ничего не меняется.. В приложении..
Загвоздка вот только.. Как обозначить ссылки на значения из ячеек? Просто адрес ячейки - выделение создается но ничего не меняется.. В приложении.. forall
Ответить
Сообщение Загвоздка вот только.. Как обозначить ссылки на значения из ячеек? Просто адрес ячейки - выделение создается но ничего не меняется.. В приложении.. Автор - 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
Ответить
Сообщение 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]
mlader , можно и без цикла, сразу: [vba]Код
Range("_Массив").Replace old_str, new_str, xlPart
[/vba]Manyasha
ЯД: 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
Ответить
Сообщение Всем спасибо!.. А что значит 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 - искать ячейки целиком.
forall , да, xlPart - искать в части ячейки, а LookAt:=xlWhole - искать ячейки целиком.Manyasha
ЯД: 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
Ответить
Сообщение 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
Опять загвоздка.. Необходимо производить замену на разных листах, а вышеуказанный код работает только с активным. Как можно указать ссылку на неактивный лист, чтобы его переименование не вызывало ошибку в макросе, а поиск и замена происходили на обоих листах?
Опять загвоздка.. Необходимо производить замену на разных листах, а вышеуказанный код работает только с активным. Как можно указать ссылку на неактивный лист, чтобы его переименование не вызывало ошибку в макросе, а поиск и замена происходили на обоих листах? forall
Сообщение отредактировал 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) нужно указать лист
Ошибка не из-за переименования листа, а из-за того, что Вы пытаетесь одновременно выбрать диапазоны, расположенные на разных листах. Выделять вообще ничего не нужно, пишите сразу: [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
ЯД: 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
Ответить
Сообщение forall , переименование листов на именованные диапазоны не влияет. У вас в макросе в файле синтаксическая ошибка - Range("_Массив, _Массив2"). Надо либо Range("_Массив"), либо Range("_Массив2").Автор - mlader Дата добавления - 20.12.2016 в 10:46