Копіювати до наступного порожнього рядка - Поради Excel

Зміст

Пише NYARCH

Я хочу, щоб Excel скопіював цілий рядок на новий аркуш Excel на основі запису клітинки. Наприклад, у мене є дані в комірках A8: AG8, я хочу, щоб Excel скопіював весь рядок на аркуш "a", якщо значення в H8 "ir", і аркуш "b", якщо значення в H8 дорівнює "RR". Найскладніша частина, а не просто скопійована, мені потрібна її копія в наступний порожній рядок на аркуші. З 150 рядків або близько того лише близько 15 кожного типу буде фактично скопійовано на новий аркуш.

MrExcel присудить 50 бонусних балів будь-якому читачеві, який запам’ятав статтю журналу Lotus, яка пропонує 10 чудових підказок, де підказка №4 була «Використовуйте клавішу« Кінець »для переміщення в кінець діапазону». Повертаючись до днів Lotus, ви можете помістити покажчик комірки в будь-яке місце в блоці даних, натиснути END, а потім вниз, і покажчик комірки буде рухатися до кінця діапазону. Excel має подібну функціональність, VBA має подібну функціональність, і це є ключем до пошуку останнього рядка даних на аркуші.

Техніка VBA полягає у використанні End (xlDown) для імітації клавіші End + Down або End (xlUp) для імітації клавіші End + Up. Натискання цієї послідовності клавіш перемістить покажчик комірки на наступний край суміжного діапазону даних. Уявіть, що в A1: A10 та A20: A30 є значення. Почніть з А1. Натисніть Кінець + Вниз, і вказівник клітинки переміститься до A10. Натисніть End + Down, і ви перейдете до A20, який є верхнім краєм наступного суміжного діапазону даних. Натисніть End + Down, і ви перейдете до A30. Я насправді не знаю, як пояснити цю поведінку простою англійською мовою. Просто спробуйте, і ви побачите, як це працює.

Фокус, який я використовую, полягає в тому, щоб почати з стовпця А в останньому рядку електронної таблиці, а потім натиснути Кінець + Вгору. Це призведе мене до останнього рядка з даними. Тоді я знаю, як використовувати наступний рядок як порожній рядок.

Ось макрос грубої сили для вирішення проблеми цього тижня. Так, ви напевно можете зробити це більш елегантно за допомогою AutoFilter. На даний момент дані знаходяться на Аркуші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 рядків, ви можете використовувати цей макрос, щоб він був сумісним із переадресацією. Зверніть увагу, що я використовую клітинки (рядок, стовпець) замість 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.

Цікаві статті...