Макрос для excel замена ячеек

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

Содержание

  1. Процедура перемещения ячеек
    • Метод 1: копирование
    • Метод 2: перетаскивание
    • Метод 3: использование макросов
  2. Заключение

Процедура перемещения ячеек

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

Метод 1: копирование

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

  1. Встаем в первую ячейку (выделяем ее), которую планируем переместить. Находясь в главной вкладке программы нажимаем на кнопку “Копировать” (группа инструментов “Буфер обмена”). Также можно просто нажать комбинацию клавиш Ctrl+C.Копирование ячейки в Эксель
  2. Переходим в любую свободную ячейку на листе и нажимаем кнопку “Вставить” в той же вкладке и группе инструментов. Или можно снова воспользоваться горячими клавишами – Ctrl+V.Вставка скопированных данных в Эксель
  3. Теперь выделяем вторую ячейку, с которой хотим поменять местами первую, и также копируем ее.Копирование ячейки в Excel
  4. Встаем в первую ячейку и жмем кнопку “Вставить” (или Ctrl+V).Вставка скопированных данных в Excel
  5. Теперь выделяем ячейку, в которую было скопировано значение из первой ячейки и копируем ее.Копирование данных в Эксель
  6. Переходим во вторую ячейку, куда нужно вставить данные, и нажимаем соответствующую кнопку на ленте.Вставка скопированной ячейки в Эксель
  7. Выбранные элементы успешно поменяны местами. Ячейка, в которой временно размещались скопированные данные, больше не нужна. Щелкаем по ней правой кнопкой мыши и в открывшемся меню выбираем команду “Удалить”.Удаление ячейки в Эксель
  8. В зависимости от того, есть ли рядом с данной ячейкой заполненные элементы справа/снизу или нет, выбираем соответствующий вариант удаления и жмем кнопку OK.Выбор варианта удаления ячейки в Excel
  9. Вот и все, что нужно было сделать для того, чтобы поменять ячейки местами.Результата перемещения ячеек относительно друг друга в Эксель

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

Метод 2: перетаскивание

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

  1. Выбираем ячейку, которую планируем переместить в новое место. Наводим курсор мыши на ее границу, и как только он изменит вид на привычный указатель (с 4 стрелками в разные стороны на конце), нажав и не отпуская клавишу Shift, выполняем перенос ячейки в новое место с помощью зажатой левой кнопки мыши.Перемещение ячейки в Эксель
  2. Чаще всего, этот метод используется для того, чтобы поменять местами соседние ячейки, так как сдвиг элементов в данном случае не нарушит структуру таблицы.Смежные ячейки в Эксель
  3. Если мы решим переместить ячейку через несколько других, это повлечет за собой изменение расположения всех остальных элементов.Перемещение ячейки в Excel
  4. После этого придется восстанавливать порядок.Диапазон ячеек в Эксель

Метод 3: использование макросов

Мы упоминали в начале статьи, что в Excel, увы, нет специального инструмента, позволяющего оперативно “перекинуть” местами ячейки (за исключением метода выше, который эффективен только для смежных элементов). Однако сделать это можно с помощью макросов:

  1. Для начала нужно убедиться в том, что в приложении активирован так называемый “режим разработчика” (по умолчанию выключен). Для этого:
  2. Переключаемся во вкладку “Разработчик”, где жмем по значку “Visual Basic” (группа инструментов “Код”).Переход в редактор Visual Basic в Эксель
  3. В редакторе, нажав на кнопку “View Code”, вставляем в появившемся окне код ниже:
    Sub ПеремещениеЯчеек()
    Dim ra As Range: Set ra = Selection
    msg1 = "Произведите выделение ДВУХ диапазонов идентичного размера"
    msg2 = "Произведите выделение двух диапазонов ИДЕНТИЧНОГО размера"
    If ra.Areas.Count <> 2 Then MsgBox msg1, vbCritical, "Проблема": Exit Sub
    If ra.Areas(1).Count <> ra.Areas(2).Count Then MsgBox msg2, vbCritical, "Проблема": Exit Sub
    Application.ScreenUpdating = False
    arr2 = ra.Areas(2).Value
    ra.Areas(2).Value = ra.Areas(1).Value
    ra.Areas(1).Value = arr2
    End Sub
    Код для макроса замены ячеек местами в Эксель
  4. Закрываем окно редактора, щелкнув привычную кнопку в виде крестика в верхнем правом углу.
  5. Зажав клавишу Ctrl на клавиатуре выделяем две ячейки или две области с одинаковым количество элементов, которые планируем поменять местами. Затем нажимаем кнопку “Макросы” (вкладка “Разработчик”, группа “Код”).Активация макроса в Эксель для выбранных ячеек
  6. Появится окно, в котором мы видим ранее созданный макрос. Выбираем его и щелкаем “Выполнить”.Выбор макроса в Excel
  7. В результате работы макрос поменяет местами содержимое выделенных ячеек.Результат замены местами ячеек в Эксель с помощью макроса

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

Сохранение документа Excel с поддержкой макросов

Заключение

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

Содержание

  • Перемещение ячеек
    • Способ 1: перемещение с помощью копирования
    • Способ 2: перетаскивание
    • Способ 3: применение макросов
  • Вопросы и ответы

Перемещение ячеек относительно друг друга в Microsoft Excel

Потребность поменять ячейки местами друг с другом при работе в таблице Microsoft Excel случается довольно редко. Тем не менее, такие ситуации бывают и их нужно решать. Давайте выясним, какими способами можно поменять ячейки местами в Экселе.

Перемещение ячеек

К сожалению, в стандартном наборе инструментов нет такой функции, которая бы без дополнительных действий или без сдвига диапазона, могла бы менять местами две ячейки. Но, в то же время, хотя данная процедура перемещения и не так проста, как хотелось бы, её все-таки можно устроить, причем несколькими способами.

Способ 1: перемещение с помощью копирования

Первый вариант решения проблемы предусматривает банальное копирование данных в отдельную область с последующей заменой. Давайте разберемся, как это делается.

  1. Выделяем ячейку, которую следует переместить. Жмем на кнопку «Копировать». Она размещена на ленте во вкладке «Главная» в группе настроек «Буфер обмена».
  2. Копирование ячейки в Microsoft Excel

  3. Выделяем любой другой пустой элемент на листе. Жмем на кнопку «Вставить». Она находится в том же блоке инструментов на ленте, что и кнопка «Копировать», но в отличие от неё имеет гораздо более заметный вид из-за своих размеров.
  4. Вставка данных в Microsoft Excel

  5. Далее переходим ко второй ячейке, данные которой нужно переместить на место первой. Выделяем её и опять жмем на кнопку «Копировать».
  6. Копирование второй ячейки в Microsoft Excel

  7. Выделяем курсором первую ячейку с данными и жмем на кнопку «Вставить» на ленте.
  8. Вставка второго значения в Microsoft Excel

  9. Одно значение мы переместили, куда нам нужно. Теперь возвращаемся к тому значению, которое мы вставили в пустую ячейку. Выделяем его и жмем на кнопку «Копировать».
  10. Копирование ячейки из буферной области в Microsoft Excel

  11. Выделяем вторую ячейку, в которую нужно переместить данные. Жмем на кнопку «Вставить» на ленте.
  12. Вставка данных в Microsoft Excel

  13. Итак, нужные данные мы поменяли местами. Теперь следует удалить содержимое транзитной ячейки. Выделяем её и щелкаем правой кнопкой мыши. В контекстном меню, которое активировалось после этих действий, переходим по пункту «Очистить содержимое».

Очистка содержимого в Microsoft Excel

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

Ячейки перемещены в Microsoft Excel

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

Способ 2: перетаскивание

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

Lumpics.ru

Выделяем ячейку, которую нужно переместить в другое место. Устанавливаем курсор на её границу. При этом он должен преобразоваться в стрелку, на конце которой находятся указатели, направленные в четыре стороны. Зажимаем клавишу Shift на клавиатуре и перетаскиваем на то место куда хотим.

Перемещение ячейки в Microsoft Excel

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

Ячейки перемещены в программе Microsoft Excel

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

