Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 12.01.2021
Сообщений: 28
1

Копирование макросом данных в отдельный лист по условию

12.01.2021, 17:20. Показов 1397. Ответов 11

Author24 — интернет-сервис помощи студентам
Добрый день, уважаемые форумчане!
Задача следующая, есть условные данные, в столбце D стоит дата формата; ДД.ММ.ГГГГ (число всегда 01, т е 01.02.2020, 01.05.2019 и тд),
Нужно разбить все данные по кварталам, для этого были созданы 4 листа (Квартал1, Квартал2 и т д)
Можно ли написать макрос который будет определять к какому кварталу относится та или иная дата, выделять ВСЮ строку, и вставлять её в соответствующий лист, и так до тех пор пока данные не закончатся.
Пытался что то написать сам, но не пашет, может кто подскажет.
Заранее благодарю!

Sub М2()
Dim R As Long
Range("D : D").Select
If R = "2020.01.01" Or R = "2020.02.01" Or R = "2020.03.01" Or R = "2019.01.01" Or R = "2019.02.01" Or R = "2019.03.01" Then Rows(R).Select
Selection.Cut
Sheets("Квартал1").Select
ActiveSheet.Paste
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2021, 17:20
Ответы с готовыми решениями:

Выбор ячеек по условию, копирование на отдельный лист
Добрый день!Нужна помощь, сброшу часть информации, потом по аналогу доделаю ещё 4))) Есть файл с...

Выборка со всех листов по условию и копирование на отдельный лист
Здравствуйте. Задача: Имеются 32 листа с разным количеством строк данных (фио, лич.номер, возраст,...

Копирование строк по условию с нескольких листов на отдельный лист
Уважаемые знатоки-форумчане! Прошу помощи! Просмотрела все возможные форумы, сайты по теме, не...

Копирование данных на другой лист по условию
Добрый день, уважаемые форумчане. Прошу помощи в решении следующего вопроса: Есть файл (во...

11
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
12.01.2021, 18:03 2
Upiter1,
Вариант в лоб:
Если данных не очень много ( порядка 10 000) ю
1) Создаете 4 листа с данными ( все одинаковые зля 4-х квариалов)
2) Циклом снизу вверх и условием ( если дата меньше того-то или больше того-то) - то строку удалить

И ву фля- файл готов...
Необходимо:
1) иметь данные с файлом ( здесь возникает попутный вопрос: данные за один год , или разные )
2) знать точные границы кварталов...
0
1 / 1 / 0
Регистрация: 12.01.2021
Сообщений: 28
12.01.2021, 18:09  [ТС] 3
а если строк 700 тысяч ?)
Данные за 2 года (то есть 2019 и 2020г)
0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
12.01.2021, 18:15 4
Цитата Сообщение от Upiter1 Посмотреть сообщение
а если строк 700 тысяч ?)
Тогда массивами..

.
Цитата Сообщение от Upiter1 Посмотреть сообщение
Данные за 2 года (то есть 2019 и 2020г)
Это 2 файла , или 8 листов?
0
1 / 1 / 0
Регистрация: 12.01.2021
Сообщений: 28
12.01.2021, 18:19  [ТС] 5
1 файл 4 листа, там не важно в каком порядке будут идти года, главное это разбивка по кварталам....
0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
12.01.2021, 18:47 6
Upiter1,
файлик прикрепите
можно строк 200 .
1
Динохромный
1375 / 749 / 271
Регистрация: 22.12.2015
Сообщений: 2,341
12.01.2021, 19:08 7
Upiter1, Upiter1, из даты можно вытащить месяц с помощью функции месяц(). Форматируете вашу таблицу как умную через ctrl+L, вводите допстолбец с функцией месяц(), фильтруете по месяцам 1-3. Дальше F5 выделить - текущая область, затем снова F5 -выделить -только видимые ячейки, затем копировать и вставить на новый лист. Потом перенастраиваете фильтр для других месяцев. И так для 4х листов.
1
1 / 1 / 0
Регистрация: 12.01.2021
Сообщений: 28
12.01.2021, 21:06  [ТС] 8
вот примерный, реальные данные выложить не могу, иначе сяду далеко и на долго xD
Вложения
Тип файла: xlsx wd.xlsx (14.2 Кб, 18 просмотров)
0
1 / 1 / 0
Регистрация: 12.01.2021
Сообщений: 28
12.01.2021, 21:07  [ТС] 9
Dinoxromniy, Это очень хорошая идея, всё проще чем я думал)
Спасибо, попробую!
0
6002 / 3197 / 716
Регистрация: 23.11.2010
Сообщений: 10,683
12.01.2021, 22:51 10
Upiter1, столбцы названы "Аналитика", можно предположить, что собираетесь анализировать данные, тогда для чего делить их
0
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
12.01.2021, 23:18 11
Лучший ответ Сообщение было отмечено Upiter1 как решение

Решение

Upiter1,

Попробуйте код для вашего файла...
Ради интереса ,увеличил к-во строк за 700 000 и замерил время процесса.
Результат на картинке

Пы.Сы . Можно было сделать массив массивов и листы еще через цикл заполнять...
Но всего 4 листа и 4 массива... - прошу понять и простить..
Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Sub MMM()
T1 = Timer
LR = Cells(Rows.Count, 4).End(xlUp).Row
R = Range("A1:F1").Value
ARR0 = Range(Cells(2, 1), Cells(LR, 6)).Value
ReDim ARR1(1 To UBound(ARR0), 1 To UBound(ARR0, 2))
ReDim ARR2(1 To UBound(ARR0), 1 To UBound(ARR0, 2))
ReDim ARR3(1 To UBound(ARR0), 1 To UBound(ARR0, 2))
ReDim ARR4(1 To UBound(ARR0), 1 To UBound(ARR0, 2))
 
M1 = 1: M2 = 1: M3 = 1: M4 = 1
For i = 1 To UBound(ARR0)
 MNTH = Month(CDate(ARR0(i, 4)))
 Select Case MNTH
    Case 1 To 3
        For j = 1 To UBound(ARR0, 2)
            ARR1(M1, j) = ARR0(i, j)
        Next
        M1 = M1 + 1
    Case 4 To 6
        For j = 1 To UBound(ARR0, 2)
            ARR2(M2, j) = ARR0(i, j)
        Next
        M2 = M2 + 1
    Case 7 To 9
        For j = 1 To UBound(ARR0, 2)
            ARR3(M3, j) = ARR0(i, j)
        Next
        M3 = M3 + 1
    Case 10 To 12
        For j = 1 To UBound(ARR0, 2)
            ARR4(M4, j) = ARR0(i, j)
        Next
        M4 = M4 + 1
 End Select
 
Next
Application.ScreenUpdating = False
With Sheets("кв1")
.Range("A1:F1").Value = R
.Cells(2, 1).Resize(UBound(ARR0), UBound(ARR0, 2)).Value = ARR1
End With
With Sheets("кв2")
.Range("A1:F1").Value = R
.Cells(2, 1).Resize(UBound(ARR0), UBound(ARR0, 2)).Value = ARR2
End With
With Sheets("кв3")
.Range("A1:F1").Value = R
.Cells(2, 1).Resize(UBound(ARR0), UBound(ARR0, 2)).Value = ARR3
End With
With Sheets("кв4")
.Range("A1:F1").Value = R
.Cells(2, 1).Resize(UBound(ARR0), UBound(ARR0, 2)).Value = ARR4
End With
T2 = Timer
Application.ScreenUpdating = True
MsgBox "Работа завершена " & Chr(13) & " Обработка  " & LR - 1 & "  строк  заняла " & Int(T2 - T1) & " секунд."
 
End Sub
Миниатюры
Копирование макросом данных в отдельный лист по условию  
1
1 / 1 / 0
Регистрация: 12.01.2021
Сообщений: 28
13.01.2021, 10:56  [ТС] 12
Я вас люблю, спасибо большое)
Все работает
0
13.01.2021, 10:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2021, 10:56
Помогаю со студенческими работами здесь

Копирование данных на новый лист по условию
Добрый день! Нашел на просторах интернета макрос позволяющий создавать новые листы по названию...

Макрос на копирование страниц на отдельный лист
Здравствуйте! После нажатия кнопки "Создать сетки боёв" на листе "Список по группам") создаются...

Копирование результатов поиска по книге на отдельный лист
Ребята, помогите! Уже замучился искать! Есть книга, около 30 листов, на каждом листе таблица из...

Поиск одинаковых значений в столбце и копирование их на отдельный лист
Доброго времени суток! Подскажите как осуществить поиск одинаковых значений в столбце и копирование...

Выделение подсчет и копирование одинаковых значений в отдельный лист
Добрый день! Есть эксель документ с логом просмотра разных документов за 10 лет. В логе название...

Копирование данных с листа 1 на лист 3 при условии в лист 2
Помогите пожалуйста пересмотрел примеры решения на форуме. но не могу найти нужное. есть 3...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru