Скопируйте строку Vba Excel и вставьте ниже

Обновлено: 29.06.2024

Я написал простой фрагмент кода VBA, который копирует диапазон (в данном случае строку) и вставляет его ниже. Это работает безупречно для разделов формулы со ссылками на одном листе. ОДНАКО, при ссылке на другой рабочий лист в той же книге формула не будет правильно увеличивать значение, как при ручном заполнении формулы.

Пример:
Формула в ячейке A1 Sheet1: "=B1+Sheet2!B1"

Затем запустите код:

Это создает формулу в A2 "=B2+Лист2!B1", а не "=B2+Лист2!B2", как ожидалось.

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

У меня сработало нормально - я получил =B2+Лист2!B2 в формате A2, когда тестировал его, используя ваш точный код.

______________________________________________
В мире существует 10 типов людей. Те, кто понимает двоичный код, и те, кто не понимает.

Почему Хэллоуин и Рождество — это одно и то же? Потому что 31 октября = 25 декабря.

_______________________________________________

А как насчет альтернативы?

______________________________________________
В мире существует 10 типов людей. Те, кто понимает двоичный код, и те, кто не понимает.

Почему Хэллоуин и Рождество — это одно и то же? Потому что 31 октября = 25 декабря.

_______________________________________________

вы можете использовать этот макрос

А как насчет альтернативы?

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

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

В зависимости от кода, который я использую в данный момент, при первой вставке ПОКАЗЫВАЕТСЯ правильное увеличение, а при последующих вставках - нет. Я делаю это 3 раза (прибавляя 3 ряда). Я могу запускать макрос несколько раз, поэтому, к сожалению, я не могу постоянно определять диапазон для заполнения формул.

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

Если формулы перед макросом были примерно такими:
"=B1+Лист2!B1"
"=B2+Лист2!B2"
"=B3+Лист2!B3"< br />"=B4+Лист2!B4"

И затем я запускаю переменную Range как строку с B3+Sheet2!B3, после макроса я получаю что-то вроде:
"=B1+Sheet2!B1"
"=B2+Sheet2 !B2"
"=B3+Лист2!B3"
"=B4+Лист2!B3"
"=B5+Лист2!B3"
"=B6+Лист2!B4 "

Код Салима улучшает его до:
"=B2+Лист2!B2"
"=B3+Лист2!B3"
"=B4+Лист2!B4"
" =B5+Лист2!B5"
"=B6+Лист2!B3"

Я не могу просто начать вставку после ПОСЛЕДНЕЙ строки в диапазоне, чтобы избежать этого, поскольку эта строка имеет специальное форматирование, которое затем дублирует и отбрасывает то, как выглядит таблица.

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

Уровень навыков: начальный

3 способа копирования и вставки в Excel с помощью макросов VBA

Копировать и вставить: самое распространенное действие Excel

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

Есть несколько способов выполнить эту задачу, и средство записи макросов не всегда дает наиболее эффективный код VBA.

В следующих трех видео я объясняю:

  • Самый эффективный метод простого копирования и вставки в VBA.
  • Самый простой способ вставки значений.
  • Как использовать метод PasteSpecial для других типов вставки.

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

Вы можете посмотреть плейлист со всеми тремя видео в верхней части этой страницы.

Код VBA для методов копирования и вставки

Скачать книгу, содержащую код.

Вставить данные ниже последней использованной строки

Один из самых частых вопросов, которые мне задают при копировании и вставке с помощью VBA, заключается в том, как вставить в конец диапазона, который постоянно меняется? Сначала я хочу найти последнюю строку данных, а затем скопировать и вставить под ней.

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

Вставить данные ниже последней использованной строки Бесплатное обучение VBA

Бесплатное обучение макросам и VBA

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

Я также пришлю вам информацию о курсе VBA Pro, который поможет вам пройти путь от новичка до эксперта. Нажмите на ссылку ниже, чтобы получить мгновенный доступ.

Пожалуйста, оставьте комментарий ниже с любыми вопросами. Спасибо!

Вам также может понравиться

Как искать в раскрывающихся списках проверки данных в Excel

Перейти к исходной ячейке формулы XLOOKUP

3 способа заполнить пустые ячейки в Excel

Макрос VBA для создания соединений Power Query для всех таблиц Excel

Здравствуйте, у меня открыты две рабочие книги (обе могут иметь разные имена), и я хочу скопировать диапазон из Workbook1 SheetX (неизвестный/активный) в Workbook2 (где я знаю имя листа).
Я даже хочу, чтобы команда, чтобы открыть рабочий лист из каталога. Есть ли у вас какие-либо предложения о том, как это сделать? Надеюсь услышать вас снова. Большое спасибо.

Windows("incident.xlsx"). Активируйте
Range("A:U"). Выберите "это вызывает ошибку: ошибка, определяемая приложением или отложенная объектом

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

Sheets(“REPORTE DIARIO”).Копировать после:=Sheets(ActiveWorkbook.Sheets.Count)
ActiveSheet.Shapes.Range(Array(“Button 1”)).Удалить
ActiveSheet.Name = Range("P7").Value
Application.DisplayAlerts = False
Sheets("REPORTE DIARIO").Удалить
Application.DisplayAlerts = True

Рабочие листы («СВОДКА»). Диапазон («A6»). Значение = ActiveSheet.Name = Диапазон («P7»). Значение. Диапазон («P7»). Значение
Рабочие листы («СВОДКА») .Range("G6").Value = ActiveSheet.Name = Range("P7").Value.Range("B15").Value
Worksheets("SUMMARY").Range("H6").Value = ActiveSheet.Name = Range("P7").Value.Range("D15").Value
Worksheets("SUMMARY").Range("I6").Value = ActiveSheet.Name = Range("P7"). ").Значение.Диапазон("F15").Значение
Рабочие листы("СВОДКА").Диапазон("J6").Значение = Рабочие листы("ОТЧЕТ ДИАРИ").Диапазон("H15").Значение < br />Рабочие листы («РЕЗЮМЕ»). Диапазон («K6»). Значение = Рабочие листы («REPORTE DIARIO»). Диапазон («J15»). Значение
Рабочие листы («РЕЗЮМЕ»). Диапазон («L6»). "). Значение = Рабочие листы ("REPORTE DIARIO"). Диапазон ("L15"). Значение
Рабочие листы ("SUMMARY"). Диапазон ("M6"). Значение = Рабочие листы ("REPORTE DIARIO"). Диапазон ("N15"). Значение
Рабочие листы ("СВОДКА"). Диапазон ("N6"). Значение = Рабочие листы ("REPORTE DIARIO"). Диапазон ("P15"). Значение

Хорошо, у меня небольшие проблемы с созданием макроса для проекта на работе. В чем мне нужна помощь: у меня есть одна рабочая книга и пользовательская форма на первом листе для заполнения информации, и в этой пользовательской форме у меня есть кнопка, которая должна копировать диапазон ячеек на листе 2 (S6: S9) в (L6: L9) ( все это находится на листе 2, и самр должен происходить с листа 3 на лист 9. Если бы я мог получить некоторую помощь, я был бы благодарен

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

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

Например, скопировать B2, F9 и Q11, но вставить их в A1:C1
Спасибо!

Я пытаюсь написать VBA для нижеприведенного.
Если значение в столбце AA = "-", а значение в столбце AC равно $0,00, скопируйте значение в столбце X в столбец AA. Мой набор данных постоянно меняется, поэтому я не могу установить конкретные диапазоны, и это может быть случай, когда у меня нет данных, удовлетворяющих вышеуказанным критериям.

Он вставляет формулу в конечный рабочий лист, но должен думать, что ссылка на ячейку по-прежнему связана с исходным рабочим листом… или что-то в этом роде. Вы знаете, что может быть причиной этого? Спасибо!

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

Это было бы очень полезно.

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

Да, это возможно
Sub Copy()
Затемнить Лист1 как рабочий лист
Затемнить лист2 как рабочий лист
Затемнить книгу1 как рабочую книгу
Затемнить книгу2 как рабочую книгу

Рабочие книги («Книга1.xlsx»). Рабочие листы («Лист1»). Диапазон («А1»). Копировать
Рабочие книги («Книга2.xlsx»). Рабочие листы («Лист1»). Диапазон (« A1").PasteSpecial Paste:=xlPasteFormats

будет ли это работать, чтобы скопировать формулу и использовать ее в следующей строке?

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

Вы можете мне помочь?

Затемнить lastRow1 As Long, erow1 As Long
lastRow1 = Worksheets(“WO_SendM”).Cells(Rows.Count, 1).End(xlUp).Row
For i = 3 To lastRow1< /p>

If Worksheets(“WO_SendM”).Cells(i, 9).Value = Me.Label164.Caption Then
Worksheets(“WO_SendM”).Cells(i, 4).Copy
Worksheets («WO_SendM»). Ячейки (i, 5). Копировать

erow1 = Рабочие листы («WO_Ledger»). Ячейки (Строки. Количество, 18). Конец (xlUp). Строка
Рабочие листы («WO_SendM»). Назначение вставки: = Рабочие листы («WO_Ledger»). Ячейки (erow1 + 1, 18)
Конец, если
Следующий i

Можно ли получить значения двух ячеек 4 и 5 в другой ячейке?

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

Привет, Джон,
Спасибо за этот урок, но мне нужна срочная помощь, если возможно, ответьте мне.

копировать и вставлять только ячейки фильтра из одного файла excel в другой excel с помощью VBA
excel-vba
У меня возникла проблема, когда я пытаюсь скопировать отфильтрованные ячейки из одного файла excel и вставить его в другой файл. Я использую вызов макроса для получения данных, где я пытаюсь исправить этот код. Это не работает, когда я пытаюсь скопировать видимые ячейки, которые я отфильтровал.
Частная подпрограмма CommandButton1_Click()

Dim lrCD As Long
Dim fNameAndPath As Variant
Dim WB As Workbook
Dim SourceWB As Workbook
Dim WS As Worksheet
Dim ASheet As Worksheet
Dim ASheet As Worksheet
>fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.xlsx), *.xlsx", Title:="Выбор файла от апреля")

‘Устанавливает переменные:
Set WB = ActiveWorkbook
Set ASheet = ActiveSheet
Set SourceWB = Workbooks.Open(fNameAndPath) ‘Modify to match

'Копирует каждый лист SourceWB в конец исходного wb:
Для каждого WS In SourceWB.Worksheets
WS.Copy after:=WB.Sheets(WB.Sheets.Count)
Следующий WS

SourceWB.Close savechanges:=False
Установить WS = Ничего
Установить SourceWB = Ничего

Установить ASheet = ничего
Установить WB = ничего

Application.EnableEvents = True
lastrow = Worksheets(4).Cells(Rows.Count, 1).SpecialCells(xlCellTypeVisible).End(xlUp).Row

Для i = 3 В последнюю строку
Worksheets(4).Cells(i, 16).SpecialCells(xlCellTypeVisible).Copy
erow = Worksheets(“CFF”).Cells(Rows.Count, 1).SpecialCells(xlCellTypeVisible).End(xlUp).Row
Worksheets(4).PasteSpecial xlPasteValues ​​= Worksheets("CFF").Cells(erow + 1, 2)
Worksheets(4). Cells(i, 16).SpecialCells(xlCellTypeVisible).Copy
Worksheets(4).PasteSpecial xlPasteValues ​​= Worksheets(“CFF”).Cells(erow + 1, 3)
Worksheets(4).Cells (i, 15).SpecialCells(xlCellTypeVisible).Copy
Worksheets(4).PasteSpecial xlPasteValues ​​= Worksheets(“CFF”).Cells(erow + 1, 4)
Worksheets(4).Cells( i, 12).SpecialCells(xlCellTypeVisible).Copy
Worksheets(4).PasteSpecial xlPasteValues ​​= Worksheets(“CFF”).Cells(erow + 1, 5)
Worksheets(4).Cells(i , 13).SpecialCells(xlCellTypeVisible).Copy
Worksheets(4).PasteSpecial xlPasteValues ​​= Worksheets(“CFF”).Cells(errow + 1, 6)
Worksheets(4).Cells(i, 18).SpecialCells(xlCellTypeVisible).Копировать
рабочие листы(4).PasteSpe cial xlPasteValues ​​= Worksheets("CFF").Cells(erow + 1, 1)
Далее i

Sheets(4).Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete

Завершить подписку
Заранее спасибо

Эй, когда вы копируете диапазон, где-то в Excel есть какой-то буфер копирования, я предполагаю, что это управляемый объект в VBA. Есть ли способ получить к нему доступ и как он называется? Я хочу посмотреть, является ли это коллекцией или массивом, или чем-то, что можно разделить на это, другими словами, чем-то, что можно повторять. Я не хочу просто вставить в одну каплю. Я хочу выбрать ячейки для вставки на основе других критериев.

У меня есть список уникальных имен игроков в столбце A на листе 1. А на листе 2 у меня есть данные о счете в крикет разных матчей для этого конкретного игрока с одинаковыми уникальными именами. А в листе 3 у меня есть данные тех же игроков для футбольных матчей.Теперь я хочу сначала найти имя, которое находится на листе 1 из листа 2, вырезать эти данные из листа 2 и вставить в ту же строку этого проигрывателя частиц. И найдите и вырежьте данные из листа 3 и вставьте их в лист 1 в той же строке в следующей доступной ячейке. Выполняйте это задание по одному для всех игроков, пока ячейка не опустеет. В некоторых случаях у меня есть несколько строк на листе 2 и листе 3 для одного и того же имени. В этом случае добавьте новую строку под этим именем и вырежьте и вставьте все данные. И каждый раз, когда я буду обновлять лист 2 и лист 3 новыми данными с новыми именами, которые я также добавлю на лист 1, он будет обновлять все данные на листе 1, нажав одну кнопку.

Я пробовал много тонких, но все равно они не работают так, как мне нужно. Кто-нибудь может помочь мне с этой задачей…..

VBA Copy Вставить

Подобно функции рабочего листа в Excel, мы также можем копировать и вставлять данные или набор значений в VBA. В обычных данных мы используем либо CTRL + C, чтобы скопировать выбранные данные, а затем используем CTRL + V, чтобы вставить выбранные данные в целевую ячейку. Но то же самое в VBA делают определенные коды, которые мы изучим в этой статье.

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

Оценка, Hadoop, Excel, мобильные приложения, веб-разработка и многое другое.

Синтаксис для копирования данных в VBA следующий:

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

Мы используем оператор точки (.) для использования методов копирования и вставки в VBA.

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

Примечание. Чтобы использовать VBA в Excel, убедитесь, что вкладка "Разработчик" включена на вкладке "Файл", а затем в разделе настроек параметров.

Как использовать копирование и вставку Excel VBA?

Мы узнаем, как использовать VBA Copy Paste на нескольких примерах в Excel.

Для демонстрации у меня есть случайное значение в ячейке A1, которое я хочу скопировать и вставить в ячейку B1 с помощью кода VBA. Посмотрите ниже, какие данные находятся в ячейке A1, а ячейка B1 пуста.

Пример 1 копирования и вставки VBA

Чтобы использовать Excel VBA Copy Paste, выполните следующие действия:

Шаг 1. Перейдите на вкладку разработчика и нажмите Visual Basic, чтобы открыть редактор VB.

Пример 1-1 копирования и вставки VBA

Шаг 2. Когда откроется редактор VB, нажмите «Вставить», а затем нажмите «Вставить модуль», чтобы вставить окно кода.

Пример 1-2 копирования и вставки VBA

Шаг 3. Объявите подфункцию, чтобы начать писать код.

Код:

Шаг 4. Сначала активируйте рабочий лист, чтобы использовать свойства рабочего листа с помощью следующего кода.

Код:

VBA Copy Paste Example 1-4

Шаг 5. Скопируйте данные из ячейки A1 с помощью следующего кода.

Код:

Пример 1-5 копирования и вставки VBA

Шаг 6. Теперь вставьте скопированные данные в целевую ячейку B1, используя следующий код.

Код:

VBA Copy Paste Example 1-6

Шаг 7. Запустите приведенный выше код с помощью предоставленной кнопки запуска и просмотрите результат в ячейке B1.

У меня есть данные в столбце C, и я хочу скопировать все данные или значения и вставить их в столбец D с помощью кода VBA. Посмотрите ниже, какие данные в столбце C и что столбец D пуст.

Пример 2-1 копирования и вставки VBA

Чтобы использовать Excel VBA Copy Paste, выполните следующие действия:

Шаг 1. Перейдите на вкладку разработчика и нажмите Visual Basic, чтобы открыть редактор VB.

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

Шаг 3. Объявите подфункцию, чтобы начать писать код.

Код:

Шаг 4. Сначала активируйте лист с помощью следующего кода.

Код:

Пример 2-3 копирования и вставки VBA

Шаг 5. Скопируйте данные в столбец C, используя следующий код.

Код:

Пример 2-4 копирования и вставки VBA

Шаг 6. Теперь, чтобы вставить данные в столбец D, используйте следующий код.

Код:

Пример 2-5 копирования и вставки VBA

Шаг 7. Запустите следующий код с помощью предоставленной кнопки запуска или нажмите F5.

Запустите код, чтобы увидеть следующий результат.

Теперь для этого примера у меня есть целый набор данных в диапазоне ячеек G1:H3, и я хочу скопировать данные в диапазоне ячеек I1:J3. Посмотрите ниже на данные, которые у меня есть в диапазоне ячеек G1:H3, а диапазон ячеек I1:J3 пуст.

Пример 3 копирования и вставки VBA

Чтобы использовать Excel VBA Copy Paste, выполните следующие действия:

Шаг 1. Перейдите на вкладку разработчика и нажмите Visual Basic, чтобы открыть редактор VB.

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

Шаг 3. Объявите подфункцию, чтобы начать писать код.

Код:

Шаг 4. Сначала активируйте рабочий лист, чтобы использовать его свойства, с помощью следующего кода.

Код:

VBA Copy Paste Example 3-2

Шаг 5. Скопируйте данные в целевой диапазон ячеек со следующим кодом.

Код:

Пример 3-3 копирования и вставки VBA

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

Код:

VBA Copy Paste Example 3-4

Шаг 7. Запустите приведенный выше код с помощью предоставленной кнопки запуска или нажмите F5, чтобы увидеть следующий результат.

Для этого примера у меня есть данные в строке 10, и я хочу вставить данные в строку 11. Посмотрите ниже, чтобы увидеть, какие данные находятся в строке 10, а строка 11 свободна.

Пример копирования и вставки VBA 4-1

Чтобы использовать Excel VBA Copy Paste, выполните следующие действия:

Шаг 1. Перейдите на вкладку разработчика и нажмите Visual Basic, чтобы открыть редактор VB.

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

Шаг 3. Объявите подфункцию, чтобы начать писать код.

Код:

Шаг 4. Активируйте рабочий лист, чтобы использовать его свойства.

Код:

Пример 4-3

Шаг 5. Скопируйте строку 10 со следующим кодом.

Код:

Пример 4-4

Шаг 6. Вставьте данные строки 10 в строку 11 со следующим кодом.

Код:

Пример 4-5

Шаг 7. Запустите приведенный выше код, нажав клавишу F5, чтобы увидеть следующий результат.

Что нужно помнить

  • Чтобы использовать данные с любого рабочего листа для его копирования, нам нужно сначала активировать рабочий лист.
  • Аналогичным образом, когда нам нужно вставить данные в любой другой рабочий лист в VBA, нам нужно сначала активировать целевой рабочий лист.
  • Если мы скопируем весь столбец или строку и вставим данные в любой другой столбец, тогда данные в любом месте строки или столбца в целевых ячейках будут скопированы и вставлены в целевые ячейки. Это может привести к нежелательным данным.
  • Лучший способ скопировать данные — скопировать определенный диапазон и вставить данные в целевые ячейки.

Рекомендуемые статьи

Это руководство по копированию и вставке VBA. Здесь мы обсудили, как использовать Excel VBA Copy paste вместе с некоторыми практическими примерами и загружаемым шаблоном Excel. Вы также можете ознакомиться с другими нашими рекомендуемыми статьями –

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

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

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

Единственная проблема с этим решением заключается в том, что оно оставляет интерфейс Excel немного "грязным" (из-за отсутствия лучшего слова). После завершения целая строка по-прежнему выделена, а вокруг новой строки выделяется рамка «Марширующие муравьи».

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

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

Биография автора

На его счету более 50 научно-популярных книг и множество журнальных статей. Аллен Уайатт является всемирно признанным автором. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнайте больше об Аллене.

БОЛЬШЕ ОТ АЛЛЕНА

Указание правильного регистра

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

Количество слов для группы документов

Подсчитать количество слов для одного документа очень просто. Получение совокупного количества слов для большого количества документов может .

Правильно повторяющиеся слова

Бывают случаи, когда вам нужно повторить слово в документе, но это вызывает "реакцию ошибки" Word.


Экономьте время и повышайте производительность Excel! Автоматизируйте практически любую рутинную задачу и сэкономьте часы, дни, а может быть, и недели. Затем узнайте, как заставить Excel делать то, что вы считали просто невозможным! Освоение расширенных макросов Excel никогда не было проще. Ознакомьтесь с Excel 2010 VBA и макросами сегодня!

Дополнительные советы Excel (меню)

Ввод информации в несколько ячеек

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

Относительные ссылки на рабочий лист при копировании

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

Не удается скопировать данные между книгами

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

Подписаться

БЕСПЛАТНАЯ СЛУЖБА. Получайте подобные советы каждую неделю в ExcelTips, бесплатном информационном бюллетене по повышению эффективности. Введите свой адрес и нажмите "Подписаться".

Комментарии

Спасибо за помощь. Здорово, что есть несколько способов найти решение!

Привет, Алан! Большое спасибо за помощь.

Ваш разговор помог мне с другими проблемами, которые у меня были. К счастью, теперь все решено!

@Paul Richardson
Вашу проблему очень легко решить. Просто скопируйте всю строку и очистите содержимое ячеек в столбцах G и H в новой строке, чтобы они были готовы к приему новых данных. Этот макрос выполнит эту работу:

Sub InsertCopyRow()
С выделением
.EntireRow.Copy
.EntireRow.Insert
Range(Cells(.Row, "G"), Cells(.Row, "H")).ClearContents
End With
End Sub

Здравствуйте, Пол,
Я склонен думать о методе Excel VBA Range.Insert как о чем-то, что
…… создает пространство для ввода нового диапазона.
Если что-то случится в буфере обмена, когда вы используете эту строку кода, тогда VBA делает некоторое предположение, что вы хотели, чтобы то, что находится в буфере обмена, было помещено в пробел.То, что именно он решает сделать, требует книги объяснений: нам остается выяснить, поскольку нет никакой документации, о которой я знаю.
В простейшем случае наличия одной строки в буфере обмена и использования диапазона .Insert, чтобы сделать всю строку пробелом, тогда результаты будут такими, как вы ожидаете, поскольку очевидный выбор, который делает Excel, состоит в том, чтобы предположить, что вы хотите поместить эту скопированную строку в новое пространство строки.
Это то, что делает первая программа Аллена Уайатта. Он вставляет новую пустую строку в активную строку (или строку, содержащую активную ячейку), но также и то, что находится в буфере обмена (исходная строка), помещается в эту новую строку. Что на самом деле происходит, так это то, что исходная строка была сдвинута вниз. Копия этого оригинала (который был сделан первым) помещается в новое пространство строки
Во второй процедуре он использует метод Range.Insert без каких-либо данных в буфере обмена, так что он просто создает пространство строки ( на этот раз он камеет этот пробел на одну строку вниз). Затем он копирует строку и вставляет ее в новое пространство строки.
Итак, две его программы хорошо демонстрируют то, что я пытаюсь донести.

Чтобы скопировать только часть строки в новую строку:
Использование чего-то похожего на вторую процедуру является лучшей альтернативой для копирования только части исходной строки в новое пространство строки. (Другая альтернатива попытки манипулировать, а затем предсказать, как Range.Insert будет обрабатывать измененное содержимое буфера обмена, безусловно, возможна и интересна с академической точки зрения, но может быть немного продвинутой, если вы новичок в VBA, тем более что различные ошибки и неизвестные в В последние годы было доказано, что различные буферы обмена Microsoft находятся за пределами понимания самих программистов Microsoft!! )
Так, например, общая идея будет такой
_1,
ActiveCell.Offset( 1, 0).EntireRow.Insert Shift:=xlDown
или
ActiveCell.Offset(1, 0).EntireRow.Resize(1, 14).Insert Shift:=xlDown
_2, Самый простой способ или первая идея, которая приходит мне на ум, - это скопировать информацию о строке, которую вы хотите, в простой массив, а затем манипулировать ею, чтобы удалить/оставить пустой информацию, которая вам не нужна, а затем вставить ее в пространство .

Я свяжусь с вами на форуме, так как там больше места для обмена кодами и файлами и т.д.

Привет, Алан, спасибо за ответ.

Я запускаю код и вижу, что вы имеете в виду.

Мой лист — это базовый менеджер проектов. (Название листа "ToDoList")

Лист состоит из столбцов A : N

Я хотел бы иметь возможность копировать любую строку (активную строку) с листа, чтобы вставлять и дублировать ее одним из следующих способов:

1 – вставка строки под выбранной строкой.
2 – вставка в следующую доступную пустую строку на том же листе.

Решение номер 1 было бы предпочтительным.

Колонки, которые я не хочу копировать, поэтому оставлены пустыми: G и H

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

Надеюсь, это имеет смысл.

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

ПС. Я оставил эту тему здесь, но я также зарегистрировался на вашем маленьком форуме.

Здравствуйте, Пол Ричардсон
VBA позволяет копировать части строки. Это связано с тем, что VBA в целом позволяет копировать несмежные ячейки, если они находятся «в строке».
Так, например, любой из них будет работать (первый из них копирует несколько столбцов в одну строку)

Однако это не сработает:
Range("A2,C4,H2").Копировать

Проблема в том, что когда вы вставляете любую из успешно скопированных ячеек, VBA удаляет пробелы между ними.

Чтобы понять, что я имею в виду, поместите несколько случайных значений в ячейки A2, C2 и H2 активного рабочего листа, а затем запустите этот
Sub Testie()
ActiveSheet.Range("A2,C2,H2"). .Copy
ActiveSheet.Paste Destination:=ActiveSheet.Range("A4")
Application.CutCopyMode = False ' Пустой буфер обмена Excel
End Sub

Было бы нетрудно сделать то, что вы хотите сделать, но вам потребуется немного более сложный код, чем тот, который представил Аллен Вятт. Ему нужно будет пройтись по циклу, скопировать и вставить каждую ячейку столбца, которую вы хотите скопировать. Как часто бывает, в VBA существует почти бесконечное количество способов сделать что-то подобное. Если вам нужна более конкретная помощь, вам нужно будет дать более конкретную информацию о том, какие ячейки следует копировать, куда их следует вставлять и т. д.…

( Обычно лучше всего задавать такие вопросы на одном из крупных форумов Excel. Но я не возражаю против того, чтобы вы задавали мне вопросы здесь или на «моем» маленьком форуме, ExcelFox. )

Привет. Очень новичок в VBA, но продвигаюсь медленно. Я использовал ваш код выше с отличными результатами, но теперь я столкнулся с проблемой. Я хочу скопировать активную строку, но скопировать только выбранные столбцы, а не все из них. Извините, если это не то место, чтобы запросить это. Большое спасибо. ТалльПолВеликобритания

Этот сайт

У вас есть версия Excel, в которой используется интерфейс меню (Excel 97, Excel 2000, Excel 2002 или Excel 2003)? Этот сайт для Вас! Если вы используете более позднюю версию Excel, посетите наш сайт ExcelTips, посвященный ленточному интерфейсу.

Читайте также: