Страницы: 1
RSS
Сложить записи по сотрудникам для подсчета количества отработанных часов, консолидация времени по дате и по сотрудникам
 
Всем, привет!

Ну никак не получается схлопнуть данные по сотрудникам, чтобы подставить в шаблон макроса и посчитать рабочее время по каждому челу... Хелп ми плиз!

Источник дает данные построчно, поэтому пришлось переводить строки в столбцы для дальнейшей заливки в макрос:
Код
=ЕСЛИ(B2="Exit";0;ИНДЕКС($D$2:$D$14482;ПОИСКПОЗ("Entry";$B$2:$B$14482;0)))
=ЕСЛИ(B2="Entry";0;ИНДЕКС(D2:D14482;ПОИСКПОЗ("Entry";$B$2:$B$14482;0)))

В итоге у меня появились пустые/нулевые ячейки, в шаблоне их нет...Макрос отрабатывает только если записи не разряжены, как у меня...

Необходимо из примера во вложении получить таблицу в виде:
СотрудникПодразделениеДолжностьХарактер работы01.10.2018 Понедельник02.10.2018   Вторник03.10.2018 Среда04.10.2018   Четверг05.10.2018   Пятница
1:357:490:000:000:00
Пробовал схлопывать по суммеслимн:=СУММЕСЛИМН('Вход/выход'!$C$2:$C$14482;'Вход/выход'!$A$2:$A$14482;$A2;'Вход/выход'!$B$2:$B$14482;$B2);
Пробовал схлопывать по суммпроизв: =СУММПРОИЗВ(('Вход/выход'!$A$2:$A$14482=A2)*('Вход/выход'!$B$2:$B$14482=B2)*'Вход/выход''!$C$2:$C$14482);
Пробовал схлопывать через консолидацию данных

Но все попытки тщетны(((

Макрос для учета рабочего времени:
http://www.cyberforum.ru/vba/thread1847285.html#post9757031
Код
Sub test()
 
Set spis = ThisWorkbook.Worksheets(1)
Set otch = ThisWorkbook.Worksheets(2)
 
 
spis.Cells.Replace " (*)", ""
i = 4
 
On Error Resume Next Do While otch.Cells(i, 2) <> ""
    j = 3
    Do While otch.Cells(3, j) <> "ÑóììГ* Г§Г* Г*åäåëþ"
        r = ""
        
        r = spis.Range(spis.Cells(8, 1), spis.Cells(65536, 1)).Find(otch.Cells(3, j)).Row
        If r <> "" Then
            r2 = r
            If spis.Cells(r2 + 1, 1) Like "" And spis.Cells(r2 + 1, 4) <> "" Then spis.Cells(r2 + 1, 1) = spis.Cells(r2, 1)
            
            spis.Range("F" & r2).FormulaR1C1 = "=RC[-1]-RC[-2]"
            
            Do While spis.Cells(r2 + 1, 1) Like otch.Cells(3, j)
                r2 = r2 + 1
                If spis.Cells(r2 + 1, 1) Like "" And spis.Cells(r2 + 1, 4) <> "" Then spis.Cells(r2 + 1, 1) = spis.Cells(r2, 1)
                spis.Range("F" & r2).FormulaR1C1 = "=RC[-1]-RC[-2]"
            Loop
            sotr = ""
            sotr = spis.Range(spis.Cells(r - 1, 2), spis.Cells(r2, 2)).Find(what:=otch.Cells(i, 2)).Row
            Tot = sotr
            If sotr <> "" Then
                If spis.Cells(sotr + 1, 2) Like "" And spis.Cells(sotr + 1, 4) <> "" Then spis.Cells(sotr + 1, 2) = spis.Cells(sotr, 2)
                Do While spis.Cells(sotr + 1, 2) Like otch.Cells(i, 2)
                    sotr = sotr + 1
                    If spis.Cells(sotr + 1, 2) Like "" And spis.Cells(sotr + 1, 4) <> "" Then spis.Cells(sotr + 1, 2) = spis.Cells(sotr, 2)
                Loop
                spis.Range("G" & Tot).FormulaR1C1 = "=SUM(RC[-1]:R[" & sotr - Tot & "]C[-1])"
            End If
            otch.Cells(i, j) = spis.Cells(Tot, 7).Value
            otch.Range(otch.Cells(i, j), otch.Cells(i, j)).NumberFormat = "hh:mm"
            spis.Cells(Tot, 7) = ""
        End If
    j = j + 1
    Loop
    otch.Range(otch.Cells(i, j), otch.Cells(i, j)).NumberFormat = "d hh:mm"
    otch.Range(otch.Cells(i, j), otch.Cells(i, j)).FormulaR1C1 = "=SUM(RC[-1]:RC[-" & j - 3 & "])"
    
    s = Split(otch.Cells(i, j).Text, " ")
    s2 = Split(s(1), ":")
    
    otch.Range(otch.Cells(i, j), otch.Cells(i, j)).NumberFormat = "@"
    Tot = CStr(s(0) * 24 + s2(0)) & ":" & s2(1)
    otch.Range(otch.Cells(i, j), otch.Cells(i, j)).NumberFormat = "@"
    otch.Cells(i, j) = Tot
    
i = i + 1
Loop
 
spis.Columns(6).Delete
On Error GoTo 0
 
End Sub
Изменено: direget - 13.11.2018 10:27:20
 
Цитата
direget написал:
учет рабочего времени
Ну что за название?  Вы нам сообщаете, что учёт рабочего времени ведётся? Мы и так это знаем. Проблема в чём?
 
Юрий, проблема в том, что необходимо сложить записи по сотрудникам для подсчета количества отработанных часов...К сожалению, мои способы решить этот вопрос ни к чему не привели!(
Поэтому обращаюсь к вам за помощью! Может кто-то знает действенные способы решить эту задачу или может кто-то найдет в чем проблема?!

Буду признателен за помощь!
 
direget, если Вы в примере показали как есть, то покажите как должно стать (сделайте вручную).

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, я же выше привел таблицу, в каком виде это должно быть... Т.е. необходимо из данных учетных систем получить отработанное время, но основная сложность заключается в том, что данные присылают построчно и количество входов не равно количеству выходов...Поэтому, как консолидировать выгрузку для подсчета отработанного времени я не знаю.(

Пример:

Сотрудник        01.10.2018   02.10.2018   03.10.2018

Иванов А.А.     5:30              9:00              8:45
 
direget, я же имел ввиду файл.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
direget написал:и количество входов не равно количеству выходов...
Так это вам самим на месте с этим надо разобраться и принять удовлетворяющее вас решение. Здесь вам планетяне не советчики. Да и в случаях многократного входа/выхода за день/сутки ясность нужна. Думаем - решаем - предлагаем... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Цитата
direget написал:
количество входов не равно количеству выходов
И куда вы деваете лишние входы?
или учитывается первый вход и последний выход?
а если вход есть, выхода на этот день больше нет?
 
Просто же:  так нравится место работы, что решил там и жить )

direget, Вы, видимо, до сих пор в неведении. Вот здесь и о примере, и о названии темы
 
Дело в том, что входы могут быть лишними при учебной пожарной тревоге или некорректной работе пропуска! Будем наверно учет делать через SQL, так как в Excel для меня возникли сложности.
Брать нужно будет либо минимальный вход и максимальных выход, либо другие варианты попробовать....
Изменено: direget - 13.11.2018 14:45:35
 
с двумя дополнительными столбцами, если устроит? :) и если правильно понял
 
Kalmar, огромное спасибо за помощь! Интересное решение у вас получилось, попробую помучиться))))!
Страницы: 1
Наверх