Ячейки перемещены со сдвигом диапазона в Microsoft Excel

Способ 3: применение макросов

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

  1. Прежде всего, нужно включить у себя в программе режим работы с макросами и панель разработчика, если вы их до сих пор не активировали, так как по умолчанию они отключены.
  2. Далее переходим во вкладку «Разработчик». Выполняем щелчок по кнопке «Visual Basic», которая размещена на ленте в блоке инструментов «Код».
  3. Переход в редактор макросов в Microsoft Excel

  4. Выполняется запуск редактора. В него нужно вставить следующий код:

    Sub ПеремещениеЯчеек()
    Dim ra As Range: Set ra = Selection
    msg1 = "Произведите выделение ДВУХ диапазонов идентичного размера"
    msg2 = "Произведите выделение двух диапазонов ИДЕНТИЧНОГО размера"
    If ra.Areas.Count 2 Then MsgBox msg1, vbCritical, "Проблема": Exit Sub
    If ra.Areas(1).Count ra.Areas(2).Count Then MsgBox msg2, vbCritical, "Проблема": Exit Sub
    Application.ScreenUpdating = False
    arr2 = ra.Areas(2).Value
    ra.Areas(2).Value = ra.Areas(1).Value
    ra.Areas(1).Value = arr2
    End Sub

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

  5. Вставка кода в Microsoft Excel

  6. Выделяем две ячейки или два диапазона равных размеров, которые хотим поменять местами. Для этого кликаем по первому элементу (диапазону) левой кнопкой мыши. Затем зажимаем кнопку Ctrl на клавиатуре и также кликаем левой кнопкой мышки по второй ячейке (диапазону).
  7. Выделение ячеек в Microsoft Excel

  8. Чтобы запустить макрос, жмем на кнопку «Макросы», размещенную на ленте во вкладке «Разработчик» в группе инструментов «Код».
  9. Переход к запуску макроса в Microsoft Excel

  10. Открывается окно выбора макроса. Отмечаем нужный элемент и жмем на кнопку «Выполнить».
  11. Запуск макроса в Microsoft Excel

  12. После этого действия макрос автоматически меняет содержимое выделенных ячеек местами.

Макрос поменял ячейки местами в Microsoft Excel

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

Урок: Как создать макрос в Excel

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

Еще статьи по данной теме:

Помогла ли Вам статья?

excelWhile  working with MS Excel , sometimes you may need to delete values in strings or change them. You can automate that by using the powerful Replace() which is available in Excel VBA (Visual Basic for Applications). Today, we walk you through the series of steps to understand and master the Replace() function. The prerequisites for this intermediate course are the basic knowledge of Excel (here’s a course that can give you an introduction to Excel 2o13), strings and preliminary understanding of Excel VBA. If not, we recommend that you go through this beginner’s course on Excel VBA and macros. For a quick refresher, you can do a quick read through of our VBA tutorial.

 Excel VBA Replace() is a simple yet very useful string function. As the name suggests, Replace() is used to replace a set of characters in a string with a new set of characters. The basic syntax of a VBA Replace function looks like this:

Replace(Source_string, Old_string, Replacement_string, [start, [count, [compare]]] )

Let’s go through each parameter to understand them better.

  • Source_string: This is the complete source string, of which you want some characters to be replaced.
  • Old_string: It’s the string which is to be replaced, ie the subset of source_string that you want to replace
  • Replacement_string: Is the string or a set of characters with which you want “Old_string” is to be replaced.
  • Start: Stands for the numerical position in the “Source_string” from which the search should start. This is an optional parameter. If this parameter is omitted, then by default the search begins at position 1.
  • Count: This parameter stands for the frequency of occurrences of Old_string to be replaced. Like “start”, it’s an optional parameter. If this argument is omitted, then each occurrence of “Old_string” in the “Source_string” will be replaced.
  • Compare: This is also an optional parameter. It represents the type of comparison algorithm to be used while the Replace Function searches for the occurrences of “Old_string” in the “Source_string.” Here are your options:
    1. vbBinaryCompare is the parameter value for binary comparison.
    2. vbTextCompare is the argument for textual comparison.
    3. Finally, the parameter value vbDatabaseCompare does a comparison based on information in your database.

