Страницы: 1
RSS
Сбор данных на другой лист по условию даты
 
Здравствуйте, Господа Гуру Экселя!

Помогите пожалуйста сотворить в жизнь формулу для сбора данных с одного листа на другой, при условии промежуток дат.
Пример во вложении. Если не понятно, то могу разъяснить.

С уважением,
Бек
 
Бекбол Косбаев, а где исходные данные  файле и где желаемый результат? и описание задачи не увидел в теме
Изменено: Mershik - 30.03.2020 21:01:44
Не бойтесь совершенства. Вам его не достичь.
 
Извиняюсь, исходные данные в Листе №1.
А то, что нужно придумать в Листе №2.
 
Бекбол Косбаев, ну отлично...
Цитата
Mershik написал:
описание задачи не увидел в теме
какая логика - почему не все данные перенесены?? вообще логику нужно описывать
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Бекбол Косбаев написал:
при условии промежуток дат
Не понятно что нужно
В файле вариант (возможно неправильный) с доп. столбцом.  
 
Попробовал условия на ощупь  :)
Код
Sub PleaseHelp()
    
    Dim i As Long
    Dim j As Long
    Dim rngReportClear As Range 'Диапазон для очистки
    
    Dim wsMain As Worksheet     'Лист с иходными данными
    Dim wsReport As Worksheet   'Лист с отчетом
    
    Set wsMain = ThisWorkbook.Worksheets("Лист1")
    Set wsReport = ThisWorkbook.Worksheets("Отчет")

    'Очистка отчета
    Set rngReportClear = wsReport.Cells(1, 1).CurrentRegion.Offset(1, 0)
    Set rngReportClear = rngReportClear.Resize(rngReportClear.Rows.Count - 1, 5)
    rngReportClear.ClearContents
    
    i = 8   'Начальная строка главной таблицы
    j = 2   'Начальная стройка отчетной таблицы
    
    'Пока Таб в глвной таблице не пустой не пустой
    Do While wsMain.Cells(i, 2) <> ""
        If wsMain.Cells(i, 2) <> wsReport.Cells(j - 1, 1) Or wsMain.Cells(i, 3) <> wsReport.Cells(j - 1, 3) Then
            wsReport.Cells(j, 1) = wsMain.Cells(i, 2)
            wsReport.Cells(j, 2) = wsMain.Cells(i, 1)
            wsReport.Cells(j, 3) = wsMain.Cells(i, 3)
            wsReport.Cells(j, 4) = wsMain.Cells(i, 4)
            wsReport.Cells(j, 5) = wsMain.Cells(i, 4)
            j = j + 1
        Else
            wsReport.Cells(j - 1, 5) = wsMain.Cells(i, 4)
        End If
        i = i + 1
    Loop
    
    wsReport.Activate
    
End Sub
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Дорогой Valo, идеально. супер!!!

Цитата
Mershik написал: вообще логику нужно описывать
Добрый день. Логика такая, в Листе №1 (А7:Е16) приведен короткий список. Обычно база данных очень большая. Список выгружается из сторонней программы, и не имеет Конечную дату. В листе №2 желтым выделено то, что необходимо доработать формулой. Чтобы высчитывала конечную дату.
ФИОТабОплDateЧасов
Иванов1101Н02.03.20208
Иванов1101Н01.03.20208
Петров1102Н07.03.20208
Петров1102ПН08.03.20208
Петров1102Н09.03.20208
Сидоров1103Н19.03.20208
Сидоров1103Н20.03.20208
Сидоров1103Н21.03.20208
Сидоров1103ПН22.03.20208
 
Valo, к сожалению, я недолго радовался. Когда я добавил Иванова 18 марта 2020, он посчитал его как будто он работал с 01 марта по 18 марта. А должно быть отдельно.

А также, как быть, чтобы:
1) Если праздничных дней будет больше (аж 17 линии получается)
2) В Листе 2, колонка G должна показывать кол-во часов для каждого промежутка даты отдельно. Которая имеется в первом Листе.

Огромная благодарность за помощь.
 
Бекбол Косбаев, то что у Иванова вначале идет 02/03/20, а потом 01/03/20 это точно правильно?  
Изменено: Valo - 31.03.2020 15:45:37
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
так выгружает с системы отчет, но там я могу справиться с сортировкой
 
Пробуйте, вроде и без предварительной сортировки работает:
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Упс, поправил формулы
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Valo, ГЕНИЙ!!! Вроде пока всё работает отлично!
Пусть в Вашей жизни не будет никаких печалей! И всё у Вас будет хорошо!
 
Опять сбой. Макрос не останавливается когда у Макарова к примеру, стоят даты 1,2,3 а потом 20 марта, он считает это с 1-го по 20 марта. А по идее должен считать с 1 по 3, потом раздельно следующую дату.
 
Добавил предварительную сортировку данных.
Попробуйте.
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Показывает ошибку

'Сортировка диапазона (вначале по Таб, затем по дате)
   With wsMain.Sort.SortFields
       .Clear
      .Add2 Key:=rngMain.Columns(2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
       .Add2 Key:=rngMain.Columns(4), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   End With
 
Add2 Key походу только в новых офисах работает.
Надеюсь этот вариант сработает, иначе я сдаюсь.
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Страницы: 1
Наверх