Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/30: Рейтинг темы: голосов - 30, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 05.02.2013
Сообщений: 150
1

Как рассчитать время затраченное на обработку заявки

17.12.2013, 13:57. Показов 5858. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго дня.

Подскажите как рассчитать время затраченное на обработку заявки.

Исходные данные выглядят в след. формате


08.12.2013 18:1509.12.2013 10:44 989
Последнее поле это затраченное время в минутах.

Но оно не логично, потому что раб. день с 9:00 до 18:00.
И эта заявка пришла уже позже.
Как сделать макрос с пост условием чтобы он не считал время с 18:00 до 9:00 след. дня.
А каждый день брал с 9:00
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2013, 13:57
Ответы с готовыми решениями:

Как посчитать время, затраченное на выполнение
Всем привет. Есть внешняя библиотека к которой обращаемся. Результат выводим в консоль. Как...

Как посчитать время затраченное на выполнение программы?
задание:Тема: Циклы Задания для самостоятельной работы: Задание №1. Написать игру «Угадай...

Как оценить время затраченное на выполнение длительных операций
Всем здравствуйте. Как точно (миллисекунды) и грамотно оценить интервал времени, затраченный на...

Определить время, затраченное на запрос
Есть некая таблица с данными о работниках. SLQ запрос выводит данные об определенных работниках....

15
6 / 6 / 1
Регистрация: 28.09.2013
Сообщений: 52
17.12.2013, 14:54 2
ето постав в начале обработки
Visual Basic
1
2
3
Dim StartTime As Date
Dim EndTime As Date
StartTime = Timer
ето в конце
Visual Basic
1
2
3
Dim Ans As Variant
EndTime = Timer
Ans = MsgBox("время исполнения: " & Format(EndTime - StartTime, "0.000") )
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
17.12.2013, 15:08 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub bb()
    Dim Date1 As Date, Date2 As Date, DateStart  As Date, Minut%
    Date1 = CDate("08.12.2013 18:15")
    Date2 = CDate("09.12.2013 10:44")
    If TimeValue(Date1) > TimeSerial(18, 0, 0) Then
        DateStart = DateValue(Date1) + 1 + TimeSerial(9, 0, 0)
    Else
        DateStart = Date1
    End If
    Minut = DateDiff("n", DateStart, Date2)
    MsgBox Minut
End Sub
2
0 / 0 / 1
Регистрация: 05.02.2013
Сообщений: 150
17.12.2013, 15:09  [ТС] 4
budulaj-lviv, Это понятно... мне не понятен момент с указание не раб часов
0
Заблокирован
17.12.2013, 15:27 5
Поправочка-
Visual Basic
1
2
3
4
5
6
7
    If TimeValue(Date1) > TimeSerial(18, 0, 0) Then
        DateStart = DateValue(Date1) + 1 + TimeSerial(9, 0, 0)
    elseIf TimeValue(Date1) < TimeSerial(9, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(9, 0, 0)
    Else
        DateStart = Date1
    End If
0
0 / 0 / 1
Регистрация: 05.02.2013
Сообщений: 150
17.12.2013, 15:30  [ТС] 6
Цитата Сообщение от KoGG Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub bb()
    Dim Date1 As Date, Date2 As Date, DateStart  As Date, Minut%
    Date1 = CDate("08.12.2013 18:15")
    Date2 = CDate("09.12.2013 10:44")
    If TimeValue(Date1) > TimeSerial(18, 0, 0) Then
        DateStart = DateValue(Date1) + 1 + TimeSerial(9, 0, 0)
    Else
        DateStart = Date1
    End If
    Minut = DateDiff("n", DateStart, Date2)
    MsgBox Minut
End Sub
А можно чтобы он перебрал данные для Date1 = CDate("B") и Date2 = CDate("С")
озникла ошибка с номером 13, "Type mismatch когда сделал так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub bb()
    Dim Date1 As Date, Date2 As Date, DateStart  As Date, Minut%
    
    For i = 1 To 2
    With ThisWorkbook.Sheets("Лист1")
    Date1 = CDate("B")
    Date2 = CDate("C")
    If TimeValue(Date1) > TimeSerial(18, 0, 0) Then
        DateStart = DateValue(Date1) + 1 + TimeSerial(9, 0, 0)
    Else
        DateStart = Date1
    End If
    Minut = DateDiff("n", DateStart, Date2)
    MsgBox Minut
    
    End With
    Next i
End Sub
0
Заблокирован
17.12.2013, 15:38 7
Цитата Сообщение от IIPAIIOP Посмотреть сообщение
Date1 = CDate("B")
меняйте на
Visual Basic
1
Date1 = CDate(.range("B1"))
ибо CDate не может расшифровать литерал "B"
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
17.12.2013, 15:42 8
Можно, но думаю не нужно, потому что можно вызвать эту функцию с листа.
Более универсальный случай , в том числе с разницей в несколько дней.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Function RabocheeVremya(Date1, Date2)
    Dim DateStart  As Date, Minut%, Nochi%
    Nochi = DateValue(Date2) - DateValue(Date1)
    If TimeValue(Date1) > TimeSerial(18, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(18, 0, 0)
    ElseIf TimeValue(Date1) < TimeSerial(9, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(9, 0, 0)
    Else
        DateStart = Date1
    End If
    Minut = DateDiff("n", DateStart, Date2) - Nochi * 900  ' 15 часов нераб.
    RabocheeVremya = Minut
End Function
0
Апострофф
17.12.2013, 15:45
  #9

Не по теме:

А ещё бы выходные исключить:scratch:

0
0 / 0 / 1
Регистрация: 05.02.2013
Сообщений: 150
17.12.2013, 15:49  [ТС] 10
Цитата Сообщение от KoGG Посмотреть сообщение
Можно, но думаю не нужно, потому что можно вызвать эту функцию с листа.
Более универсальный случай , в том числе с разницей в несколько дней.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Function RabocheeVremya(Date1, Date2)
    Dim DateStart  As Date, Minut%, Nochi%
    Nochi = DateValue(Date2) - DateValue(Date1)
    If TimeValue(Date1) > TimeSerial(18, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(18, 0, 0)
    ElseIf TimeValue(Date1) < TimeSerial(9, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(9, 0, 0)
    Else
        DateStart = Date1
    End If
    Minut = DateDiff("n", DateStart, Date2) - Nochi * 900  ' 15 часов нераб.
    RabocheeVremya = Minut
End Function
Функция класс!!!!!!!!!)))
вот что заметил
10.12.2013 23:0911.12.2013 8:14-46
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
17.12.2013, 15:59 11
Разумеется. Нет дополнительной защиты от дурака.
Не рассчитано, что заявка закрывается в нерабочее время.

Добавлено через 7 минут
На случай последнего примера времени:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function RabocheeVremya(Date1, ByVal Date2)
    Dim DateStart  As Date,  Nochi%
    Nochi = DateValue(Date2) - DateValue(Date1)
    If TimeValue(Date1) > TimeSerial(18, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(18, 0, 0)
    ElseIf TimeValue(Date1) < TimeSerial(9, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(9, 0, 0)
    Else
        DateStart = Date1
    End If
    If TimeValue(Date2) > TimeSerial(18, 0, 0) Then
        Date2 = DateValue(Date2) + TimeSerial(18, 0, 0)
    ElseIf TimeValue(Date2) < TimeSerial(9, 0, 0) Then
        Date2 = DateValue(Date2) + TimeSerial(9, 0, 0)
    End If
    RabocheeVremya = DateDiff("n", DateStart, Date2) - Nochi * 900  ' 15 часов нераб.
End Function
1
0 / 0 / 1
Регистрация: 05.02.2013
Сообщений: 150
24.12.2013, 13:31  [ТС] 12
KoGG, Еще один вопрос столкнулся с таким казусом, как выходные дни : Суббота, воскресенье.

Как их вычитать из текущей формулы ?
0
Апострофф
24.12.2013, 13:52
  #13

Не по теме:

KoGG, и праздники (желательно с учётом переносов правительственными постановлениями дней отдыха):)

0
0 / 0 / 1
Регистрация: 05.02.2013
Сообщений: 150
24.12.2013, 14:02  [ТС] 14
Ну зачем праздники...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function RabocheeVremya(Date1, ByVal Date2)
    Dim DateStart  As Date, Nochi%
   ' Dim IntKolDney$
'IntKolDney(1, 1) = Application.WorksheetFunction.NetworkDays(DtmDataDol, DtmDataVozvr)
    Nochi = DateValue(Date2) - DateValue(Date1)
    If TimeValue(Date1) > TimeSerial(18, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(18, 0, 0)
    ElseIf TimeValue(Date1) < TimeSerial(8, 0, 0) Then
        DateStart = DateValue(Date1) + TimeSerial(8, 0, 0)
    Else
        DateStart = Date1
    End If
    If TimeValue(Date2) > TimeSerial(18, 0, 0) Then
        Date2 = DateValue(Date2) + TimeSerial(18, 0, 0)
    ElseIf TimeValue(Date2) < TimeSerial(8, 0, 0) Then
        Date2 = DateValue(Date2) + TimeSerial(8, 0, 0)
    End If
    RabocheeVremya = DateDiff("n", DateStart, Date2) - Nochi * 840 - Application.WorksheetFunction.NetworkDays(Date1, Date2) ' 14 часов нераб.
End Function
Сделал так... Но... не считается...
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
25.12.2013, 09:51 15
Лучший ответ Сообщение было отмечено как решение

Решение

Новая функция исключает выходные и праздники.
Нерабочие считаются аналогично функции листа ЧИСТРАБДНИ.
Дополнительные праздники, неизвестные системе, должны вводиться в виде ссылки на диапазон с датами, либо в виде массива переменных типа дата.
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
Function RabocheeVremya(ByVal StartDate, ByVal EndDate, ParamArray Holidays())
    Dim Minut&, Nochi&, NeRabochie&, Rabochie&
    Dim StartDateIsNerab As Boolean, EndDateIsNerab As Boolean
    If UBound(Holidays, 1) >= LBound(Holidays, 1) Then
        Rabochie = Application.WorksheetFunction.NetworkDays(StartDate, EndDate, Holidays())
        StartDateIsNerab = (Application.WorksheetFunction.NetworkDays(StartDate, StartDate, Holidays()) = 0)
        EndDateIsNerab = (Application.WorksheetFunction.NetworkDays(EndDate, EndDate, Holidays()) = 0)
    Else
        Rabochie = Application.WorksheetFunction.NetworkDays(StartDate, EndDate)
        StartDateIsNerab = (Application.WorksheetFunction.NetworkDays(StartDate, StartDate) = 0)
        EndDateIsNerab = (Application.WorksheetFunction.NetworkDays(EndDate, EndDate) = 0)
    End If
    If Rabochie = 0 Then
        RabocheeVremya = 0
        Exit Function
    End If
    Nochi = DateValue(EndDate) - DateValue(StartDate)
    NeRabochie = Nochi + 1 - Rabochie
    If StartDateIsNerab Then
        StartDate = DateValue(StartDate) + TimeSerial(18, 0, 0)
        NeRabochie = NeRabochie - 1
    Else
        If TimeValue(StartDate) > TimeSerial(18, 0, 0) Then
            StartDate = DateValue(StartDate) + TimeSerial(18, 0, 0)
        ElseIf TimeValue(StartDate) < TimeSerial(9, 0, 0) Then
            StartDate = DateValue(StartDate) + TimeSerial(9, 0, 0)
        End If
    End If
    If EndDateIsNerab Then
        If DateValue(EndDate) > DateValue(StartDate) Then
            EndDate = DateValue(EndDate) + TimeSerial(9, 0, 0)
        Else
            EndDate = DateValue(StartDate) + TimeSerial(18, 0, 0)
        End If
        NeRabochie = NeRabochie - 1
    Else
        If TimeValue(EndDate) > TimeSerial(18, 0, 0) Then
            EndDate = DateValue(EndDate) + TimeSerial(18, 0, 0)
        ElseIf TimeValue(EndDate) < TimeSerial(9, 0, 0) Then
            EndDate = DateValue(EndDate) + TimeSerial(9, 0, 0)
        End If
    End If
    RabocheeVremya = RabocheeVremya - NeRabochie * 9 - Nochi * 15 '9 час. в нерабочие дни, 15 часов раб. ночей в любые дни
    ' Либо в часах:
    'RabocheeVremya = RabocheeVremya + DateDiff("h", StartDate, EndDate) ' в часах
    ' Либо в минутах
    RabocheeVremya = RabocheeVremya * 60 + DateDiff("n", StartDate, EndDate) ' в минутах
End Function
Надеюсь, что не возникнет необходимость вычитать время обеда по скользящему графику.
3
0 / 0 / 1
Регистрация: 05.02.2013
Сообщений: 150
25.12.2013, 11:06  [ТС] 16
KoGG, ЭТО ГРАНДИОЗНО!!! БЛАГОДАРЮ!!!
0
25.12.2013, 11:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2013, 11:06
Помогаю со студенческими работами здесь

Время затраченное на нажатие клавиши
Нужно определить какое время была нажата определённая клавиша( т.е затраченное время на нажатие...

Время затраченное на выполнения события(ий)
Есть ли функция для подсчета времени, затраченного на выполнение действй в 1 или нескольких...

Время затраченное на выполнение любой операции
Доброго времени суток. Подскажите пожалуйста как мне получить время затраченное на вычисление,...

Количество перестановок и время затраченное на сортировку
Количество перестановок и время затраченное на сортировку.


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

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