Now that we’re familiar with the syntax of Replace function, lets move on to a few simple practical examples.

Examples

Replace (“Thank You", "You", "Everybody")

This example will return, “Thank Everybody”.

Replace ("Software Program", "Unique","code")

Guess what this will return? The code will return “Software Program.” The reason is we have asked the Replace function to replace “Unique.” However, you can see that “Unique” text string is not present inside the source string. So, Replace will leave the source string unchanged.

Replace ("Animal", "a", "f",2)

This code will return, “Animfl.” The reason is in the Replace function code, the search for character “a” starts from the second position. Wherever, “a” is found, it is replaced with “f”.

Replace ("Animal", "a", "f",1,1)

Here the Replace() will return “fnimal”.  The reason being we have instructed the VBA Replace statement to replace only one occurrence of “a” with “f”.

We suggest you work out these examples and learn a bit more about VBA macros (you can use this VBA course) before moving on to more complex programs using Replace function. Here on, we will use the Visual Basic Editor to write the code. We assume that you know how to save, compile and run programs on this editor. You can always look up our course on Excel VBA and Macros here.

How  to Remove Space from a String

Sub removeSpace()
Dim stringSpace As String
stringSpace = " this string contains spaces "
stringSpace = Replace(stringSpace, " ", "")
End Sub

Here we have declared stringSpace to be a variable of type string. It is initialized to a string which contains spaces. Replace() has the ‘stringSpace’ to the be source string. Every occurrence of space in the source string is removed using VBA Replace statement. Finally, stringSpace contains “thisstringcontainsspaces” which is the end result.

How to Replace a String within Inverted Comma

Sub replaceQuotedString()
Dim y, longString, resultString1 As String
y = Chr(34) & "abc" & Chr(34)
longString = "Let's replace this string: " &y
resultString1 = Replace(longString, y, "abc")
End Sub

Here we declare y, longString, resultString1 as variables of data type string. Chr() converts the numerical values to string data type. In other words, it introduces the quotation marks to the numerical values. And(&) operator concatenates strings. Value of “y” is “34abc34.” The  “longString” value is “Let’s replace this string: 34abc34″. In the Replace() value of source string is  the “longString.” That is “34abc34” is replaced by “abc”.  The resultstring1 now stores the value “Let’s replace this string: abc”

How to Remove Square Brackets from a String using Excel VBA

Sub removeSquareBrackets1()
Dim trialStr As String
trialStr = "[brackets have to be removed]"
trialStr = Replace(trialStr, "[", "")
trialStr = Replace(trialStr, "]", "")
MsgBox (trialStr)
End Sub

In this program, we’ve declared trialStr as a variable of type string.  It’s assigned the value”[brackets have to be removed].” The first occurrence of the replace function removes the left square bracket from trialStr. The variable now contains “brackets have to be removed].” In the second occurrence of the Replace function, the right square bracket is removed. Finally the value of trialStr is “brackets have to be removed.” Note that there are no square brackets in trialStr now. And the MsgBox() displays  the result.

How to Edit a Url Using Replace()

Enter this formula into any cell in your current Excel sheet.

=HYPERLINK("http://www.microsoft.com", "Microsoft Headquarters")

This creates a hyperlinked URL in the active cell of your worksheet. In the VBA editor, write the following code

Sub editURL1()
Dim URL1, NewURL
URL1 = ActiveCell.Formula
NewURL = Replace(URL1, "Microsoft Headquarters", "World Office")
ActiveCell.Formula = NewURL
End Sub

In this program, we’ve declared URL1 and NewURL as variables. URL1 is initialized to the value in the selected cell. Replace () searches for occurrence of “Microsoft Headquarters” in the URL and replaces it with “World Office.”  The selected cell is assigned the value of NewURL.

Programming using Excel VBA is interesting and gives you exposure to powerful functionality and features. Mastering it is important to efficiently and effectively use Excel.  Once you’ve tried these examples for yourself, do share your learning and experience with us. Once you’re ready to take the next step, hop over to this Ultimate VBA course, to check out some advanced VBA concepts.

 

