2013-08-14 8 views
0

Я попытался найти на сайте решение для этого, но мне не удалось найти точное совпадение. Я пытаюсь выяснить код VBA, который будет делать следующее:Копирование динамических ячеек/строк в новый лист или рабочую книгу

  1. Поиск по указанной колонке
  2. Найдите все совпадающие значения (не указан)
  3. Копирование строки указанного соответствия значений
  4. Поместите их в новый лист или книгу (предпочтительно рабочая книга)

Вот моя проблема. Значение в указанной строке может быть 1 из более чем 300 уникальных значений, поэтому указание каждого из кода VBA было бы кошмаром.

Я понимаю, что фильтрация указанного столбца в алфавитном порядке будет работать, но как бы я сказал макросу остановиться в конце каждой группы и скопировать его на новый лист? В основном, как бы я сказал: «Если следующее значение не соответствует текущему значению, запустите новую книгу»? (IE: найдите столбец C и скопируйте все строки, содержащие «Bat», затем скопируйте в новую книгу, затем выполните поиск в столбце C и скопируйте все строки, содержащие «Car», затем замените на новую книгу)

Любая помощь будет будем очень благодарны!

+1

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

+0

Я сделаю это и вернусь. Спасибо за предложение! – user2530086

ответ

0

предполагая, что ваши данные сгруппированы, то есть, не что-то вроде:

batman 
batman 
robin 
robin 
batman 

, но вместо этого:

batman 
batman 
batman 
robin 
robin 

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

Sub grabber() 
Dim thisWorkbook As Workbook 
Set thisWorkbook = ActiveWorkbook 
last = 1 
For i = 1 To 18 'my sample had 18 rows, replace it with how many you have 
If Range("A" & i) <> Range("A" & (i + 1)) Then 
Range("A" & last & ":A" & i).Copy 
Set NewBook = Workbooks.Add 
NewBook.Sheets("Sheet1").Range("A1").PasteSpecial xlPasteValues 
last = i + 1 
thisWorkbook.Activate 
End If 
Next i 
End Sub 
+0

Отлично! Спасибо за тонну за помощь, которую я всю ночь стучал своим мозгом вокруг этой ночи! – user2530086

+0

Отлично! Если это сработает, вы можете установить флажок, чтобы отметить это как принятый ответ на ваш вопрос? – chiliNUT

+0

Выполнено, извините, новый участник этого сайта. – user2530086

Смежные вопросы