Массовая замена в формулах в excel

Возможно, вас интересует: функция ЗАМЕНИТЬ в Excel.

  • «Найти и заменить» в Excel
    • Горячие клавиши
    • Процедура «Найти и заменить» не работает
    • Подстановочные знаки, или как найти “звёздочку”
  • Замена нескольких значений на несколько
    • Массовая замена с помощью функции “ПОДСТАВИТЬ”
    • Файл-шаблон с формулой множественной замены
  • Заменить несколько значений на одно
    • С помощью функции «ПОДСТАВИТЬ»
    • С помощью регулярных выражений
  • Массовая замена в !SEMTools
    • Пример: замена символов по вхождению
    • Пример: замена списка слов на другой список слов

Процедура поиска и замены данных — одна из самых востребованных в Excel. Базовая процедура позволяет заменить за один заход только одно значение, но зато множеством способов. Рассмотрим, как эффективно работать с ней.

Горячие клавиши

Сочетания клавиш ниже заметно ускорят работу с инструментом:

  • Для запуска диалогового окна поиска — Ctrl + F.
  • Для запуска окна поиска и замены — Ctrl + H.
  • Для выделения всех найденных ячеек (после нажатия кнопки «найти всё») — Ctrl + A.
  • Для очистки всех найденных ячеек — Ctrl + Delete.
  • Для ввода одних и тех же данных во все найденные ячейки — Ввод текста, Ctrl + Enter.

Смотрите gif-пример: здесь я произвожу поиск ячеек с дальнейшим их редактированием. В отличие от замены, редактирование найденных ячеек позволяет быстро менять их содержимое целиком.

Находим все пустые ячейки в диапазоне и заполняем их нулями или одним значением с помощью горячих клавиш

Процедура «Найти и заменить» не работает

Я сам когда-то неоднократно впадал в ступор в этой ситуации. Уверен и видишь своими глазами, что искомый паттерн в данных есть, но Excel при выполнении процедуры поиска сообщает:

Не удалось ничего найти по вашему запросу

или при замене:

Мы не нашли ничего, что нужно было заменить

Так вот, совет нажать кнопку “Параметры” в обоих этих сообщениях действительно полезен — там наверняка активен чекбокс “Учитывать регистр” или “Ячейка целиком”, которые мешают Excel найти искомое. Excel, в свою очередь, сохраняет конфигурацию последнего поиска.

Статус опций “Учитывать регистр” и “Ячейка целиком” виден после нажатия кнопки “Параметры”.

Подстановочные знаки, или как найти “звёздочку”

Сухая официальная справка по Excel сообщает:

— что можно использовать подстановочные символы “*” и “?”;
— что “*” и “?” означают несколько символов, включая их отсутствие, и один любой символ;
— что их можно использовать для соответствующих процедур поиска.

Чего не говорит справка, так это того, что в комбинации с опцией “ячейка целиком” эти символы позволяют, не прибегая к помощи расширенного фильтра и процедуры поиска группы ячеек:

  • находить ячейки, заканчивающиеся на определенный символ, слово или текст,
  • находить ячейки, начинающиеся с определенного символа, слова или текста,
  • находить непустые ячейки.

Если хотите поподробнее познакомиться с этими и другими специальными символами, читайте соответствующую статью.

В примере ниже мы находим все двузначные числа, затем числа, заканчивающиеся и начинающиеся на 7, и, наконец, все непустые ячейки. Напомню, выделить все результаты поиска помогает горячее сочетание клавиш Ctrl + A.

Так а как найти звёздочку?

Действительно, забыл. Чтобы найти «звёздочку», нужно в окошке поиска ставить перед ней знак ~ (тильда), он находится обычно под клавишей Esc. Это позволяет экранировать “звездочку”, как и вопросительный знак, и не воспринимать их как служебные символы.

Замена нескольких значений на несколько

Массовая замена в Excel — довольно частая потребность. Очень часто нужно массово и при этом быстро заменить несколько символов, слов и т.д. на другие. При этом на текущий момент простого инструмента в стандартном функционале Excel нет.

Тем не менее, если очень нужно, любую задачу можно решить. В зависимости от того, на что вы хотите заменить, могут помочь комбинации функций, регулярные выражения, а в самых сложных случаях — надстройка !SEMTools.

Эта задача более сложная, чем замена на одно значение. Как ни странно, функция «ЗАМЕНИТЬ» здесь не подходит — она требует явного указания позиции заменяемого текста. Зато может помочь функция «ПОДСТАВИТЬ».

Массовая замена с помощью функции “ПОДСТАВИТЬ”

Используя несколько условий в сложной формуле, можно производить одновременную замену нескольких значений. Excel позволяет использовать до 64 уровней вложенности — свобода действий высока. Например, вот так можно перевести кириллицу в латиницу:

При этом, если использовать в качестве подставляемого фрагмента пустоту, можно использовать функцию для удаления нескольких символов, — смотрите, как удалить цифры из ячейки этим способом.

Но у решения есть и свои недостатки:

  • Функция ПОДСТАВИТЬ регистрозависимая, что заставляет при замене одного символа использовать два его варианта — в верхнем и нижнем регистрах. Хотя в некоторых случаях, как, например, на картинке выше, это и преимущество.
  • Максимум 64 замены — хоть и много, но все же ограничение.
  • Формально процедура замены таким способом будет происходить массово и моментально, однако длительность написания таких формул сводит на нет это преимущество. За исключением случаев, когда они будут использоваться многократно.

Файл-шаблон с формулой множественной замены

Вместо явного прописывания заменяемых паттернов в формуле существует вариант использовать внутри нее ссылки на ячейки, значения в которых можно прописывать на свое усмотрение. Это сократит время, так как не требует редактирования сложной формулы.

Файл доступен по ссылке, но можно и не скачивать его, а просто скопировать текст формулы ниже и вставить ее в любую ячейку, кроме диапазона A1:B64. Формула заменяет в ячейке C1 значения в столбце A стоящими напротив в столбце B.

функция для замены нескольких букв
Формула в файле-шаблоне для множественной замены на примере транслитерации

А вот и она сама (тройной клик по любой части текста = выделить всю формулу): обращается к ячейке D1, делая 64 замены по правилам, указанным в ячейках A1-B64. При этом в столбцах можно удалять значения — это не нарушит её работу.

=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(D1;$A$1;$B$1);$A$2;$B$2);$A$3;$B$3);$A$4;$B$4);$A$5;$B$5);$A$6;$B$6);$A$7;$B$7);$A$8;$B$8);$A$9;$B$9);$A$10;$B$10);$A$11;$B$11);$A$12;$B$12);$A$13;$B$13);$A$14;$B$14);$A$15;$B$15);$A$16;$B$16);$A$17;$B$17);$A$18;$B$18);$A$19;$B$19);$A$20;$B$20);$A$21;$B$21);$A$22;$B$22);$A$23;$B$23);$A$24;$B$24);$A$25;$B$25);$A$26;$B$26);$A$27;$B$27);$A$28;$B$28);$A$29;$B$29);$A$30;$B$30);$A$31;$B$31);$A$32;$B$32);$A$33;$B$33);$A$34;$B$34);$A$35;$B$35);$A$36;$B$36);$A$37;$B$37);$A$38;$B$38);$A$39;$B$39);$A$40;$B$40);$A$41;$B$41);$A$42;$B$42);$A$43;$B$43);$A$44;$B$44);$A$45;$B$45);$A$46;$B$46);$A$47;$B$47);$A$48;$B$48);$A$49;$B$49);$A$50;$B$50);$A$51;$B$51);$A$52;$B$52);$A$53;$B$53);$A$54;$B$54);$A$55;$B$55);$A$56;$B$56);$A$57;$B$57);$A$58;$B$58);$A$59;$B$59);$A$60;$B$60);$A$61;$B$61);$A$62;$B$62);$A$63;$B$63);$A$64;$B$64)

Заменить несколько значений на одно

С помощью функции «ПОДСТАВИТЬ»

При замене нескольких значений на одно и то же механика работы формул на основе нескольких уровней вложенности не будет отличаться от замены нескольких на несколько. Просто третий аргумент (на что заменить) на всех уровнях вложенности будет один и тот же. Кстати, если оставить его пустым (кавычки без символов между ними), то это позволит удалить определенные символы. Пример: удалить цифры из ячейки путем замены на пустоту:

=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"1";"");"2";"");"3";"");"4";"");"5";"");"6";"");"7";"");"8";"");"9";"");"0";"")

С помощью регулярных выражений

Важно: регулярные выражения не поставляются в Excel “из коробки”, но формулы ниже доступны бесплатно, если установить надстройку !SEMTools.

Регулярные выражения (RegEx, регулярки) — наиболее удобное решение, когда нужно заменить несколько символов на один. Все эти несколько символов обычным способом безо всяких разделителей нужно перечислить внутри квадратных скобок. Примеры формул:

=regexreplace(A1;"d";"#")
=regexreplace(A1;"w";"#")
=regexreplace(A1;"а-яА-Я";"#")
=regexreplace(A1;"s";"_")