semkaru

Пользователь

Сообщений: 20
Регистрация: 10.09.2016

уважаемые знатоки, здравствуйте. подскажите, пожалуйста, с написанием макроса по замене данных, а именно:

есть данные, например в колонке A. необходимо произвести замену по условиям, например, где в ячейке имеется в ЛЮБОМ месте слово book, например, заменить ПОЛНОСТЬЮ данную ячейку на значение table. например в ячейке есть слово 7823632BOOK43545 и заменить просто на table. спасибо.

 

Catboyun

Пользователь

Сообщений: 1631
Регистрация: 09.05.2015

вариант без макросов:

Прикрепленные файлы

  • Снимок.GIF (18.51 КБ)

 

semkaru

Пользователь

Сообщений: 20
Регистрация: 10.09.2016

спасибо за ответ, но это я знаю :) у меня около 5000 строк с разными условиями, и замена нужна где-то 3 раза в день, т.е. хочется тяпнуть по кнопоче макроса и все, а не в ручную :)

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#4

10.09.2016 21:25:52

Цитата
semkaru написал:
у меня около 5000 строк с разными условиями

А как макрос узнает про эти «разные»  условия?

 

semkaru

Пользователь

Сообщений: 20
Регистрация: 10.09.2016

ну или не макрос. типа if A1:A5000 *book* then table, if B1:B5000 *qwert* then kuku

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

 

Catboyun

Пользователь

Сообщений: 1631
Регистрация: 09.05.2015

#6

10.09.2016 21:36:14

сооб.№2 записать рекордером

Код
    Cells.Replace What:="*book*", Replacement:="tabel", LookAt:=xlPart

и так 5 строк вставить, поменять значения What и Replacement

 

semkaru

Пользователь

Сообщений: 20
Регистрация: 10.09.2016

#7

10.09.2016 21:46:10

Цитата
Catboyun написал:
сооб.№2 записать рекордеромКод ? 1    Cells.Replace What:=»*book*», Replacement:=»tabel», LookAt:=xlPartи так 5 строк вставить, поменять значения What и Replacement

ошибка :(

Прикрепленные файлы

  • img-2016-09-10-21-45-06.png (6.02 КБ)

 

Catboyun

Пользователь

Сообщений: 1631
Регистрация: 09.05.2015

у меня все нориально

Прикрепленные файлы

  • Книга1.xlsm (15.84 КБ)

 

semkaru

Пользователь

Сообщений: 20
Регистрация: 10.09.2016

спасибо. работает. и ваш пример, и я допилил. но есть еще вопрос, при исполнении макроса при нажатии ALT-F8 можно указать где исполнить макрос, т.е. открыты два файла, kkk и еще дугой. из kkk жму ALT-F8 выбираю «Находится в» «Все открытые книги, но меняется только в kkk :(«

 

Catboyun

Пользователь

Сообщений: 1631
Регистрация: 09.05.2015

Так Вам надо макрос записать в Личную книгу макросов

Прикрепленные файлы

  • Снимок.GIF (28.04 КБ)

 

semkaru

Пользователь

Сообщений: 20
Регистрация: 10.09.2016

огромное спасибо, а можете еще подсказать формулу для макроса, типа после столбца B вставляем автоматически по макросу ПУСТОЙ столбец, и типа добавляем что-то наподобие в столбец C:  =B+123, но чтоб в C были заполнены строки только то, где есть значения в B, т.е. если в И значения до 2300 строки, то и в C чтрб значение подставлялось до 2300 строки

спасибо :)

 

Catboyun

Пользователь

Сообщений: 1631
Регистрация: 09.05.2015

#12

11.09.2016 07:52:15

semkaru

, это Вам нужно новую тему создавать
и желательно сразу с файлом-примером.

Быстрая замена значений по условию в Excel

Добрый день, уважаемые читатели блога! Сегодня поговорим о быстрой замене значений в таблице 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

Быстрая замена значений по условию в Excel

В этом случае используется связка из команд IF и ElseIf, что позволяет нам несколько расширить понимание формулы ЕСЛИ. Напомню, что макрос будет применён только к ячейкам из диапазона I2:L10!

Запускаем выбор макросов с помощью сочетания клавиш Alt+F8 и нажимаем кнопку «Выполнить».

Быстрая замена значений по условию в Excel

Получаем результат. Во второй таблице я сразу вижу кто из учеников прошёл дальше, а кто нет. Ну и кому что необходимо подтянуть:)

Быстрая замена значений по условию в Excel

Таким образом решается некая ограниченность формулы ЕСЛИ, ведь условия в макросе можно продолжить и подобрать свои, всего лишь изменив значения.

Поменять местами данные

Serge_007

Дата: Пятница, 21.01.2011, 13:43 |
Сообщение № 1

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

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

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

В Excel нет встроенных средств обоюдного переноса данных (например поменять местами значения А1 и В1 одним кликом). Как это реализовать макросом?

Как это должно работать (один из вариантов): Выделяю с нажатым Ctrl два диапазона — ПКМ — Поменять местами. Теперь содержимое ячейки А1 находится в В1 и наоборот.
Спасибо.


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Hugo

Дата: Пятница, 21.01.2011, 14:01 |
Сообщение № 2

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

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

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


2010, теперь уже с PQ

Из закромов smile :

==============================================================
Стоит задача с помощью макроса в Excel поменять местами выделенные ячейки (ну или выделенные строки/столбцы), при этом ячейки(или строки/столбцы) не являются смежными, а — произвольно выбранными пользователем.
EducatedFool
VBA Developer
———————————————————————————

Вот вам макрос:

[vba]

Код

Sub SwapRanges()
Dim ra As Range: Set ra = Selection
msg1 = «Надо выделить ДВА диапазона ячеек одинакового размера»
msg2 = «Надо выделить 2 диапазона ячеек ОДИНАКОВОГО размера»
If ra.Areas.Count <> 2 Then MsgBox msg1, vbCritical, «Ошибка»: Exit Sub
If ra.Areas(1).Count <> ra.Areas(2).Count Then MsgBox msg2, vbCritical, «Ошибка»: Exit Sub
Application.ScreenUpdating = False
arr2 = ra.Areas(2).Value
ra.Areas(2).Value = ra.Areas(1).Value
ra.Areas(1).Value = arr2
End Sub

[/vba]

А вот пример файла с макросом: http://excelvba.ru/XL_Files/Sample__11-08-2010__16-45-29.zip
(запуск макроса нажатием Ctrl + Shift + S)
==============================================================

Добавлю от себя — переносятся только значения, формулы затираются, форматирование остаётся старым.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Serge_007

Дата: Пятница, 21.01.2011, 14:10 |
Сообщение № 3

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

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

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Игорь, спасибо, это то что нужно.
Только всё-таки просьба повестить код на ПКМ, а не на сочетание клавиш. Плюс работать это должно в любой книге…


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Hugo

Дата: Пятница, 21.01.2011, 14:25 |
Сообщение № 4

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

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

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


2010, теперь уже с PQ

Цитата (Serge_007)

Плюс работать это должно в любой книге

Это можно, но сложнее.
Тогда весь код нужно поместить в модуль в Personal.xls или в другую книгу из автозагружаемых, плюс сделать исполнение при загрузке кода типа этого:
[vba]

Код

Sub Inic()
With Application.CommandBars(«Cell»).Controls.Add(Type:=msoControlButton, before:=1)
            .Caption = «SwapRanges»
            .OnAction = «SwapRanges»
            .FaceId = 203
End With
End Sub

[/vba]

Т.е. при загрузке и выгрузки такие коды (обеспечение менюшки):
[vba]

Код

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
           Application.CommandBars(«Cell»).Controls.Item(«SwapRanges»).Delete
End Sub

Private Sub Workbook_Open()
On Error Resume Next
           Application.CommandBars(«Cell»).Controls.Item(«SwapRanges»).Delete
           On Error GoTo 0
Inic
End Sub

[/vba]

Можно вероятно эти коды совместить, но у меня так работает, правда задачу другую в итоге выполняет.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Alex_ST

Дата: Пятница, 21.01.2011, 21:50 |
Сообщение № 5

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

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

Я на Планете уже выкладывал такое решение:
[vba]

Код

Sub Selection_eXchange()
‘—————————————————————————————
‘ Procedure    : Selection_eXchange
‘ Author       : Alex_ST
‘ Topic_HEADER : Поменять указанные столбцы местами с помощью макроса
‘ Topic_URL    : http://www.planetaexcel.ru/forum.php?thread_id=15210
‘ Post_Author  : Alex_ST
‘ Post_URL     : http://www.planetaexcel.ru/forum.php?thread_id=15210
‘ DateTime     : 13.04.10, 16:33
‘ Purpose      : обменять ТЕКСТ двух выделенных диапазонов или областей
‘ Notes        :
‘—————————————————————————————
      If Not TypeName(Selection) = «Range» Then Exit Sub
      Dim tmpVar1, tmpVar2
      Dim tmpRng1 As Range, tmpRng2 As Range
      With Selection
          ‘With Intersect(Selection, Selection.Parent.UsedRange)
          Select Case .Areas.Count
          Case 1   ‘ выделена 1 область
              If .Count = 2 Then   ‘ выделено 2 ячейки
                  Set tmpRng1 = .Cells(1): Set tmpRng2 = .Cells(2)
              ElseIf .Rows.Count = 2 And .Columns.Count > 2 Then  ‘ выделен горизонтальный диапазон в 2 строки
                  Set tmpRng1 = Range(Cells(.Row, .Column), Cells(.Row, .Column + .Columns.Count — 1))   ‘ 1-я строка диапазона
                  Set tmpRng2 = tmpRng1.Offset(1, 0)   ‘ 2-я строка ниже на 1
              ElseIf .Columns.Count = 2 And .Rows.Count > 2 Then    ‘ выделен вертикальный диапазон в 2 столбца
                  Set tmpRng1 = Range(Cells(.Row, .Column), Cells(.Row + .Rows.Count — 1, .Column))  ‘ 1-й столбец
                  Set tmpRng2 = tmpRng1.Offset(0, 1)   ‘ 2-й столбец правее на 1
              Else: Exit Sub
              End If
          Case 2   ‘ выделено 2 области
              If .Areas(1).Columns.Count = .Areas(2).Columns.Count And _
                 .Areas(1).Rows.Count = .Areas(2).Rows.Count Then   ‘ одинаковая размерность областей
                  Set tmpRng1 = .Areas(1): Set tmpRng2 = .Areas(2)
              End If
          Case Else: Exit Sub
          End Select
      End With
      Application.ScreenUpdating = False: Application.EnableEvents = False
      tmpVar1 = tmpRng1: tmpVar2 = tmpRng2
      tmpRng1.Value = tmpVar2: tmpRng2.Value = tmpVar1
      Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub

[/vba]



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Serge_007

Дата: Пятница, 21.01.2011, 22:21 |
Сообщение № 6

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

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

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Quote (Alex_ST)

а Планете уже выкладывал такое решение

Не видел, спасибо.


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

slavaleks

Дата: Среда, 20.03.2013, 19:40 |
Сообщение № 7

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

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

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


2010

Цитата (Hugo)

Из закромов smile :

==============================================================
Стоит задача с помощью макроса в Exel поменять местами выделенные ячейки (ну или выделенные строки/столбцы), при этом ячейки(или строки/столбцы) не являются смежными, а — произвольно выбранными пользователем.
EducatedFool
VBA Developer
———————————————————————————

Вот вам макрос:

Код:

Sub SwapRanges()
Dim ra As Range: Set ra = Selection
msg1 = «Надо выделить ДВА диапазона ячеек одинакового размера»
msg2 = «Надо выделить 2 диапазона ячеек ОДИНАКОВОГО размера»
If ra.Areas.Count <> 2 Then MsgBox msg1, vbCritical, «Ошибка»: Exit Sub
If ra.Areas(1).Count <> ra.Areas(2).Count Then MsgBox msg2, vbCritical, «Ошибка»: Exit Sub
Application.ScreenUpdating = False
arr2 = ra.Areas(2).Value
ra.Areas(2).Value = ra.Areas(1).Value
ra.Areas(1).Value = arr2
End Sub

