Копировать в следующую пустую строку - Советы по Excel

Содержание

НЯРЧ пишет

Я хочу, чтобы Excel копировал всю строку на новый лист Excel на основе записи в ячейке. Например, у меня есть данные в ячейках A8: AG8, я хочу, чтобы Excel скопировал всю строку на лист «a», если значение в H8 - «ir», и лист «b», если значение в H8 - «RR». Самая сложная часть, а не просто скопированная, мне нужно, чтобы она была скопирована в следующую пустую строку на листе. Из 150 строк или около того только 15 строк каждого типа будут фактически скопированы на новый лист.

MrExcel присудит 50 бонусных баллов любому читателю, который помнит статью Lotus Magazine, предлагающую 10 отличных советов, где совет № 4 был «Используйте клавишу End, чтобы перейти к концу диапазона». Возвращаясь к временам Lotus, вы могли поместить указатель ячейки в любом месте блока данных, нажать END, затем вниз, и указатель ячейки переместился бы в конец диапазона. Excel имеет аналогичную функциональность, VBA имеет аналогичную функциональность, и это ключ к поиску последней строки данных на листе.

Методика VBA заключается в использовании End (xlDown) для имитации клавиши End + Down или End (xlUp) для имитации клавиши End + Up. Нажатие этой последовательности клавиш переместит указатель ячейки к следующему краю непрерывного диапазона данных. Представьте, что есть значения в A1: A10 и A20: A30. Старт в A1. Нажмите End + Down, и указатель ячейки переместится на A10. Нажмите End + Down, и вы перейдете к A20, который является верхним краем следующего непрерывного диапазона данных. Нажмите End + Down, и вы перейдете к A30. Я вообще не понимаю, как объяснить это поведение простым английским языком. Просто попробуйте, и вы увидите, как это работает.

Уловка, которую я использую, заключается в том, чтобы начать с столбца A в последней строке электронной таблицы, а затем нажать «End + Up». Это приведет меня к последней строке с данными. Затем я знаю, что нужно использовать следующую строку как пустую.

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

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Range("A65536").End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Range("H" & x).Value If ThisValue = "ir" Then Range("A" & x & ":AG" & x).Copy Sheets("a").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Range("A" & x & ":AG" & x).Copy Sheets("b").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Учитывая, что Excel 2007 имеет более 65 536 строк, вы можете использовать этот макрос, чтобы он был совместим с вперед. Обратите внимание, что здесь я использую CELLS (Row, Column) вместо RANGE:

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Cells(Rows.Count, 1).End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Cells(x, 8).Value If ThisValue = "ir" Then Cells(x, 1).Resize(1, 33).Copy Sheets("a").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Cells(x, 1).Resize(1, 33).Copy Sheets("b").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Советы по использованию макроса см. В разделе Знакомство с редактором Excel VBA.

Интересные статьи...