Первая заменяет на символ “#” все цифры, вторая — все английские буквы, а третья — все кириллические символы в верхнем и нижнем регистре. Четвёртая заменяет любые пробелы, в том числе табуляцию и переносы строк, на нижнее подчеркивание.

замена регулярными выражениями
Массовая замена символов регулярными выражениями при установленной надстройке !SEMTools

Если же нужно заменять не символы, а несколько значений, состоящих в свою очередь из нескольких букв, цифр или знаков, синтаксис предполагает уже использование круглых скобок и вертикальной черты “|” в качестве разделителя.

Массовая замена в !SEMTools

Надстройка для Excel !SEMTools позволяет в пару кликов производить замены на всех уровнях:

  • символов и их сочетаний,
  • паттернов регулярных выражений,
  • слов,
  • целых ячеек (в некоторой степени аналог ВПР).
Массовая замена в Excel с !SEMTools
Меню инструментов массовой замены в !SEMTools

При этом процедуры изменяют исходный диапазон, что экономит время. Все что нужно —предварительно выделить его, определиться с задачей, вызвать нужную процедуру и выделить два столбца сопоставления заменяемых и замещающих значений (предполагается, что если вы знаете, что на что менять, то и такие списки есть).

Пример: замена символов по вхождению

Аналог обычной процедуры замены без учета регистра заменяемых символов, по вхождению. С одним отличием: здесь замена массовая и можно выбрать сколько угодно строк с парами «заменяемое-заменяющее» значение.

Ниже пример с единичными символами, но паттерны могут быть какими угодно в зависимости от вашей задачи.

Массовая замена символов по вхождению на примере Leet Language (некоторые английские буквы заменяются на похожие цифры)

Пример: замена списка слов на другой список слов

На этом примере — замена списка слов на другой список, в данном случае на одно и то же слово. Здесь решается задача типизации разнородных фраз путем замены слов, содержащих латиницу и цифры, на одно слово. Далее после этой операции можно будет посчитать уникальные значения в столбце, чтобы выявить наиболее популярные сочетания.

замена списка слов на одно и то же слово
Замена списка слов на другой список в !SEMTools

С версии !SEMTools 9.18.18 появилась опция: при замене списка слов не учитывать пунктуацию в исходных предложениях, а регистр слов теперь сохраняется.

замена списка слов на другой список в Excel

Инструменты находятся в группе макросов «ИЗМЕНИТЬ» в отдельном меню и для удобства продублированы в меню «Изменить символы», «Изменить слова» и «Изменить ячейки».

Скачивайте надстройку !SEMTools и делайте массовую замену символов, слов или целых списков в Excel!


Смотрите также по теме поиска и замены данных в Excel:

  • Найти заглавные/строчные буквы в ячейке;
  • Найти латиницу или кириллицу в тексте;
  • Найти числа в текстовых ячейках;
  • Обнаружить текстовые символы;
  • Функция НАЙТИ в Excel;
  • Функция ПОИСК в Excel;
  • Функция ЗАМЕНИТЬ в Excel;
  • Найти определенные символы в ячейках Excel.

Поменять формулу сразу во всех ячейках

alex379

Дата: Среда, 14.05.2014, 09:11 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

В таблице во множестве ячеек используется одна и та же формула. Как поменять формулу во всех ячейках сразу?

 

Ответить

Russel

Дата: Среда, 14.05.2014, 09:12 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 1392


Репутация:

318

±

Замечаний:
0% ±


Excel 2010

выделить все ячейки — F2 — поменять формулу — Ctrl+Enter


QIWI 9173973973

 

Ответить

alex379

Дата: Среда, 14.05.2014, 09:50 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Russel, спасибо, получилось. Только почему то результаты расчетов стали неправильными. Это файл в 2007 или 2003 экселе создан. Я его в 2010 меняю. Может поэтому?

 

Ответить

китин

Дата: Среда, 14.05.2014, 09:53 |
Сообщение № 4

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

alex379, а кусочек файла,где результаты неправильный приложить?так навскидку сказать трудно


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Russel

Дата: Среда, 14.05.2014, 09:53 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 1392


Репутация:

318

±

Замечаний:
0% ±


Excel 2010


Чёрт его знает, мы же Ваш файл не видим!


QIWI 9173973973

 

Ответить

alex379

Дата: Среда, 14.05.2014, 09:59 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Russel, если выделять по одному столбцу и формулы менять, то нормально получается. Если все сразу, то почему то ссылки на ячейки сбиваются. Ну да ладно поменяю в несколько заходов столбцами :)

Сообщение отредактировал alex379Среда, 14.05.2014, 10:00

 

Ответить

alex379

Дата: Среда, 14.05.2014, 10:01 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

китин, вот файл

К сообщению приложен файл:

_QQpush.xls
(21.5 Kb)

 

Ответить

alex379

Дата: Среда, 14.05.2014, 10:04 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Russel, файл выложил, посмотрите пожалуйста.

 

Ответить

Pelena

Дата: Среда, 14.05.2014, 10:14 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Видимо, столбец B надо закрепить
=39,5*C4+(1-C4)*(204,5*$B19-90)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

alex379

Дата: Среда, 14.05.2014, 10:34 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Pelena, спасибо :)

 

Ответить

alex379

Дата: Среда, 14.05.2014, 10:38 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Pelena, еще вопрос. Как кол-во знаков после запятой уменьшить?

 

Ответить

китин

Дата: Среда, 14.05.2014, 10:44 |
Сообщение № 12

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

формат ячеек числовой.кличество знаков после запятой выбираем по желанию


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

alex379

Дата: Среда, 14.05.2014, 10:47 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 11


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

китин, спасибо :)

 

Ответить

Автоматичиская замена части формулы

Автор Евгений1986, 26.01.2012, 08:48

« назад — далее »

Есть итоговая таблица на листе январь. В эту таблицу собираются данные с других листов (Затраты_январь, Выручка_январь). Для следующего месяца копируются листы января, получаются листы январь (2), Затраты_январь (2), Выручка_январь (2). В названии листов январь заменяется на февраль. Получаются листы — февраль, Затраты_февраль, Выручка_февраль.

Проблема: Как автоматизировать замену части формулы в итоговой таблице февраль? пример: в формуле =Затраты_январь!C9, «январь» заменить на «февраль» и получить формулу — =Затраты_февраль!C9. Если кто знает, пожалуйста, напишите как это сделать быстро!


Как вариант решения проблемы:
на листе «февраль» — комбинация клавиш Ctrl+H (открыть окно Найти и заменить),
затем — как на рисунке (для разворачивания нижней части окна используйте кнопку «Параметры»),
Заменить все.


Действует! Спасибо, Виктория!


Посмотрите формулу в красной ячейке. Сама ссылается на нужный лист нужного месяца в зависимости от названия листа, в котором формула находится

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Большое спасибо за предложенное решение! Однако, хотелось бы до конца понять как формула работает. Если перенести формулу из выделенной красной ячейки в ячейку C9, то формула работает, а вот если перенести на ячейку C12 и нижестояшие, то не работате, даже если заменить b4 на c9 и так далее.  _Boroda_, пожалуйста, покажите какие формулы должны быть в ячейках, ссылающихся на лист затраты_январь, чтобы в них были значения с листа затраты_февраль.


Посмотрите в таком виде. Вроде понятнее.
Переименуйте первый лист в январь, потом обратно в февраль

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995



  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Автоматичиская замена части формулы

0 / 0 / 0

Регистрация: 23.09.2011

Сообщений: 61

1

03.09.2012, 00:55. Показов 28846. Ответов 15


Студворк — интернет-сервис помощи студентам

Доброго времени суток !
Вот столкнулся с такой пробелмой, ищу помощи..

На листе Excel 2003 имеет несколько тысяч формул типа

Код

='C: Budget- 2013[Co-Financing17.xls]1.1'!$AR$10
='C: Budget- 2013[Co-Financing17.xls]1.1'!$AА$10
='C: Budget- 2013[Co-Financing17.xls]1.1'!$AB$10
='C: Budget- 2013[Co-Financing17.xls]1.1'!$AC$105
='C: Budget- 2013[Co-Financing17.xls]1.1'!$AC$109

итд.

Нужно через автозамену (заменить все) заменить последнюю цифру во всех формулах, которые заканчиваются на 10 — в даном примере на 14 например, однако через автозамену это сделать не получается, так как $105, $109 также меняется на $145, $149, так как присутствует $10. Как сделать, чтобы замена не происходила в тех числах, которые состоят «визуально» в т.ч. и из заменяемого числа.

Благодарю и низко кланяюсь..



0



Alex77755

11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

03.09.2012, 08:58

2

Несколько тысяч ссылок!!!
Не стал бы такого делать никогда
заменить можно макросом

Visual Basic
1
2
3
4
5
Sub AVTOZAM()
    For Each c In UsedRange.Cells
        If Right(c.Formula, 2) = 10 Then c.Formula = Replace(c.Formula, "10", "14")
    Next
End Sub



2



Апострофф

Заблокирован

03.09.2012, 10:08

3

Alex77755, 3-я строка

Visual Basic
1
If Right(c.Formula, 2) = 10 Then c.Formula = Left$(c.Formula, Len(c.Formula) - 2) & 14

иначе для подобных случаев с Replace результат м.б. непредсказуем

=’C: Budget- 2010[Co-Financing10.xls]1.1′!$AR$10

Результат
=’C: Budget- 2014[Co-Financing14.xls]1.1′!$AR$14



2



11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

03.09.2012, 10:10

4

Согласен



1



0 / 0 / 0

Регистрация: 23.09.2011

Сообщений: 61

03.09.2012, 13:00

 [ТС]

5

Здорово..А можно было бы кнопку сделать де указываем число, которое надо заменить и число на которое надо сделать замену ?

Добавлено через 32 минуты

Цитата
Сообщение от Pandora12
Посмотреть сообщение

Здорово..А можно было бы кнопку сделать де указываем число, которое надо заменить и число на которое надо сделать замену ?

P.S.не запускается макрос, требует объект «object required»



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

03.09.2012, 13:11

6

Visual Basic
1
For Each c In ActiveSheet.UsedRange.Cells

Добавлено через 5 минут
Можно оптимизировать:

Visual Basic
1
2
3
4
5
6
7
Sub AVTOZAM()
    Dim c As Object, s$
    For Each c In Cells.SpecialCells(xlCellTypeFormulas)
        s = c.Formula
        If Right$(s, 2) = "10" Then Mid(s, Len(s) - 1) = "14": c.Formula = s
    Next
End Sub



1



Alex77755

11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

03.09.2012, 13:24

7

Visual Basic
1
2
3
4
5
6
7
8
9
Sub AVTOZAM()
 
s = InputBox("Введите через запятую что на что менять", "", "10,14")
    For Each c In ActiveSheet.UsedRange.Cells
        If Right(c.Formula, Len(Trim(Split(s, ",")(0)))) = Trim(Split(s, ",")(0)) Then
            c.Formula = Left$(c.Formula, Len(c.Formula) - Len(Trim(Split(s, ",")(0)))) & Trim(Split(s, ",")(1))
        End If
    Next
End Sub

Добавлено через 4 минуты
Или так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub AVTOZAM()
Dim K, N
 
s = InputBox("Введите через запятую что на что менять", "", "10,14")
If s = "" Then Exit Sub
K = Trim(Split(s, ",")(0))
N = Trim(Split(s, ",")(1))
    For Each c In ActiveSheet.UsedRange.Cells
        If Right(c.Formula, Len(K)) = K Then
            c.Formula = Left$(c.Formula, Len(c.Formula) - Len(K)) & N
        End If
    Next
End Sub



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

03.09.2012, 14:32

8

Все-таки важно пробегать циклом только по ячейкам с формулами, иначе константы тоже будут заменяться, например 910 на 914.



1



Alex77755

11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

03.09.2012, 14:43

9

Казанский,
Справедливо.
Может тогда так?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub AVTOZAM()
Dim K, N
 
s = InputBox("Введите через запятую что на что менять", "", "10,14")
If s = "" Then Exit Sub
K = Trim(Split(s, ",")(0))
N = Trim(Split(s, ",")(1))
    For Each C In ActiveSheet.UsedRange.Cells
    If C.Text <> C.Formula Then
        If Right(C.Formula, Len(K)) = K Then
            C.Formula = Left$(C.Formula, Len(C.Formula) - Len(K)) & N
        End If
    End If
    Next
End Sub



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

03.09.2012, 14:51

10

Проще

Visual Basic
1
If C.HasFormula Then

Но я же приводил выше код для цикла по ячейкам с формулами — меньше работы:

Visual Basic
1
For Each c In Cells.SpecialCells(xlCellTypeFormulas)



2



0 / 0 / 0

Регистрация: 23.09.2011

Сообщений: 61

03.09.2012, 15:37

 [ТС]

11

Не работает кнопка в моем Excel 2003. Выдает ошибку типа нарушения в » Advanced Find and Replace» Able bits.com и предлагает купить эту программку и инсталлировать ее… Как этот скрипт переписать в просто в макрос.. без кнопки тогда ? Действительно, как написал товрищ, скрипт меняет в том числе и то, что менять НЕ требуется, как раз, как в примере, который он привел.. И еще на один момент обратил внимание..если надо заменить ОДНОЗНАЧНОЕ число например 9 на 13,то замена не производится .. Скрипт начинает считать и довольно быстро завершается, но ошибку не выдает, может что-то и меняет (сразу не определишь -большой массив), но полноценной замены не производится..во всех тех местах, где это требуется..



0



Alex77755

11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

03.09.2012, 15:53

12

Проверял в своём 2003.

как написал товрищ, скрипт меняет в том числе и то, что менять НЕ требуется

Проверяет и меняет только последние символы в количестве равном количесву символов в первом числе на второе число. Меняет только в формулах. Переделать в макрос? Легко!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Макрос()
Dim K, N
 
s = InputBox("Введите через запятую что на что менять", "", "10,14")
If s = "" Then Exit Sub
K = Trim(Split(s, ",")(0))
N = Trim(Split(s, ",")(1))
    For Each C In ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas)
        If Right(C.Formula, Len(K)) = K Then
            C.Formula = Left$(C.Formula, Len(C.Formula) - Len(K)) & N
        End If
    Next
End Sub



1



Dmitrii

2617 / 547 / 109

Регистрация: 21.03.2012

Сообщений: 1,051

03.09.2012, 16:36

13

Регулярные выражения должны сработать быстрее, чем строковые функции. Пример:

Visual Basic
1
2
3
4
5
6
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "10$"
For Each c In Cells.SpecialCells(xlCellTypeFormulas)
    c.Formula = objRegExp.Replace(c.Formula, "14")
Next
Set objRegExp = Nothing



1



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

03.09.2012, 17:12

14

И что, если заменять нечего, все равно присваивать формулу? Тогда уж .Test допишите.



1



0 / 0 / 0

Регистрация: 23.09.2011

Сообщений: 61

03.09.2012, 18:23

 [ТС]

15

Рябята..вроде зработало..Щас еще поизучаю и наишу.. респект и уважуха..!!!!!!



0



2617 / 547 / 109

Регистрация: 21.03.2012

Сообщений: 1,051

03.09.2012, 22:48

16

Казанский, это лишь пример.



0



Например, у вас есть список формул, показанный как = Лист1! (Ячейка) +1, теперь вы хотите заменить все Sheet1 в формулах с Sheet3 как показано на скриншоте ниже, как вы можете быстро решить эту проблему в Excel?

Перемещение или замена ссылок в формуле Excel


Перемещение или замена ссылок в формуле Excel

Если вы хотите переместить или заменить конкретную ссылку во всех формулах диапазона или листа, вы можете применить Найти и заменить утилита для ее решения.

1. Выберите диапазон или лист, на котором вы хотите использовать формулы, нажмите Ctrl + H ключи, чтобы показать Найти и заменить диалог. Смотрите скриншот:
документ переместить заменить ссылку 3

2. Нажмите Опции чтобы развернуть диалоговое окно, введите ссылку, которую хотите найти в Найти то, что текстовое поле, введите новую ссылку, которую вы используете в Заменить диалоговое окно и выберите Формулы в Заглянуть раскрывающийся список. Смотрите скриншот:
документ переместить заменить ссылку 4

3. Нажмите Заменить все, то все ссылки в выбранном или активном листе были заменены на новые.

Наконечник.

1. Если вы хотите переместить ссылки, вам просто нужно ничего не оставлять in Заменить текстовое поле в Найти и заменить Диалог.

2. Если вы хотите найти или заменить символы или ссылки в нескольких книгах или листах, вы можете применить Kutools for Excelпродвинутый Найти и заменить функция, которая может оказать вам любезную услугу. Полная функция без ограничений в течение 60 дней, пожалуйста, скачайте и получите бесплатную пробную версию сейчас.
документ переместить заменить ссылку 5


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (0)


Оценок пока нет. Оцените первым!

Хитрости »

12 Август 2015              83706 просмотров


Массовая замена слов

Предположим, что нам необходимо заменить все «ул.» на листе на «улица «. Или русское слово «дом» на английское «house». Или еще интереснее: все английские буквы на русские. Например, английская «а» должна быть заменена на русскую «a», английская «c» на русскую «с», английская «H» на русскую «Н» и т.д. А такое тоже нередко бывает и доставляет проблемы. Ведь если в одной таблице будут русские буквы, а в другой английские — то применение большинства встроенных функций поиска(та же ВПР) просто не найдут соответствия.
Если подобную замену надо сделать для одного сочетания, то все просто: жмем Ctrl+H и указываем что заменить и на что. Но если таких замен надо сделать 20? Или 120? Это надо будет 120 раз нажать и ввести что заменять и на что. А если это надо сделать еще и не в одном документе — то…Думаю сами справитесь с умножением количества замен на количество файлов, в которых это надо сделать. И вроде бы простая операция превращается в ваш личный ад на работе.
Недавно на форуме участнику потребовалось автоматизировать именно такую штуку. Т.к. код несложный — решил написать и чуть дополнив выложить для всех кому код может потребоваться:

