Быстрая замена значений по условию в Excel
Добрый день, уважаемые читатели блога! Сегодня поговорим о быстрой замене значений в таблице Excel. Зачем нам это нужно, когда есть формулы ЕСЛИ и условное форматирование? Ответ прост — для экономии времени. Но ведь можно ещё быстрее. Ниже будет пример с небольшой таблицей, где хочется сразу выделить или поместить нужное значение.
Есть две таблицы, одна оригинал, вторая для изменений. Все ученики кто получил 4 и выше имеют результат «Прошёл», у кого 3 и ниже — «Не прошёл».
Если будем использовать условное форматирование, придётся писать формулу каждый раз и если таблица очень большая и сразу хочется увидеть результат — лучше воспользоваться макросом.
Сразу оговорюсь в макросе будет прописан диапазон для замены, так что если таблица будет больше, нужно просто изменить диапазон.
Как обычно:
- вкладка «Разработчик», блок кнопок «Код»;
- жмём «Visual Basic»;
- добавляем новый модуль Insert -> Module.
Вставляем следующий код.
Sub Result()
Dim cell As Range
‘ Проверка каждой ячейки диапазона на прохождение
For Each cell In Range(«I2:L10»).Cells
If cell.Value <= 3 Then
cell.Value = «Не прошёл»
ElseIf cell.Value >= 4 Then
cell.Value = «Прошёл»
End If
Next
End Sub
В этом случае используется связка из команд IF и ElseIf, что позволяет нам несколько расширить понимание формулы ЕСЛИ. Напомню, что макрос будет применён только к ячейкам из диапазона I2:L10!
Запускаем выбор макросов с помощью сочетания клавиш Alt+F8 и нажимаем кнопку «Выполнить».
Получаем результат. Во второй таблице я сразу вижу кто из учеников прошёл дальше, а кто нет. Ну и кому что необходимо подтянуть:)
Таким образом решается некая ограниченность формулы ЕСЛИ, ведь условия в макросе можно продолжить и подобрать свои, всего лишь изменив значения.
semkaru Пользователь Сообщений: 20 |
уважаемые знатоки, здравствуйте. подскажите, пожалуйста, с написанием макроса по замене данных, а именно: есть данные, например в колонке A. необходимо произвести замену по условиям, например, где в ячейке имеется в ЛЮБОМ месте слово book, например, заменить ПОЛНОСТЬЮ данную ячейку на значение table. например в ячейке есть слово 7823632BOOK43545 и заменить просто на table. спасибо. |
Catboyun Пользователь Сообщений: 1631 |
вариант без макросов: Прикрепленные файлы
|
semkaru Пользователь Сообщений: 20 |
спасибо за ответ, но это я знаю у меня около 5000 строк с разными условиями, и замена нужна где-то 3 раза в день, т.е. хочется тяпнуть по кнопоче макроса и все, а не в ручную |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#4 10.09.2016 21:25:52
А как макрос узнает про эти «разные» условия? |
||
semkaru Пользователь Сообщений: 20 |
ну или не макрос. типа if A1:A5000 *book* then table, if B1:B5000 *qwert* then kuku тут может даже и не макрос мне нужен. может просто формула. а условий штук 5 будет всего, которые руками можно прописать. |
Catboyun Пользователь Сообщений: 1631 |
#6 10.09.2016 21:36:14 сооб.№2 записать рекордером
и так 5 строк вставить, поменять значения What и Replacement |
||
semkaru Пользователь Сообщений: 20 |
#7 10.09.2016 21:46:10
ошибка Прикрепленные файлы
|
||
Catboyun Пользователь Сообщений: 1631 |
у меня все нориально Прикрепленные файлы
|
semkaru Пользователь Сообщений: 20 |
спасибо. работает. и ваш пример, и я допилил. но есть еще вопрос, при исполнении макроса при нажатии ALT-F8 можно указать где исполнить макрос, т.е. открыты два файла, kkk и еще дугой. из kkk жму ALT-F8 выбираю «Находится в» «Все открытые книги, но меняется только в kkk «
|
Catboyun Пользователь Сообщений: 1631 |
Так Вам надо макрос записать в Личную книгу макросов Прикрепленные файлы
|
semkaru Пользователь Сообщений: 20 |
огромное спасибо, а можете еще подсказать формулу для макроса, типа после столбца B вставляем автоматически по макросу ПУСТОЙ столбец, и типа добавляем что-то наподобие в столбец C: =B+123, но чтоб в C были заполнены строки только то, где есть значения в B, т.е. если в И значения до 2300 строки, то и в C чтрб значение подставлялось до 2300 строки спасибо |
Catboyun Пользователь Сообщений: 1631 |
#12 11.09.2016 07:52:15 semkaru
, это Вам нужно новую тему создавать |
На чтение 9 мин Просмотров 7.5к.
Содержание
- Функция ПОДСТАВИТЬ при условии подставляет значение
- Автозамена значения в текстовых ячейках с помощью функции ПОДСТАВИТЬ
- Формула с макросом регулярного выражения и функция ПОДСТАВИТЬ
- Особенности использования функции ПОДСТАВИТЬ в Excel
- Быстрая замена значений по условию в Excel
- Задача
- Замена текстовых значений
- Чтобы заменить текстовые значения:
- Замена числовых, логических значений или значений даты и времени
- Чтобы заменить числовые, логические значения или значения даты и времени:
Функция ПОДСТАВИТЬ в Excel выполняет динамическую замену определенной части строки на указанное новое значение и возвращает новую строку, содержащую замененную часть текста. Благодаря этой функции можно подставлять значения из другой ячейки. Рассмотрим возможности функции на конкретных примерах в Excel.
Функция ПОДСТАВИТЬ при условии подставляет значение
Пример 1. В результате расчетов, произведенных в некотором приложении, были получены некоторые значения, записанные в таблицу Excel. Некоторые величины рассчитать не удалось, и вместо числового представления была сгенерирована ошибка “NaN”. Необходимо заменить все значения “NaN” на число 0 в соответствующих строках.
Для замены и подстановки используем рассматриваемую формулу в качестве массива. Вначале выделим диапазон ячеек C2:C9, затем введем формулу через комбинацию Ctrl+Shift+Enter:
Функция ЧЗНАЧ выполняет преобразование полученных текстовых строк к числовым значениям. Описание аргументов функции ПОДСТАВИТЬ:
- B2:B9 – диапазон ячеек, в которых требуется выполнить замену части строки;
- “NaN” – фрагмент текста, который будет заменен;
- 0 – фрагмент, который будет вставлен на место заменяемого фрагмента.
Для подстановки значений во всех ячейках необходимо нажать Ctrl+Shift+Enter, чтобы функция была выполнена в массиве. Результат вычислений:
Таким же образом функция подставляет значения и другой таблицы при определенном условии.
Автозамена значения в текстовых ячейках с помощью функции ПОДСТАВИТЬ
Пример 2. Провайдер домашнего интернета хранит данные о своих абонентах в таблице Excel. Предположим, улица Садовая была переименована в Никольскую. Необходимо быстро произвести замену названия улицы в строке данных об адресе проживания каждого клиента.
Для выполнения заданного условия используем формулу:
Примечание: в данном примере ПОДСТАВИТЬ также используется в массиве Ctrl+Shift+Enter.
В результате получим:
Формула с макросом регулярного выражения и функция ПОДСТАВИТЬ
Пример 3. При составлении таблицы из предыдущего примера была допущена ошибка: все номера домов на улице Никольская должны быть записаны как «№№-Н», где №№ – номер дома. Как быстро исправить ошибку?
В данном случае для поиска числовых значений номера дома воспользоваться встроенными функциями не удастся. Рациональнее всего использовать регулярные выражения. По умолчанию, в Excel отсутствует функция для работы с регулярными выражениями, однако ее можно добавить следующим способом:
- Открыть редактор макросов (Ctrl+F11).
- Вставить исходный код функции (приведен ниже).
- Выполнить данный макрос и закрыть редактор кода.
Public Function RegExpExtract(Text As String , Pattern As String , Optional Item As Integer = 1) As String
On Error GoTo ErrHandl
Set regex = CreateObject( «VBScript.RegExp» )
regex.Pattern = Pattern
regex. Global = True
If regex.Test(Text) Then
Set matches = regex.Execute(Text)
RegExpExtract = matches.Item(Item – 1)
Exit Function
End If
ErrHandl:
RegExpExtract = CVErr(xlErrValue)
End Function
Для того, чтобы воспользоваться этой формулой, в любой ячейке необходимо ввести следующее:
Регулярные выражения могут быть различными. Например, для выделения любого символа из текстовой строки в качестве второго аргумента необходимо передать значение «w», а цифры – «d».
Для решения задачи данного Примера 3 используем следующую запись:
- Функция ЕСЛИОШИБКА используется для возврата исходной строки текста (B2), поскольку результатом выполнения функции RegExpExtract(B2;»Никольская») будет код ошибки #ЗНАЧ!, если ей не удалось найти хотя бы одно вхождение подстроки «Никольская» в строке B2.
- Если результат выполнения сравнения значений RegExpExtract(B2;»Никольская»)=»Никольская» является ИСТИНА, будет выполнена функция ПОДСТАВИТЬ(B2;RegExpExtract(B2;»d+»);RegExpExtract(B2;»d+»)&»-Н»), где:
- a. B2 – исходный текст, содержащий полный адрес;
- b. RegExpExtract(B2;»d+») – формула, выделяющая номер дома из строки с полным адресом;
- c. RegExpExtract(B2;»d+»)&»-Н» – новый номер, содержащий исходное значение и символы «-Н».
Данный способ может показаться громоздким, однако он весьма удобен для работы с таблицами, содержащими большое количество данных.
Особенности использования функции ПОДСТАВИТЬ в Excel
Функция ПОДСТАВИТЬ имеет следующую синтаксическую запись:
- текст – обязательный аргумент, характеризующий текстовую строку, в которой необходимо выполнить замену части текста. Может быть задан как текстовая строка («некоторый текст») или ссылка на ячейку, которая содержит текстовые данные.
- стар_текст – часть текстовой строки, принимаемой в качестве первого аргумента данной функции, которую требуется заменить. Аргумент обязателен для заполнения.
- нов_текст – обязательный для заполнения аргумент, содержащий текстовые данные, которые будут вставлены на место заменяемой части строки.
- [номер_вхождения] – числовое значение, характеризующее номер вхождения старого текста, который требуется заменить на фрагмент нового текста. Возможные варианты записи:
- Аргумент явно не указан. Функция ПОДСТАВИТЬ определит все части текстовой строки, соответствующие фрагменту текста стар_текст, и выполнит их замену на нов_текст;
- В качестве аргумента передано числовое значение. Функция ПОДСТАВИТЬ заменит только указанное вхождение. Отсчет начинается слева направо, число 1 соответствует первому вхождению. Например, функция =ПОДСТАВИТЬ(«текст №1, №2, №3»;«текст»;«новый»;1) вернет значение «новый_текст №1, №2, №3».
Примечания:
- Аргумент [номер_вхождения] должен быть задан из диапазон целых положительных чисел от 1 до n, где n определяется максимально допустимой длиной строки, содержащейся в объекте данных (например, в ячейке).
- Если в текстовой строке, представленной в качестве аргумента текст не содержится фрагмент, переданный в качестве аргумента стар_текст, функция ПОДСТАВИТЬ вернет строку текст без изменений.
- Если число вхождений заменяемого фрагмента в обрабатываемой строке меньше, чем числовое значение, переданное в качестве аргумент [номер_вхождения], функция ПОДСТАВИТЬ вернет текстовую строку в исходном виде. Например, аргументы функции («а 1 а 2 а 3»;«а»;«б»;4) вернут строку «а 1 а 2 а 3».
- Рассматриваемая функция чувствительная к регистру, то есть строки «Слово» и «слово» не являются тождественными.
- Для решения аналогичных задач по замене части символов текстовой строки можно использовать функцию ЗАМЕНИТЬ. Однако, в отличие от функции ПОДСТАВИТЬ, для ее использования необходимо явно указывать позицию начального символа для замены, а также количество символов, которые необходимо заменить. Функция автоматически выполняет поиск указанной части строки и производит ее замену, поэтому в большинстве случаев предлагает более удобный функционал для работы с текстовыми строками.
Быстрая замена значений по условию в Excel
Добрый день, уважаемые читатели блога! Сегодня поговорим о быстрой замене значений в таблице Excel. Зачем нам это нужно, когда есть формулы ЕСЛИ и условное форматирование? Ответ прост — для экономии времени. Но ведь можно ещё быстрее. Ниже будет пример с небольшой таблицей, где хочется сразу выделить или поместить нужное значение.
Есть две таблицы, одна оригинал, вторая для изменений. Все ученики кто получил 4 и выше имеют результат «Прошёл», у кого 3 и ниже — «Не прошёл».
Если будем использовать условное форматирование, придётся писать формулу каждый раз и если таблица очень большая и сразу хочется увидеть результат — лучше воспользоваться макросом.
Сразу оговорюсь в макросе будет прописан диапазон для замены, так что если таблица будет больше, нужно просто изменить диапазон.
- вкладка «Разработчик», блок кнопок «Код»;
- жмём «Visual Basic»;
- добавляем новый модуль Insert -> Module.
Вставляем следующий код.
Sub Result()
Dim cell As Range
‘ Проверка каждой ячейки диапазона на прохождение
For Each cell In Range(«I2:L10»).Cells
If cell.Value
cell.Value = «Не прошёл»
ElseIf cell.Value >= 4 Then
cell.Value = «Прошёл»
End If
Next
End Sub
В этом случае используется связка из команд IF и ElseIf, что позволяет нам несколько расширить понимание формулы ЕСЛИ. Напомню, что макрос будет применён только к ячейкам из диапазона I2:L10!
Запускаем выбор макросов с помощью сочетания клавиш Alt+F8 и нажимаем кнопку «Выполнить».
Получаем результат. Во второй таблице я сразу вижу кто из учеников прошёл дальше, а кто нет. Ну и кому что необходимо подтянуть:)
Таким образом решается некая ограниченность формулы ЕСЛИ, ведь условия в макросе можно продолжить и подобрать свои, всего лишь изменив значения.
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке) .
Примечание: Компонент Power Query в Excel 2016 называется Скачать и преобразовать. Информация в этой статье относится к обоим компонентам. Дополнительные сведения см. в статье Функция «Скачать и преобразовать» в Excel 2016.
Примечание: В конце этой статьи есть небольшое видео о том, как вывести редактор запросов.
В Power Query можно заменить одно значение другим в выбранных столбцах.
Задача
Замена текстовых значений
С помощью ленты редактора запросов
На ленте Редактора запросов выберите на вкладке Преобразование Замена значений.
С помощью контекстного меню Редактора запросов:
Щелкните текстовую ячейку правой кнопкой мыши и выберите команду Замена значений.
Чтобы заменить текстовые значения:
В диалоговом окне Замена значений введите значения в поля Значение для поиска и Заменить на.
Установите флажок Сравнивать содержимое ячейки целиком, чтобы заменить все содержимое ячеек. В противном случае при использовании команды Замена значений будут заменены все значения, соответствующие условию Значение для поиска.
Нажмите кнопку ОК.
Замена числовых, логических значений или значений даты и времени
С помощью ленты редактора запросов
На ленте Редактора запросов, на вкладке « преобразовать » выберите Замена значений.
С помощью контекстного меню Редактора запросов:
Щелкните ячейку с числовым значением или значением даты и времени правой кнопкой мыши и выберите команду Замена значений.
Чтобы заменить числовые, логические значения или значения даты и времени:
В диалоговом окне Замена значений введите значения в поля Значение для поиска и Заменить на.
Нажмите кнопку ОК.
Примечание: Редактор запросов отображается только при загрузке, редактировании или создании нового запроса с помощью Power Query. В видео показано окно редактора запросов, которое отображается после изменения запроса в книге Excel. Чтобы просмотреть редактор запросов, не загружая и не изменяя существующий запрос в книге, в разделе Получение внешних данных на вкладке ленты Power Query выберите Из других источников > Пустой запрос. В видео показан один из способов отображения редактора запросов.
Замена подстроки, содержащейся в текстовых значениях ячеек указанного диапазона, другой подстрокой с помощью метода Range.Replace из кода VBA Excel.
Range.Replace – это метод, который находит по шаблону подстроку в содержимом ячеек указанного диапазона, заменяет ее на другую подстроку и возвращает значение типа Boolean.
Метод имеет некоторые особенности, которые заключаются в следующем:
- при присвоении булева значения, возвращаемого методом Range.Replace, переменной, необходимо список параметров (аргументов) метода заключать в круглые скобки;
- если метод используется без присвоения возвращаемого значения переменной, параметры должны быть указаны без заключения их в круглые скобки.
Синтаксис и параметры метода
Синтаксис
Синтаксис при замене подстроки и присвоении переменной возвращаемого значения типа Boolean:
variable = expression.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])
Синтаксис при замене подстроки без присвоения переменной возвращаемого значения:
expression.Replace What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat]
- variable – переменная (тип данных — Boolean);
- expression – выражение, возвращающее объект Range.
Параметры
Параметр | Описание |
---|---|
What | Искомая подстрока или шаблон*, по которому ищется подстрока в диапазоне ячеек. Обязательный параметр. |
Replacement | Подстрока, заменяющая искомую подстроку. Обязательный параметр. |
LookAt | Указывает правило поиска по полному или частичному вхождению искомой подстроки в текст ячейки: 1 (xlWhole) – поиск полного вхождения искомого текста; 2 (xlPart) – поиск частичного вхождения искомого текста. Необязательный параметр. |
SearchOrder | Задает построчный или постолбцовый поиск: 1 (xlByRows) – построчный поиск; 2 (xlByColumns) – постолбцовый поиск. Необязательный параметр. |
MatchCase | Поиск с учетом или без учета регистра: 0 (False) – поиск без учета регистра; 1 (True) – поиск с учетом регистра. Необязательный параметр. |
MatchByte | Способы сравнения двухбайтовых символов: 0 (False) – двухбайтовые символы сопоставляются с однобайтовыми эквивалентами; 1 (True) – двухбайтовые символы сопоставляются только с двухбайтовым символами. Необязательный параметр. |
SearchFormat | Формат поиска. Необязательный параметр. |
ReplaceFormat | Формат замены. Необязательный параметр. |
* Смотрите знаки подстановки для шаблонов, которые можно использовать в параметре What.
Работа метода в VBA Excel
Исходная таблица для всех примеров:
Пример 1
Примеры записи строк кода с методом Range.Replace и поиском по частичному совпадению подстроки с содержимым ячейки:
Sub Primer1() ‘Запись 1: Range(«A1:C6»).Replace «Лиса», «Рысь», 2 ‘Запись 2: Range(«A1:C6»).Replace What:=«Лиса», Replacement:=«Рысь», LookAt:=2 ‘Запись 3: If Range(«A1:C6»).Replace(«Лиса», «Рысь», 2) Then End If ‘Запись 4: Dim a a = Range(«A1:C6»).Replace(«Лиса», «Рысь», 2) End Sub |
Результат выполнения любого из вариантов кода примера 1:
Пример 2
Поиск по шаблону с использованием знаков подстановки и по полному совпадению подстроки с содержимым ячейки:
Sub Primer2() Range(«A1:C6»).Replace «Ли??», «Рысь», 1 End Sub |
Обратите внимание, что слово «Лиса» заменено словом «Рысь» не во всех ячейках. Это произошло из-за того, что мы использовали параметр LookAt:=1 – поиск полного вхождения искомого текста в содержимое ячейки.
В ст В так сказать основной признак для сортировки данных за месяц в других столбцах
Предполагается что он будет таким на протяжении всего месяца
Но вдруг какое-то событие — и на определенной неделе признак меняется и становится как в ст D
Прошел месяц
Начался новый
Старый файл сохраняется в архив как есть
На новым период копированием создается новый
И тут надо вернуть значения ст D в соответствие со ст В Т.е. снова предположить что признак от недели к неделе не будет меняться
Добавлено через 1 минуту
Столбцы сопоставлять по строкам
B1 — D1
Добавлено через 4 минуты
Причем предполагается что периодов в месяце 5
Основное значение задается перед первым периодом и в каждом периоде может меняться
Т е приводить в соответствие нужно 4 стобца
Добавлено через 8 минут
Т.е. хотелось бы выбирать столбцы в которых производить замену
Да еще и для каждого листа книги разные столбцы могут быть
(по высоте в том числе)
Добавлено через 12 минут
И еще!!! Изначально во всех «неглавных» столбцах первоначально стоит формула простой прямой ссылки на главный
И с идеале эту же формулу ссылки вернуть нужно после выполнения макроса