Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вычисление количества занятых тел.линий в excel / 19 сообщений из 19, страница 1 из 1
24.12.2009, 15:33
    #36384789
MaxBod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
Здравствуйте
Есть данные времени телефонных разговоров в excel из двух столбцов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 Начало	                    Время
 2009 - 11 - 02   09 : 15 	 00 : 01 : 24 
 2009 - 11 - 02   09 : 41 	 00 : 00 : 40 
 2009 - 11 - 02   09 : 42 	 00 : 00 : 16 
 2009 - 11 - 02   09 : 43 	 00 : 00 : 26 
 2009 - 11 - 02   09 : 43 	 00 : 02 : 56 
 2009 - 11 - 02   09 : 47 	 00 : 03 : 38 
 2009 - 11 - 02   09 : 56 	 00 : 00 : 20 
 2009 - 11 - 02   09 : 55 	 00 : 02 : 04 
 2009 - 11 - 02   09 : 58 	 00 : 02 : 18 
 2009 - 11 - 02   09 : 56 	 00 : 09 : 10 
 2009 - 11 - 02   10 : 29 	 00 : 01 : 56 
И таких данных 1500
Нужно каким-то образом определить сколько телефонных линий было занято в каждой сторке
т.е. на выходе должно получиться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 Начало	                    Время
 2009 - 11 - 02   09 : 15 	 00 : 01 : 24 	 1 
 2009 - 11 - 02   09 : 41 	 00 : 00 : 40 	 1 
 2009 - 11 - 02   09 : 42 	 00 : 00 : 16 	 1 
 2009 - 11 - 02   09 : 43 	 00 : 00 : 26 	 1 
 2009 - 11 - 02   09 : 43 	 00 : 02 : 56 	 2 
 2009 - 11 - 02   09 : 47 	 00 : 03 : 38 	 1 
 2009 - 11 - 02   09 : 56 	 00 : 00 : 20 	 1 
 2009 - 11 - 02   09 : 55 	 00 : 02 : 04 	 2 
 2009 - 11 - 02   09 : 58 	 00 : 02 : 18 	 1 
 2009 - 11 - 02   09 : 56 	 00 : 09 : 10 	 1 
 2009 - 11 - 02   10 : 29 	 00 : 01 : 56 	 1 
Не могу сообразить, как это сделать....
...
Рейтинг: 0 / 0
24.12.2009, 15:46
    #36384832
_Boroda_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
MaxBod,

А почему в первой 09:56 стоит 1, когда на нее накладывается лежащая ниже 09:55? Вообще, какой принцип установки 1, 2
...
Рейтинг: 0 / 0
24.12.2009, 16:15
    #36384915
MaxBod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
Число в третьем столбце - количество занятых телефонных линий, на данный момент
В первый раз все линии свободны - поэтому 1, в следующий одна линия занята поэтому - 2,
если будет занята ещё одна линия - будет 3
...
Рейтинг: 0 / 0
24.12.2009, 16:22
    #36384939
thrashead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
MaxBod, встаёшь на левую верхнюю ячейку и запускаешь макрос.
Проверь.

Dim i, j, x As Integer
Sub z()
i = ActiveCell.Row
Cells(i, ActiveCell.Column + 2).Value2 = 1
i = i + 1
j = i
Do While Cells(i, ActiveCell.Column).Value2 <> ""
j = ActiveCell.Row
x = 1
Do While j < i
If (Cells(j, ActiveCell.Column).Value2 <= Cells(i, ActiveCell.Column).Value2) And (Cells(j, ActiveCell.Column).Value2 + Cells(j, ActiveCell.Column + 1).Value2 >= Cells(i, ActiveCell.Column).Value2) Then
x = x + 1
End If
Cells(i, ActiveCell.Column + 2).Value2 = x
j = j + 1
Loop
i = i + 1
Loop
End Sub
...
Рейтинг: 0 / 0
24.12.2009, 16:33
    #36384978
_Boroda_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
MaxBod,

В С2 пишем формулу массива =СУММ(--($A$2:$A2+$B$2:$B2>=A2)) (вводится через контрл шифт ентер) и протягиваем вниз
...
Рейтинг: 0 / 0
24.12.2009, 16:36
    #36384984
thrashead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
_Boroda_,
протестировал - что-то не то...
...
Рейтинг: 0 / 0
24.12.2009, 16:40
    #36384990
MaxBod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
спасибо
...
Рейтинг: 0 / 0
24.12.2009, 16:45
    #36385006
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
_Boroda_MaxBod,

В С2 пишем формулу массива =СУММ(--($A$2:$A2+$B$2:$B2>=A2)) (вводится через контрл шифт ентер) и протягиваем внизПротетировал. работает.
Хотелось бы только для общего развития узнать, что означают две тире в коде.
...
Рейтинг: 0 / 0
24.12.2009, 16:52
    #36385026
thrashead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
Djon Player, работать-то работает, только результат - правильный или нет?
Про два тире и мне интересно.
...
Рейтинг: 0 / 0
24.12.2009, 17:08
    #36385071
_Boroda_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
Про два тире
$A$2:$A2+$B$2:$B2>=A2дает массив из значений ИСТИНА и ЛОЖЬ. Если мы дважды сменим у каждого знак, то в принципе ничего не изменится, кроме того, что ИСТИНА превратится в 1, а ЛОЖЬ - в 0. Их и складываем.
...
Рейтинг: 0 / 0
24.12.2009, 17:09
    #36385073
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
thrasheadDjon Player, работать-то работает, только результат - правильный или нет?
Про два тире и мне интересно.

Результат такой получился:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 02 . 11 . 2009   9 : 15 		 0 : 01 : 24 	
 02 . 11 . 2009   9 : 41 		 0 : 00 : 40 		 1 
 02 . 11 . 2009   9 : 42 		 0 : 00 : 16 		 1 
 02 . 11 . 2009   9 : 43 		 0 : 00 : 26 		 1 
 02 . 11 . 2009   9 : 43 		 0 : 02 : 56 		 2 
 02 . 11 . 2009   9 : 47 		 0 : 03 : 38 		 1 
 02 . 11 . 2009   9 : 56 		 0 : 00 : 20 		 1 
 02 . 11 . 2009   9 : 55 		 0 : 02 : 04 		 2 
 02 . 11 . 2009   9 : 58 		 0 : 02 : 18 		 1 
 02 . 11 . 2009   9 : 56 		 0 : 09 : 10 		 4 
 02 . 11 . 2009   10 : 29 	 0 : 01 : 56 		 1 

