Многоитерационный поиск-замена по заданному массиву условий
shlackbaum
Дата: Среда, 25.04.2018, 21:07 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Задача: Есть столбец с изначальными данными (A) Необходимо применить несколько раз ко всему столбцу действие найти-заменить, но по точному соответствию. Что ищется в столбце - перечислено в нескольких центральных столбцах (C-H) На что заменяется найденное значение - перечислено в столбце (О) Пример действий Найти "ванна" - заменить на "ванны" Найти "ванну" - заменить на "ванны" Найти "ванн" - заменить на "ванны" Найти "акриловой" - заменить на "акриловые" Найти "акриловая" - заменить на "акриловые" Важно(!), что поиск-замена происходит по точному соответствию. То есть замена "ванн" на "ванны" в слове "ванна" должно приводить к слову "ванны", а не к слову "ванныа"
Задача: Есть столбец с изначальными данными (A) Необходимо применить несколько раз ко всему столбцу действие найти-заменить, но по точному соответствию. Что ищется в столбце - перечислено в нескольких центральных столбцах (C-H) На что заменяется найденное значение - перечислено в столбце (О) Пример действий Найти "ванна" - заменить на "ванны" Найти "ванну" - заменить на "ванны" Найти "ванн" - заменить на "ванны" Найти "акриловой" - заменить на "акриловые" Найти "акриловая" - заменить на "акриловые" Важно(!), что поиск-замена происходит по точному соответствию. То есть замена "ванн" на "ванны" в слове "ванна" должно приводить к слову "ванны", а не к слову "ванныа" shlackbaum
Ответить
Сообщение Задача: Есть столбец с изначальными данными (A) Необходимо применить несколько раз ко всему столбцу действие найти-заменить, но по точному соответствию. Что ищется в столбце - перечислено в нескольких центральных столбцах (C-H) На что заменяется найденное значение - перечислено в столбце (О) Пример действий Найти "ванна" - заменить на "ванны" Найти "ванну" - заменить на "ванны" Найти "ванн" - заменить на "ванны" Найти "акриловой" - заменить на "акриловые" Найти "акриловая" - заменить на "акриловые" Важно(!), что поиск-замена происходит по точному соответствию. То есть замена "ванн" на "ванны" в слове "ванна" должно приводить к слову "ванны", а не к слову "ванныа" Автор - shlackbaum Дата добавления - 25.04.2018 в 21:07
bmv98rus
Дата: Среда, 25.04.2018, 21:22 |
Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация:
772
±
Замечаний:
0% ±
Excel 2013/2016
в поиск "ванн?, в замену "ванны", но если попадется ванная, то тоже заменит. "акрилов??" "акриловые" Но вот ВАНН надо через * и тут заменит все что после. Еслиб там был пробел, то былоб проще.
в поиск "ванн?, в замену "ванны", но если попадется ванная, то тоже заменит. "акрилов??" "акриловые" Но вот ВАНН надо через * и тут заменит все что после. Еслиб там был пробел, то былоб проще. bmv98rus
Замечательный Временно просто медведь , процентов на 20 .
Сообщение отредактировал bmv98rus - Среда, 25.04.2018, 21:25
Ответить
Сообщение в поиск "ванн?, в замену "ванны", но если попадется ванная, то тоже заменит. "акрилов??" "акриловые" Но вот ВАНН надо через * и тут заменит все что после. Еслиб там был пробел, то былоб проще. Автор - bmv98rus Дата добавления - 25.04.2018 в 21:22
shlackbaum
Дата: Среда, 25.04.2018, 21:24 |
Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Других вариантов, кроме как в столбцах C-H - нет. Только те варианты, которые перечислены. То есть "??" (и другие окончания) не существуют. Стандартный метод CTRL+H и загнать в итерацию - тут не работает =( Именно потому что он не понимает точных соответствий.
Других вариантов, кроме как в столбцах C-H - нет. Только те варианты, которые перечислены. То есть "??" (и другие окончания) не существуют. Стандартный метод CTRL+H и загнать в итерацию - тут не работает =( Именно потому что он не понимает точных соответствий. shlackbaum
Сообщение отредактировал shlackbaum - Среда, 25.04.2018, 21:29
Ответить
Сообщение Других вариантов, кроме как в столбцах C-H - нет. Только те варианты, которые перечислены. То есть "??" (и другие окончания) не существуют. Стандартный метод CTRL+H и загнать в итерацию - тут не работает =( Именно потому что он не понимает точных соответствий. Автор - shlackbaum Дата добавления - 25.04.2018 в 21:24
bmv98rus
Дата: Среда, 25.04.2018, 21:40 |
Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация:
772
±
Замечаний:
0% ±
Excel 2013/2016
Подождите, но ведь у вас уже есть Словарь, ну и запустить по столбцу A range.replace. и не надо этих ?
Подождите, но ведь у вас уже есть Словарь, ну и запустить по столбцу A range.replace. и не надо этих ? bmv98rus
Замечательный Временно просто медведь , процентов на 20 .
Ответить
Сообщение Подождите, но ведь у вас уже есть Словарь, ну и запустить по столбцу A range.replace. и не надо этих ? Автор - bmv98rus Дата добавления - 25.04.2018 в 21:40
InExSu
Дата: Среда, 25.04.2018, 22:02 |
Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 650
Репутация:
96
±
Замечаний:
0% ±
Excel 2010, 365
Привет! Данные организованы, так что циклы легли как дома
[vba]
Код
Option Explicit Public Sub Замена_Табличная() Dim arr() As Variant, arrSplit With ActiveSheet arr = .Range(.Cells(2, 3), _ .Cells(.UsedRange.Rows.Count, _ .UsedRange.Columns.Count)).Value Dim rng As Range, eL As Range Set rng = .[a1].CurrentRegion End With Dim x As Long, iRow As Long, iCol As Long For Each eL In rng 'eL.Select '===для Отладки, потом У далить arrSplit = Split(eL.Value, " ") For x = LBound(arrSplit) To UBound(arrSplit) For iRow = LBound(arr) To UBound(arr) For iCol = LBound(arr, 2) To UBound(arr, 2) - 2 If arrSplit(x) = arr(iRow, iCol) Then eL.Value = Replace(eL.Value, arrSplit(x), arr(iRow, UBound(arr, 2))) End If Next: Next: Next: Next End Sub
[/vba]
Привет! Данные организованы, так что циклы легли как дома
[vba]
Код
Option Explicit Public Sub Замена_Табличная() Dim arr() As Variant, arrSplit With ActiveSheet arr = .Range(.Cells(2, 3), _ .Cells(.UsedRange.Rows.Count, _ .UsedRange.Columns.Count)).Value Dim rng As Range, eL As Range Set rng = .[a1].CurrentRegion End With Dim x As Long, iRow As Long, iCol As Long For Each eL In rng 'eL.Select '===для Отладки, потом У далить arrSplit = Split(eL.Value, " ") For x = LBound(arrSplit) To UBound(arrSplit) For iRow = LBound(arr) To UBound(arr) For iCol = LBound(arr, 2) To UBound(arr, 2) - 2 If arrSplit(x) = arr(iRow, iCol) Then eL.Value = Replace(eL.Value, arrSplit(x), arr(iRow, UBound(arr, 2))) End If Next: Next: Next: Next End Sub
[/vba]
InExSu
Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
Ответить
Сообщение Привет! Данные организованы, так что циклы легли как дома
[vba]
Код
Option Explicit Public Sub Замена_Табличная() Dim arr() As Variant, arrSplit With ActiveSheet arr = .Range(.Cells(2, 3), _ .Cells(.UsedRange.Rows.Count, _ .UsedRange.Columns.Count)).Value Dim rng As Range, eL As Range Set rng = .[a1].CurrentRegion End With Dim x As Long, iRow As Long, iCol As Long For Each eL In rng 'eL.Select '===для Отладки, потом У далить arrSplit = Split(eL.Value, " ") For x = LBound(arrSplit) To UBound(arrSplit) For iRow = LBound(arr) To UBound(arr) For iCol = LBound(arr, 2) To UBound(arr, 2) - 2 If arrSplit(x) = arr(iRow, iCol) Then eL.Value = Replace(eL.Value, arrSplit(x), arr(iRow, UBound(arr, 2))) End If Next: Next: Next: Next End Sub
[/vba]
Автор - InExSu Дата добавления - 25.04.2018 в 22:02
shlackbaum
Дата: Среда, 25.04.2018, 22:52 |
Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Данные организованы, так что циклы легли как дома
Похоже работает... Пока допроверю
Данные организованы, так что циклы легли как дома
Похоже работает... Пока допроверюshlackbaum
Ответить
Сообщение Данные организованы, так что циклы легли как дома
Похоже работает... Пока допроверюАвтор - shlackbaum Дата добавления - 25.04.2018 в 22:52