Option Explicit
Sub Replace_Mass()
    Dim s As String
    Dim lCol As Long
    Dim avArr, lr As Long
    Dim lLastR As Long
    Dim lToFindCol As Long, lToReplaceCol As Long, lLookAt As Long
 
    'запрашиваем направление перевода - с русского на англ. или наоборот
    lCol = Val(InputBox("Укажите направление перевода:" & vbNewLine & _
                    "   1 - ru-en" & vbNewLine & _
                    "   2 - en-ru", "Запрос", 1))
    If lCol = 0 Then Exit Sub
    'запрашиваем по части ячейки искать или по всему тексту
    'по умолчанию - по части
    lLookAt = Val(InputBox("Искать соответствие по части ячейки или по всему тексту:" & vbNewLine & _
                    "   1 - по всему тексту" & vbNewLine & _
                    "   2 - по части ячейки", "Запрос", 2))
    If lLookAt = 0 Then Exit Sub
 
    Select Case lCol
    Case 1
        lToFindCol = 1
        lToReplaceCol = 2
    Case 2
        lToFindCol = 2
        lToReplaceCol = 1
    End Select
 
    Application.ScreenUpdating = 0
    'Получаем с листа Соответствия значения, которые надо заменить в выделенном диапазоне
    With ThisWorkbook.Sheets("Соответствия")
        lLastR = .Cells(.Rows.Count, 1).End(xlUp).Row
        avArr = .Cells(1, 1).Resize(lLastR, 2)
    End With
    'заменяем
    For lr = 1 To UBound(avArr, 1)
        s = avArr(lr, lToFindCol)
        If Len(s) Then 'если значение для замены не пустое
            Selection.Replace s, avArr(lr, lToReplaceCol), lLookAt
        End If
    Next lr
    Application.ScreenUpdating = 1
End Sub

Как это работает. В книге есть специальный лист с именем «Соответствия». На нем в столбце А записаны слова, которые необходимо заменить, а в столбце В — на что эти слова заменить. Если в столбце А пусто — то замена не будет произведена. Если в столбце В пусто — то значение из столбца А будет просто удалено.
Замены производятся исключительно в выделенных на листе ячейках. Ячейки могут быть несмежными.

Итак, необходимо сделать много замен. Скачиваете файл:

  Массовая замена слов (54,5 KiB, 9 783 скачиваний)

Примечание: Я сделал файл как переводчик. Т.е. в первом столбце русские слова, во втором английские. Но в столбцах может быть что угодно — хоть слова, хоть символы, хоть числа.

На лист «Соответствия» записываете в столбец А — что заменять, в столбец В — на что заменять. Переходите на лист книги, в котором необходимо произвести замену. Выделяете ячейки, значения в которых надо найти и заменить. После чего жмете Alt+F8 и выбираете макрос «Tips_Macro_ReplaceMASS.xls!Replace_Mass»(или просто «Replace_Mass», если код в той же книге, что и ячейки для поиска и замены).

Первым появится

окно с запросом направления перевода. По умолчанию 1(ru-en). Т.е. будет браться слово из столбца А и заменяться словом из столбца В. Но если указать 2 — то будет браться слово из столбца В и заменяться словом из столбца А. Т.е. аналог переводчика — с рус. на англ. и наоборот. Либо из А в В, либо из В в А.

Вторым появится

запрос на метод просмотра данных:

  • если указать «1 — по всему тексту» — данные из столбца А будут заменять только в том случае, если ячейка в выделенном для замены диапазоне полностью совпадает со значением из столбца А листа «Соответствия». Например, в любой из выделенных ячеек записано «На столе книга», а на листе «Соответствия» в столбце А есть только слово «книга». Замена не будет произведена, т.к. необходимо, чтобы в столбце А было так же «На столе книга».
  • если указать «2 — по части ячейки» — данные из столбца А будут заменять в случае, если ячейка в выделенном для замены диапазоне содержит любое слово из столбца А листа «Соответствия». На том же примере — «На столе книга». Если выбрать 2, то в тексте «На столе книга» слово книга будет заменено на слово из столбца В — «book».

И еще один практический пример чуть модифицированного кода. Предположим, имеется таблица выручки по реализации продукции:
Таблица выручки
Как видно, здесь присутствую только номера статей, но нет их расшифровки. Зато расшифровка есть в отдельном листе «Справочник»:
Справочник
Как видно, в справочнике присутствуют нужные номера статей и можно было бы применить ту же ВПР(VLOOKUP) для замен. Если бы не одно но: в таблице по реализации помимо номеров статьей есть еще лишний текст «Статья затрат:». Конечно, можно сначала заменить этот текст, потом в отдельном столбце применить ВПР, заменить формулу значениями и вернуть в исходный столбец. Если при этом надо еще оставить текст «Статья затрат:», то надо будет сделать еще доп.манипуляции либо при составлении формулы, либо после. В любом случае — слишком много лишних телодвижений. А значит бОльшие времязатраты.
Приложенный ниже файл поможет сделать это в разы быстрее:

Скачать файл с примером и кодом:

  Массовая замена слов — статьи.xls (91,5 KiB, 2 648 скачиваний)

и в итоге за пару секунд получим следующий результат:
Результат замены
Достаточно выделить столбец со статьями на листе с реализацией и запустить код(либо нажатием кнопки заменить значения, либо нажав Alt+F8 и выбрав из списка макросов макрос

Replace_Mass

).
После нажатия на кнопку будут запрошены следующие параметры:

  1. указать номер столбца значений в листе «Справочник», в котором искать соответствия номерам статей(в нашем случае это столбец 1(А))
  2. указать номер столбца, значениями которого заменять найденные в таблице реализации значения(это может быть один из трех столбцов справочника: Группа затрат, Статья затрат, Подстатьи затрат). Логичнее всего указать столбец 4, т.к. он наиболее детализирован и конкретнее указывает расшифровку статьи
  3. далее будет предложено указать точность поиска:
    • если указать «1 — по всему тексту» — данные будут заменены только в том случае, если значение ячейки в выделенном для замены диапазоне полностью совпадает со значением из столбца А листа «Справочник». Т.е. если бы у нас в таблице реализации был бы записан только номер статьи(1.01), тогда можно было бы указать именно 1
    • если указать «2 — по части ячейки» — данные будут заменены только в том случае, если значение ячейки в выделенном для замены диапазоне содержит любое значение из столбца А листа «Справочник». Это больше подходит к описанному случаю, т.к. нам необходимо заменить исключительно номер статьей на их расшифровку, оставив при этом текст «Статья затрат: «

Если все указано корректно, то на листе будут произведены все необходимые замены.
Возможные ошибки, которые предусмотрены кодом и о которых будет сообщено соответствующим сообщением(код прервется, замены не будут произведены):

  • на листе Справочник нет значений
  • в качестве столбца для поиска значений и для замены значений на листе Справочник указано одно и то же число
  • в качестве столбца значений для замены указано число, превышающее общее количество столбцов на листе Справочник

Особое внимание хочу уделить случаю, когда выбирается замена по части ячейки. В этом случае лучше список на листе Справочник отсортировать по длине текста по тому столбцу, в котором будут значения для поиска. Зачем это надо: т.к. значение по части ячейки будет заменять не полное соответствие, то есть вероятность неверных замен. Например, есть текст «Статья затрат: 1.011». В то же время на листе Справочник есть статьи «1.01» и «1.011». Т.к. «1.01» идет раньше в большинстве случаев, то текст будет заменен некорректно: «Статья затрат: ТВ1«.
Чтобы получить длину строки текста можно использовать функцию ДЛСТР(LEN):
=ДЛСТР(A2)
=LEN(A2)

В отличие от кода, приведенного в начале статьи, код во втором файле позволяет производить замену не только на основании двух столбцов, но и ориентируясь на таблицу данных, как видно из реализации. Можно выбрать любой столбец Справочника для поиска значений и так же любой для замены, что предоставляет большую гибкость по замене значений.

Так же см.:
Замена значений по списку в PowerQuery
Найти в ячейке любое слово из списка
Замена ссылок в формулах на их значения
Как удалить строки по условию?


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Стандартный способ решения этой задачи — скопировать выделенные ячейки и вставить их как значения, воспользовавшись специальной вставкой. Но если формул много или нам необходимо заменить формулы на значения во всех листах рабочей книги? Через операцию копирования и вставки можно и до ночи промучиться.

В надстройке ЁXCEL есть команда, которая помогает существенно ускорить данную операцию.

После того как надстройка подключена открываем рабочую книгу, в которой необходимо заменить формулы на значения. Переходим во вкладку «ЁXCEL» Главного меню, нажимаем кнопку «Формулы» и выбираем команду «Заменить формулы на значения»:

В открывшемся диалоговом окне устанавливаем необходимые параметры замены и нажимаем «ОК»:

Все выбранные формулы будут заменены на значения.

Добавить комментарий

Like this post? Please share to your friends:
  • Мастер диаграмм источник данных диаграммы в excel
  • Мастер диаграмм в табличном процессоре excel
  • Мастер диаграмм в ms word
  • Мастер диаграмм в ms excel 2003
  • Мастер диаграмм в excel что это такое