Отличие только в предпоследней строке, 4 вместо 2, а как правильнее виднее автору вопроса.
А в первой строке наверно подразумевается просто ручками поставить 1.
...
Рейтинг: 0 / 0
24.12.2009, 17:15
    #36385083
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
_Boroda_Про два тире
$A$2:$A2+$B$2:$B2>=A2дает массив из значений ИСТИНА и ЛОЖЬ. Если мы дважды сменим у каждого знак, то в принципе ничего не изменится, кроме того, что ИСТИНА превратится в 1, а ЛОЖЬ - в 0. Их и складываем.Только после трёх прочтений комментария до меня дошло, что подразумевалось, после первого и второго прочтения сначала немного неправильные мысли в голову лезли и из-за этого возникали вопросы.
Не знал, что можно дважды менять знак ставя два тире подряд, я бы по старинке скобками их разделял.
Я поначалу подумал, что может это какой-то другой вид записи операции отрицания или вобще, что-то из программирования на С++.
...
Рейтинг: 0 / 0
25.12.2009, 08:20
    #36385812
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
_Boroda_Про два тире
Объяснение от ZVI :)
В Excel есть так называемое неявное преобразование типов. Например, формула ="2" * 3, перемножающая текстовое значение "2" на числовое, автоматически преобразует текстовое значение "2" в числовое 2. Результат будет равен 6, как будто перемножались два числа.
Такое преобразование происходит при любым математических действиях: сложении, вычитании, умножении, возведении в степень и проч., включая смену знака на противоположный. Так -"2" автоматически преобразуется в отрицательное число -2.
А если еще раз сменить знак --"2", то получим число 2.
Если записать в ячейку формулу: =-(-"2") и с помощью меню Сервис - Зависимости формул - Вычислить формулу - Вычислить(2 раза) посмотреть, что с ней сделает Excel, то эволюция будет такой: -(-"2"), потом -(-2), а затем 2.
Важно отметить, что если записать формулу без скобок =--"2", то --"2" преобразуется в число 2 без промежуточных действий (в одно действие).
Аналогичные преобразования будут и при добавлении к текстовому значению нуля ="911"+0, умножении текста на единицу ="02"*1 и прочих математических действиях, не меняющих результата мат. выражения.
Подобные преобразования Excel выполняет не только с текстовыми значениями, но и с логическими:
=ЛОЖЬ+0 или =ЛОЖЬ*1 или =--ЛОЖЬ дает 0, так как логическое значение ЛОЖЬ автоматически преобразуется в 0 (ноль).
=ИСТИНА+0 или =ИСТИНА*1 или =--ИСТИНА дает 1, так как логическое значение ИСТИНА автоматически преобразуется в 1.
Любое математическое действие само по себе запускает механизм преобразования в числа текстовых значений математического выражения:
="3"+"5" выдает числовое значение 8
Собственно, поэтому =СУММПРОИЗВ(--(Выражение1=Условие); --(Выражение2)) можно заменить на =СУММПРОИЗВ((Выражение1=Условие)*(Выражение2)), т.к. математическое действие умножения автоматически запускает механизм преобразования типов множителей, и дополнительных преобразователей типа двойного отрицания уже не требуется.
Ну и, наконец, почему всё же часто используют именно двойное отрицание, а не добавление нуля или умножение на единицу?
Ответ прост: двойное отрицание теоретически выполняется быстрее умножения на 1, сложения с нулем и других математических действий. Экономия времени вычисления небольшая, и по некоторым оценкам составляет примерно 15%
...
Рейтинг: 0 / 0
25.12.2009, 09:54
    #36385924
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
vikttur_Boroda_Про два тире
Объяснение от ZVI :)
Спасибо, познавательно.
Я уже вчера с этим поэкспериментировал, можно хоть 20 минусов подряд поставить, Excel их скушает.
...
Рейтинг: 0 / 0
25.12.2009, 12:57
    #36386322
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
По строкам, где в верхней 56, а ниже 55, можно сделать вывод, что время - не обязательно по нарастающей, поэтому при замене времени на меньшее, например, час ночи - формула выдаст количество всех верхних строк. Т.е. если вариант перемешанных данных имеет место - нужно определять перекрытие массивов.
...
Рейтинг: 0 / 0
25.12.2009, 14:13
    #36386541
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
viktturПо строкам, где в верхней 56, а ниже 55, можно сделать вывод, что время - не обязательно по нарастающей, поэтому при замене времени на меньшее, например, час ночи - формула выдаст количество всех верхних строк. Т.е. если вариант перемешанных данных имеет место - нужно определять перекрытие массивов.
Думаю что правильнее для начала отсортировать данные по возрастанию времени.
Учитывая что вреям начала указанно в минутах, а длительность в том числе и в секундах, то точное время окончания разговора не удастся вычислить. Нужно чтобы во времени начала были и секунды.
...
Рейтинг: 0 / 0
25.12.2009, 16:45
    #36386992
thrashead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
Djon Player,
сортировать необязательно. Мой макрос работает, пусть и не самым эффективным образом, т.к. цикл.
...
Рейтинг: 0 / 0
25.12.2009, 16:51
    #36387008
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
thrasheadDjon Player,
сортировать необязательно. Мой макрос работает, пусть и не самым эффективным образом, т.к. цикл.Для макроса может и не обязательно, не проверял, я имел ввиду для формулы массива.
Хотя может и там не обязательно.
...
Рейтинг: 0 / 0
25.12.2009, 17:36
    #36387125
thrashead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление количества занятых тел.линий в excel
Djon Player, мир-труд-май!
...
CurrentTopic.Close;
end.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вычисление количества занятых тел.линий в excel / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]