2015-10-02 3 views
0

У меня есть некоторые файлы excel, каждый из которых содержит 3 строки данных за каждый отдельный день года (дата (A1), AVG (B1), CV (C1)) для последнего 30 лет. Теперь я хочу разделить их на год, когда они были собраны (например, последние 20 лет, последние 10 лет, в прошлом году или даже последние 6 месяцев). Поэтому я использую несколько строк, чтобы поместить дату начала и окончания в две ячейки и отфильтровать данные (ячейки) между этими двумя датами.Извлечение данных между датами и пастой на новый лист

Dim lngStart As Long, lngEnd As Long 
lngStart = Range("E1").Value 'assume this is the start date 
lngEnd = Range("E2").Value 'assume this is the end date 
Range("A2:A4000").AutoFilter field:=1, _ 
    Criteria1:=">=" & lngStart, _ 
    Operator:=xlAnd, _ 
    Criteria2:="<=" & lngEnd 

`

И добавить несколько строк, чтобы скопировать эти данные на новый лист.

`Range("A1:C1").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
Sheets.Add After:=Sheets(Sheets.Count) 
ActiveSheet.Paste´ 

Но, у меня есть несколько из этих рабочих листов, и я должен сделать отдельный лист для последнего 30years, 20Y, 10Y 5г, 3y, 1Y, 6months, 3х и 1month в каждом листе. Интересно, есть ли шанс получить макрос для извлечения всех этих периодов времени (например, последние 10y в соответствии с последней датой в базе данных) и скопировать их на новый лист, обозначенный его собственным конкретным периодом времени (например, «10y») однажды!? Таким образом, результатом будет 9 новых помеченных листов, каждый из которых имеет три столбца (дата (A1), AVG (B1), CV (C1))! Извините за длинный рассказ :)
Большое спасибо за вашу помощь и с нетерпением ждем от вас ребята!

Бест, Neos116

ответ

0

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

Итак, давайте посмотрим, что мы получили здесь ... 1 ложка "Добавление нового листа на лету":

ActiveWorkbook.Sheets.Add Before:=Worksheets(Sheets.Count) 
    ActiveSheet.Name = "blabla" 

Чашка "Поиск Грань":

i=2 'Assuming your first row contains column names 
Do While CDate(Cells(i, "A")) >= DateAdd("m", Now, -1) 'to get last month dates only 
    i = i + 1 
loop 
'At this point i holds the row number of the very first record earlier then last 1 month 

И только немного «Копировать & Вставить свой диапазон»:

Range(Cells(2, "A"), Cells(i-1, "C")).Copy 
Sheets("1m").Select 
Cells(2, "A").PasteSpecial xlPasteAll 

Вы получаете рецепт, у вас есть ингредиенты, теперь попробуйте приготовить что-то самостоятельно.

Удачи вам! :)

+1

Спасибо большое! Мне нравится ваше решение :) – Neos116

+0

Я буду работать над этим и позволит вам. Благодаря! – Neos116

+0

Не стесняйтесь спрашивать меня о каких-либо деталях, если вы застряли с ним :) – GSazheniuk

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