Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2018, 10:44   #1
netmaker
 
Регистрация: 21.06.2018
Сообщений: 6
По умолчанию Макрос для вставки пропущенных дат за определённый период.

Здравствуйте, дорогие форумчане!
Есть отчет прихода на работу работников, в файле Example или сам собственно и отчёт. Для этого отчёта необходимо написать макрос который бы, вписывал строки с пропущенными датами, учитывая наименьшее и наибольшее число даты. Например, в файле примера наименьшее это 23/05/20018, а наибольшее 28/05/2018. И в определенном периоде все эти даты должны вписаться в отчёт. В файле Example есть два листа. Первый лист показывает то, что имеется в начале. Второй лист показывает то, что хотелось бы получить в результате работы макроса.
Заранее спасибо Вам друзья!!!
Вложения
Тип файла: xls Example.xls (39.5 Кб, 27 просмотров)
Тип файла: xlsx Отчёт.xlsx (550.3 Кб, 17 просмотров)

Последний раз редактировалось netmaker; 21.06.2018 в 10:47.
netmaker вне форума Ответить с цитированием
Старый 21.06.2018, 11:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от netmaker Посмотреть сообщение
Например, в файле примера наименьшее это 23/05/20018
и поэтому Вы первой же строкой на листе "Хочу получить" вставляете 22.05.2018 ?
а почему в листе "Хочу получить" для Name3 начинается c 25.05.2018 ? Там строчки с более ранними датами не нужны?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.06.2018, 11:46   #3
netmaker
 
Регистрация: 21.06.2018
Сообщений: 6
По умолчанию

22.05.2018 потому что это наименьшая дата в этом отчёте.
netmaker вне форума Ответить с цитированием
Старый 21.06.2018, 11:50   #4
netmaker
 
Регистрация: 21.06.2018
Сообщений: 6
По умолчанию

У меня есть макрос:
Код:
Sub InsRows()
    Dim i As Long, j As Long, k As Long, m As Long, n As Long
    Dim maDt As Long, miDt As Long, a(), b(), z, q
    Application.ScreenUpdating = False
    Set z = CreateObject("Scripting.Dictionary")
    i = Cells(Rows.Count, 1).End(xlUp).Row
    a = Range("A3:P" & i).Value
    miDt = Application.Min(Range("H3:H" & i))
    maDt = Application.Max(Range("H3:H" & i))
    For i = 1 To UBound(a, 1): z(a(i, 2)) = i: Next
    ReDim b(1 To z.Count * (maDt - miDt + 1), 1 To UBound(a, 2))
    For Each q In z.Items
        For j = miDt To maDt
            k = k + 1
            For m = 1 To 7
                b(k, m) = a(q, m)
                b(k, 8) = j
                For i = 1 To UBound(a, 1)
                    If a(i, 8) = j Then
                        If a(i, 2) = b(k, 2) Then
                            For n = 9 To 16: b(k, n) = a(i, n): Next
                            Exit For
    End If: End If: Next: Next: Next: Next
    [A3].Resize(UBound(b, 1), UBound(b, 2)).Value = b
End Sub
Но при выполнении макрос не обрабатывает отчёт.xlsx файл до конца. В связи с чем вопрос в чём причина?


_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 21.06.2018 в 12:59.
netmaker вне форума Ответить с цитированием
Старый 22.06.2018, 08:02   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
макрос не обрабатывает отчёт.xlsx файл до конца. В связи с чем вопрос в чём причина?
Причина в том, что данный макрос для определения блока, в который требуется вставить недостающие строки, анализирует столбец "B".
В файле "Example" - три блока. Это "OTDEL 1", "OTDEL 2" и "OTDEL 3", для каждого из которых добавляются строки.
В файле "Отчет" у Вас есть совпадающие блоки. Например, "DOUBLING/TWISTI 2 SHIFT" встречается несколько раз (с различными AC-No.).
Укажите, как однозначно идентифицировать блок, в который требуется добавлять строки. Макрос будет другой.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 25.12.2019, 10:35   #6
netmaker
 
Регистрация: 21.06.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Причина в том, что данный макрос для определения блока, в который требуется вставить недостающие строки, анализирует столбец "B".
В файле "Example" - три блока. Это "OTDEL 1", "OTDEL 2" и "OTDEL 3", для каждого из которых добавляются строки.
В файле "Отчет" у Вас есть совпадающие блоки. Например, "DOUBLING/TWISTI 2 SHIFT" встречается несколько раз (с различными AC-No.).
Укажите, как однозначно идентифицировать блок, в который требуется добавлять строки. Макрос будет другой.
SAS888, А если вместо "OTDEL 1", "OTDEL 2" и "OTDEL 3" есть скажем 1 отдел?
netmaker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбить период дат на массив Maxim360 Microsoft Office Access 2 18.05.2017 14:34
Макрос для вставки строки с копированием Viktorkv Microsoft Office Excel 2 30.11.2014 18:30
Макрос для вставки новой строки Maiku Microsoft Office Excel 6 15.03.2013 18:28
Макрос для вставки картинки из эксель КТатьяна Microsoft Office Excel 0 02.05.2011 12:46
[access]реализовать вывод отчёта продажи за определённый период времени nuevegramodelamor Фриланс 1 18.04.2011 09:50