А вот пример файла с макросом: http://excelvba.ru/XL_Files/Sample__11-08-2010__16-45-29.zip
(запуск макроса нажатием Ctrl + Shift + S)
==============================================================

Добавлю от себя — переносятся только значения, формулы затираются, форматирование остаётся старым.

Hugo,
======================================================================

Спасибо за очень нужный макрос — это то что я искал!
Одна ,блин, незадачка — при смене раскладки клавиатуры постоянно выскакивает окно:

«Microsoft Visual Basic
Run-time error ‘1004’:
Method ‘OnKey’ of object ‘.Application’ failed»

Подскажите, пожалуйста, как от него избавится?

 

Ответить

KuklP

Дата: Среда, 20.03.2013, 20:29 |
Сообщение № 8

Группа: Проверенные

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

Сообщений: 2369


Репутация:

486

±

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


2003-2010

А в каком коде из этой темы Вы видели Method ‘OnKey’?


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Alex_ST

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

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

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

slavaleks, в этом посте съехал текст кода.
Вы подправили у себя? Если нет, подождите пока Игорь не исправит. Я ему в личку просьбу об этом кинул.

Отображение кода Hugo починил.



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STЧетверг, 21.03.2013, 08:42

 

Ответить

Alex_ST

Дата: Среда, 20.03.2013, 23:24 |
Сообщение № 10

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

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

Ну, пока делать было нечего я сам поправил и чуть сократил то, что исказилось в посте Hugo.
В модуле ЭтаКнига должно быть прописано так[vba]

Код

Private Sub Workbook_BeforeClose(Cancel As Boolean)
       On Error Resume Next
       Application.CommandBars(«Cell»).Controls.Item(«SwapRanges»).Delete
End Sub

Private Sub Workbook_Open()
       On Error Resume Next
       With Application.CommandBars(«Cell»).Controls
           .Item(«SwapRanges»).Delete
           With .Add(Type:=msoControlButton, before:=1)
               .Caption = «SwapRanges»
               .OnAction = «SwapRanges»
               .FaceId = 203
           End With
       End With
       On Error GoTo 0
End Sub

[/vba]



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STЧетверг, 21.03.2013, 08:59

 

Ответить

Wasilich

Дата: Четверг, 21.03.2013, 11:49 |
Сообщение № 11

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

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

Сообщений: 1232


Репутация:

326

±

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


2003

У меня тож примерчик завалялся. Мож пригодится.

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

__..xls
(28.0 Kb)

 

Ответить

slavaleks

Дата: Четверг, 21.03.2013, 13:33 |
Сообщение № 12

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

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

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


2010

Alex_ST, Всё работает супер, за что, премного благодарен!
Вот ещё дилетантский вопрос остался. Это нормально, что при выполнении любого макроса у меня не работает «Шаг назад» Ctrl+Z?

 

Ответить

Serge_007

Дата: Четверг, 21.03.2013, 13:38 |
Сообщение № 13

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

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

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

mixanic

Дата: Понедельник, 18.07.2016, 15:25 |
Сообщение № 14

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

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

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


Excel 2010

Добавлю от себя — переносятся только значения, формулы затираются, форматирование остаётся старым.

Подскажите, как сделать чтобы формулы тоже переносились !?

 

Ответить

Замена подстроки, содержащейся в текстовых значениях ячеек указанного диапазона, другой подстрокой с помощью метода 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 минут
И еще!!! Изначально во всех «неглавных» столбцах первоначально стоит формула простой прямой ссылки на главный
И с идеале эту же формулу ссылки вернуть нужно после выполнения макроса

Понравилась статья? Поделить с друзьями:
  • Макрос в excel только для моего файла
  • Макрос для excel замена точек на запятые
  • Макрос для excel для копирования данных с листа
  • Макрос в excel таблица в ячейках
  • Макрос для excel добавить кнопку