Vba excel скопировать строку и вставить ниже
Range.Cut – это метод, который вырезает объект Range (диапазон ячеек) в буфер обмена или перемещает его в указанное место на рабочем листе.
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена. |
Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.
Метод Range.Copy
Range.Copy – это метод, который копирует объект Range (диапазон ячеек) в буфер обмена или в указанное место на рабочем листе.
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена. |
Метод Worksheet.Paste
Синтаксис
Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект. |
Link | Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию). |
В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.
Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).
Примеры
Вырезание и вставка диапазона одной строкой (перемещение):
Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Копирование и вставка диапазона одной строкой:
Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:
18 комментариев для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
Странно, что не рассмотрено копирование ячеек, которые Cells.
Например, следующая строка копирует ячейку A1 в B2
а эта делает тоже самое, но демонстрирует,
как можно добавить размер и смещение:
Cells ( 1 , "A" ) . Resize ( 1 , 1 ) . Offset ( 0 , 0 ) . Copy Cells ( 2 , "B" ) . Resize ( 1 , 1 ) . Offset ( 0 , 0 )
Здравствуйте!
Скажите, как можно копировать на Лист 1, а вставить на Лист 2 диапазон ячеек целиком, либо отсортированный по 1 признаку диапазон(например по какому-то определенному значению, скажем, числу «500» в одном столбце Листа 1)?
Привет, Максим!
Вот пример сортировки таблицы по значению 500 в первом столбце на "Лист6" и копирования диапазона с "Лист6" на "Лист4" :
Спасибо большое, только я, наверно, неправильно описал ситуацию.
Сперва из эталонной таблицы Лист 1 копируем весь список на существующий Лист4.
Затем, пропускаем шапку, и, начиная со строки7, уже на Лист4 ищем строку, у которой в столбце 5 стоит число 500.
Вырезаем эту строку и вставляем на позицию строки 7. т.е первая после шапки.
Ищем следующую строку — вырезаем, потом вставляем на позицию строки 7+1=8 и т.д.
В итоге оставим только те строки, у которых в столбце 5 стоит число «500», остальные удаляются строки.
(пробовал менять местами строки в предыдущем коде, ошибок нет, копирует, переходит на лист 4, но строки на нем не удаляет, циклы пошагово проходят, но ничего не изменяется.)
Всем привет. Затерялся мой пост на планете, спрошу еще здесь. Если что кросс: здесь
Прошу помочь добить макрос копирования со вставкой новых строк. Файл с тем что хочу получить вложил, там есть наброски макросов, но до конца они работу не доводят (новые строки вставляются как нужно, а как перенести скопированное пока не соображу)
Поясню суть зачем это нужно: - часто приходится вставлять в готовые таблицы некие статичные данные, которые с двух сторон окружены ВПР-ами и после вставки формулы просто протягиваются. Не добавляем в конец, потому что так проще потом протянуть и не надо менять диапазоны в формулах и сводных.
Пытаюсь сделать универсальное решение - из любого места скопировал, в любое вставил. Решение делится на два этапа - одним макросом скопировал, другим вставил. Если можно обойтись без спец. копирования - будет круто.
Всем привет. Затерялся мой пост на планете, спрошу еще здесь. Если что кросс: здесь
Прошу помочь добить макрос копирования со вставкой новых строк. Файл с тем что хочу получить вложил, там есть наброски макросов, но до конца они работу не доводят (новые строки вставляются как нужно, а как перенести скопированное пока не соображу)
Поясню суть зачем это нужно: - часто приходится вставлять в готовые таблицы некие статичные данные, которые с двух сторон окружены ВПР-ами и после вставки формулы просто протягиваются. Не добавляем в конец, потому что так проще потом протянуть и не надо менять диапазоны в формулах и сводных.
Пытаюсь сделать универсальное решение - из любого места скопировал, в любое вставил. Решение делится на два этапа - одним макросом скопировал, другим вставил. Если можно обойтись без спец. копирования - будет круто. IgorStorm
Прошу помочь добить макрос копирования со вставкой новых строк. Файл с тем что хочу получить вложил, там есть наброски макросов, но до конца они работу не доводят (новые строки вставляются как нужно, а как перенести скопированное пока не соображу)
Поясню суть зачем это нужно: - часто приходится вставлять в готовые таблицы некие статичные данные, которые с двух сторон окружены ВПР-ами и после вставки формулы просто протягиваются. Не добавляем в конец, потому что так проще потом протянуть и не надо менять диапазоны в формулах и сводных.
Пытаюсь сделать универсальное решение - из любого места скопировал, в любое вставил. Решение делится на два этапа - одним макросом скопировал, другим вставил. Если можно обойтись без спец. копирования - будет круто. Автор - IgorStorm
Дата добавления - 19.02.2016 в 21:01
Range.Insert – это метод, который вставляет диапазон пустых ячеек (в том числе одну ячейку) на рабочий лист Excel в указанное место, сдвигая существующие в этом месте ячейки вправо или вниз. Если в буфере обмена содержится объект Range, то вставлен будет он со своими значениями и форматами.
Синтаксис
Expression – выражение (переменная), возвращающее объект Range.
Параметры
Параметр | Описание | Значения |
---|---|---|
Shift | Необязательный параметр. Определяет направление сдвига ячеек. Если параметр Shift опущен, направление выбирается в зависимости от формы* диапазона. | xlShiftDown (-4121) – ячейки сдвигаются вниз; xlShiftToRight (-4161) – ячейки сдвигаются вправо. |
CopyOrigin | Необязательный параметр. Определяет: из каких ячеек копировать формат. По умолчанию формат копируется из ячеек сверху или слева. | xlFormatFromLeftOrAbove (0) – формат копируется из ячеек сверху или слева; xlFormatFromRightOrBelow (1) – формат копируется из ячеек снизу или справа. |
* Если диапазон горизонтальный или квадратный (количество строк меньше или равно количеству столбцов), ячейки сдвигаются вниз. Если диапазон вертикальный (количество строк больше количества столбцов), ячейки сдвигаются вправо.
Примеры
Простая вставка диапазона
Вставка диапазона ячеек в диапазон «F5:K9» со сдвигом исходных ячеек вправо:
Если бы параметр Shift не был указан, сдвиг ячеек, по умолчанию, произошел бы вниз, так как диапазон горизонтальный.
Вставка вырезанного диапазона
Вставка диапазона, вырезанного в буфер обмена методом Range.Cut, из буфера обмена со сдвигом ячеек по умолчанию:
Обратите внимание, что при использовании метода Range.Cut, точка вставки (в примере: Range("D2") ) не может находится внутри вырезанного диапазона, а также в строке или столбце левой верхней ячейки вырезанного диапазона вне вырезанного диапазона (в примере: строка 1 и столбец «A»).
Вставка скопированного диапазона
Вставка диапазона, скопированного в буфер обмена методом Range.Copy, из буфера обмена со сдвигом ячеек по умолчанию:
Обратите внимание, что при использовании метода Range.Copy, точка вставки (в примере: Range("F2") ) не может находится внутри скопированного диапазона, но в строке или столбце левой верхней ячейки скопированного диапазона вне скопированного диапазона находится может.
Вставка и перемещение строк
Вставка одной строки на место пятой строки со сдвигом исходной строки вниз:
Добрый день! Ребят, подскажите пожалуйста, что то не соображу:
Создал форму с кнопками Скопировать, Вставить, Вырезать, Удалить.
Функции макроса должны работать с целой строкой, а не с отдельными ячейками. В строке есть формулы. Так же нужно предусмотреть copy/cut нескольких строк.
Вставка скопированной/вырезанной строки должна перезаписывать строку, которую выделили мышкой.
Проблема:
После Selection.EntireRow.Copy вставка методом Rows(ActiveCell.Row).PasteSpecial Paste:=xlPasteAll проходит как надо.
Но этот метод не работает для Selection.EntireRow.Cut.
Полагаю надо использовать Insert для вставки вырезанной строки. Или как?
Вопрос: Как вставить строку без сдвига, а с перезаписью выделенной строки??
[Excel] скопировать/вырезать диапазон ячеек и вставить
Всем привет! Не получается реализовать Cut и Copy (можно и для Range). Хочу на первом листе Excel.
Как вставить, скопировать, вырезать текст в консольном приложении?
Я знаю, что это как бы большой скачок назад после WPF и WinForms, но всё же, понадобилось. Как.
mr_eas, Я указал конкретный адрес для примера, а обычно я делаю (к вашему сожалению вы не первый, кто это делает) так. Формирую адрес ячейки в строчной переменной, например, S и вместо [A7] ставлю Range(S) или Cells(i,j)
В таком случае не получится сперва ткнуть мышкой в строку, скопировать ее макросом, потом ткнуть на другую строку и вставить макросом? У меня подвязка будет и на гор. клавиши и на кнопки формы, вызывать дополнительные окна в которых можно указать диапазон вставки строк не пойдет.
Вот такой вариант почти работает верно, только когда происходит вставка после cut, на этом месте остается пустая строка, не пойму почему =(
mr_eas, делать макросы для того чтобы всё-равно тыкать мышкой в строку, это выше моего понимания. Тогда ткнул в одну строку катну её, ткнул в другую вставил. Хозяин барин. Там должна быть опция сдвига Shift, либо после вставки предусмотрите ликвидацию исходной строки с подтяжкой вверх.
Не подскажите, в чем может быть дело - в какой то момент после вставки строк с помощью комбинаций ctrl+c/ctrl+x и ctrl+v появляется ошибка и ексель виснет намертво: "Ошибка автоматизации: вызванный объект отключен от своих клиентов"
Подскажите пожалуйста, правильно ли я вообще работаю со строками ?
При открытии, если включены макросы, срабатывает функция Auto_Open, которая назначает комбинации и снимает защиту листа.
mr_eas, а что за ерунда у вас написана, даже не могу расшифровать, чтобы вам было понятно, что этот обработчик события по клику на этой кнопке должен делать. Сама себя копировать?
mr_eas, я скопировал ваши строки из файла, они не похожи на те, что вы привели сейчас
И в чём теперь проблемы?
Вы привели код формы, я код модуля на который ссылается код формы, сделал скриншот для наглядности.
Проблемы:
1) В какой то момент после вставки строк появляется ошибка: "Ошибка автоматизации: вызванный объект отключен от своих клиентов". После чего либо виснет эксель или начинает себя странно вести - теряется выделение строк, не верно определяет активную ячейку при редактировании текста. Появляется в разное время не смог отследить зависимости от чего либо.
2) Иногда выскакивает ошибка: "метод copy из класса range завершен неверно"
Если есть возможность, пожалуйста проверьте, возникает ли проблема 1 и у вас при копировании и вставки с использованием горячих клавиш ctrl+ [x/z/v]
mr_eas, я считаю, что давать одинаковые имена кнопкам и макросам не очень правильно, особенно для человека не знающего вашей программы - разбираться долго. Включать защиту ячеек при отладке программы тоже неправильно, если обращаетесь за консультацией на форум.
Запускал вашу форму вручную, копировал, вырезал, вставлял. Было всё нормально. При вырезке, если активной ячейкой остается вырезаемая, то вылетает. Надо в макросе предусмотреть такую ситуацию, а то ведь юзеры всякие бывают.
По поводу отключки от клиента посмотрите ссылки, может там появилась какая-то ненужная ссылка. При использовании Paste можно и не писать EntireRow, достаточно выделенной ячейки. А вы сами запускать вашу программу на компьютерах своих друзей не пробовали? А то что-то много проблем на таких простых операциях.
Спасибо! Да я пробовал на разных компьютерах, в какой то момент везде выскакивает ошибка автоматизации. Тут ломаться то не чему =( Есть предположение что этот файл редактировался когда то на макбуке, а теперь какие то проблемы с совместимостью.
mr_eas, откройте новый файл (пустой), скопируйте туда отдельно все макросы. скопируйте ваши листы, лучше просто выделив блоки с информацией и убрав на всякий случай ваши плюсики со строк. Есть ещё команда DoEvents, у меня был человек, на компе, которого было что-то похожее на ваши проблемы (у него быстрый ноут), тогда как у меня всё было нормально (у меня старенький ноут). Этот оператор попробуйте поставить в макрос с Paste, до или после строки с командой (а можно и с обеих сторон для проверки)
Добавлено через 6 минут
а связи с другими файлами вы смотрели?
Burk, на листе есть еще 2 вкладки, я сперва не обратил внимание, что они ссылаются друг на друга. Проблема судя по всему из-за них, т.к. удалив их все нормально отрабатывает.
Обновил тестовый файлик, посмотрите пожалуйста. На странице main, ведется вся работа, копипастятся строки, на dop и dop2 строются какие то сводные таблицы. Формулы при вставке на странице main протягиваются нормально, и подхватываются на остальных страницах. В какой то момент на методе .insert выдает "Ошибка автоматизации. ", ексель виснет, закрывается только через диспетчер задач, последовательность ошибки не смог отловить =(
Не подскажите, как-то может с другой стороны походить к этой задаче?
Файл обновил, снял защиту листа, чтобы гор. клавиши привязались нужно выполнить ф-ию SetOnKeys.
Вырезать строку запросм из одной таблицы и вставить в другую
Ребята, подскажите, пожалуйста как можно вырезать строку запросом из одной таблицы и вставить их в.
Как скопировать строку c одного файла и вставить в другой файл эту же строку с символом в конце “_”
Подскажите, как можно через cmd скопировать строку с одного файла 1.txt и вставить в другой 2.txt.
Вырезать нужный фрагмент из строки и вставить его в новую строку
Здравствуйте. Возникла такая задача: у нас есть ссылка на презентацию, например эта.
Как в Visual Basic вырезать строку с одной команды и вставить в другую?
Как в Visual Basic вырезать строку с одной команды и вставить в другую? Потом эта строка должна.
Как все мы знаем, при вставке пустой строки на лист пустая строка всегда будет вставлена над выбранной строкой или ячейкой. Но иногда вам может потребоваться вставить строку под выбранной ячейкой или строкой. Как бы вы могли решить эту задачу в Excel?
Всегда вставляйте пустую строку ниже, а не вверху с кодом VBA
В этой статье я расскажу о вставке пустой строки под выбранной ячейкой или строкой, нажав кнопку. Пожалуйста, выполните следующие действия:
1. Удерживайте ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.
2, Затем нажмите Вставить > Модулии вставьте следующий макрос в окно модуля.
Код VBA: всегда вставляйте пустую строку внизу, а не вверху
3. Затем сохраните и закройте это окно кода. Далее, пожалуйста, нажмите Вставить > Формы > Прямоугольные, см. снимок экрана:
4. Затем нарисуйте прямоугольную кнопку с помощью курсора и отформатируйте ее так, как вам нужно. Смотрите скриншот:
5. После форматирования в соответствии с вашими потребностями щелкните его правой кнопкой мыши и выберите Назначить макрос вариант, см. снимок экрана:
6. В Назначить макрос диалоговом окне выберите имя макроса, которое вы только что вставили, из Имя макроса список, см. снимок экрана:
7, Затем нажмите OK чтобы закрыть диалоговое окно. Теперь, когда вы щелкните любую ячейку, а затем нажмите кнопку, пустая строка будет вставлена над выбранной ячейкой, как показано ниже:
Читайте также: