Перерыл форум, не нашел ответа Как упростить формулу, когда используются множество вложенных фунций ПОДСТАВИТЬ?В примере я привел только 2 вложенных функции, но на практике у меня доходит до 100, возможно ли упростить с помощью других формул или формул массива?
Код
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(C1;A1;B1);A2;B2)
Перерыл форум, не нашел ответа Как упростить формулу, когда используются множество вложенных фунций ПОДСТАВИТЬ?В примере я привел только 2 вложенных функции, но на практике у меня доходит до 100, возможно ли упростить с помощью других формул или формул массива?
Sub Repl() Dim arr1 As Variant, arr2 As Variant, n As Long, m As Long lr = Cells(Rows.Count, 1).End(xlUp).Row arr1 = ActiveSheet.Range("A1:B" & lr) lr = Cells(Rows.Count, 3).End(xlUp).Row arr2 = ActiveSheet.Range("C1:C" & lr) For n = LBound(arr2) To UBound(arr2) For m = LBound(arr1) To UBound(arr1) If InStr(arr2(n, 1), arr1(m, 1)) > 0 Then arr2(n, 1) = Replace(arr2(n, 1), arr1(m, 1), arr1(m, 2)) Next m Next n ActiveSheet.Range("C1:C" & lr) = arr2 End Sub
[/vba]
Сделайте макросом и не мучайтесь [vba]
Код
Sub Repl() Dim arr1 As Variant, arr2 As Variant, n As Long, m As Long lr = Cells(Rows.Count, 1).End(xlUp).Row arr1 = ActiveSheet.Range("A1:B" & lr) lr = Cells(Rows.Count, 3).End(xlUp).Row arr2 = ActiveSheet.Range("C1:C" & lr) For n = LBound(arr2) To UBound(arr2) For m = LBound(arr1) To UBound(arr1) If InStr(arr2(n, 1), arr1(m, 1)) > 0 Then arr2(n, 1) = Replace(arr2(n, 1), arr1(m, 1), arr1(m, 2)) Next m Next n ActiveSheet.Range("C1:C" & lr) = arr2 End Sub
Serge_007, спасибо за труд, но я привел неудачный пример, исправляюсь. На практике, первые слова могут быть любые и некоторые слова в тексте остаются без замены., т.е. нужен универсальный вариант
Serge_007, спасибо за труд, но я привел неудачный пример, исправляюсь. На практике, первые слова могут быть любые и некоторые слова в тексте остаются без замены., т.е. нужен универсальный вариантmikeret
msi2102, спасибо за труд, но я в макросах не силен, у вас вставляется результат в ячейки с исходными данными, если можно исправтьте, чтоб результат был в соседнем столбце
msi2102, спасибо за труд, но я в макросах не силен, у вас вставляется результат в ячейки с исходными данными, если можно исправтьте, чтоб результат был в соседнем столбцеmikeret
msi2102, спасибо большее, все работает, но если кто поможет с формулой, тоже буду благодарен, с ними лично мне удобнее работать, хоть они и более массивные
msi2102, спасибо большее, все работает, но если кто поможет с формулой, тоже буду благодарен, с ними лично мне удобнее работать, хоть они и более массивныеmikeret
Сообщение отредактировал mikeret - Среда, 18.05.2022, 16:20
Возможно ли тогда если не упростить фоурмулу, то хотя бы ее унифицировать? В данном примере мне приходится многократно копировать правую часть формулы (";$A$2;$B$2)") и вручную менять потом ссылки на (";$A$3;$B$3)"), (";$A$4;$B$4)") и т.д. Помимо лишних затрат времени, самое плохое, что такой метод может привести к пропущенной нумерации и как следствие к неправильному результату. Можно ли эту часть формулы заменить при помощи вспомогательных функций (ИНДЕКС, СТРОКА и прочие), чтоб потом можно было просто ее продублировать в необходимом количестве ничего уже не меняя после копирования?
Возможно ли тогда если не упростить фоурмулу, то хотя бы ее унифицировать? В данном примере мне приходится многократно копировать правую часть формулы (";$A$2;$B$2)") и вручную менять потом ссылки на (";$A$3;$B$3)"), (";$A$4;$B$4)") и т.д. Помимо лишних затрат времени, самое плохое, что такой метод может привести к пропущенной нумерации и как следствие к неправильному результату. Можно ли эту часть формулы заменить при помощи вспомогательных функций (ИНДЕКС, СТРОКА и прочие), чтоб потом можно было просто ее продублировать в необходимом количестве ничего уже не меняя после копирования?