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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 22:48   #1
kartol
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 34
По умолчанию вычислить сумму чисел, исходя из даты и времени

Всем здравствуйте! Есть лист с данными . Подскажите как вычислить сумму чисел из одного столбца ,исходя из даты и перенести на новый лист с разбитием по дате и времени (с 0.00ч до 8.00ч; с 8.00-до 16.00ч; с 16.00 ч.до 24.00ч)
Вложения
Тип файла: rar 2погр.rar (10.0 Кб, 19 просмотров)

Последний раз редактировалось kartol; 11.12.2011 в 22:50.
kartol вне форума Ответить с цитированием
Старый 12.12.2011, 17:25   #2
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

Например так
Вложения
Тип файла: zip Выбор.zip (7.5 Кб, 22 просмотров)
agregator вне форума Ответить с цитированием
Старый 13.12.2011, 03:00   #3
kartol
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 34
По умолчанию

спасибо! но есть один нюанс - строк может быть N-ое количество(несколько тысяч)
Вложения
Тип файла: rar Книга1.rar (20.1 Кб, 16 просмотров)

Последний раз редактировалось kartol; 13.12.2011 в 03:04.
kartol вне форума Ответить с цитированием
Старый 13.12.2011, 15:17   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Попробуйте этот макрос.имена листов соответствуют примеру
Код:
Sub GO_Count()

Dim shet1, shet2, shet3, shet4
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim F, J
Set Sh1 = Worksheets("2погр")
Set Sh2 = Worksheets("выбор")
With Sh1
  F = .Range("F2:F" & .Range("$J$" & .Rows.Count).End(xlUp).Row)
  J = .Range("J2:J" & .Range("$J$" & .Rows.Count).End(xlUp).Row)
End With
shet4 = 1

Application.ScreenUpdating = False

Dim Y As Integer
Y = Day(J(1, 1))
For n = 1 To UBound(J)
     X = 3600 * Hour(J(n, 1)) + 60 * Minute(J(n, 1)) + Second(J(n, 1))
If Y <> Day(J(n, 1)) Then
With Sh2
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet3
    .Cells(shet4, 2) = Format(J(n, 1), "dd.mm.yyyy") & " 0.00-8.00"
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet2
    .Cells(shet4, 2) = Format(J(n, 1), "dd.mm.yyyy") & " 8.00-16.00"
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet1
    .Cells(shet4, 2) = Format(J(n, 1), "dd.mm.yyyy") & " 16.00-23.59.59"
End With
shet1 = 0: shet2 = 0: shet3 = 0
End If
   Y = Day(J(n, 1))
Select Case X
Case Is > 57599
       shet1 = shet1 + F(n, 1)
Case 28800 To 57599
       shet2 = shet2 + F(n, 1)
Case Is < 28800
       shet3 = shet3 + F(n, 1)
End Select
Next

Application.ScreenUpdating = True
End Sub
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 13.12.2011 в 15:52.
doober вне форума Ответить с цитированием
Старый 13.12.2011, 15:27   #5
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

Вот, если будет 65536 строк
Вложения
Тип файла: zip Выбор2.zip (28.4 Кб, 18 просмотров)

Последний раз редактировалось agregator; 14.12.2011 в 14:44.
agregator вне форума Ответить с цитированием
Старый 23.12.2011, 13:26   #6
kartol
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 34
По умолчанию

Спасибо всем. Doober такой вопрос по макросу _ при выборе- вместо 1декабря ставится дата 2 декабря,хотя считывает за 1 число. и так до конца на день вперёд

Последний раз редактировалось kartol; 23.12.2011 в 13:35.
kartol вне форума Ответить с цитированием
Старый 23.12.2011, 15:46   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Вот так будет правильно
Код:
Sub GO_Count()

Dim shet1, shet2, shet3, shet4
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim F, J
Set Sh1 = Worksheets("2погр")
Set Sh2 = Worksheets("выбор")

With Sh1
  F = .Range("F2:F" & .Range("$J$" & .Rows.Count).End(xlUp).Row)
  J = .Range("J2:J" & .Range("$J$" & .Rows.Count).End(xlUp).Row)
End With
shet4 = 1

Application.ScreenUpdating = False

Dim Y As Integer
Y = Day(J(1, 1))
For n = 1 To UBound(J)
     X = 3600 * Hour(J(n, 1)) + 60 * Minute(J(n, 1)) + Second(J(n, 1))
If Y <> Day(J(n, 1)) Then
With Sh2
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet3
    .Cells(shet4, 2) = Format(J(n - 1, 1), "dd.mm.yyyy") & " 0.00-8.00"
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet2
    .Cells(shet4, 2) = Format(J(n - 1, 1), "dd.mm.yyyy") & " 8.00-16.00"
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet1
    .Cells(shet4, 2) = Format(J(n - 1, 1), "dd.mm.yyyy") & " 16.00-23.59.59"
End With
shet1 = 0: shet2 = 0: shet3 = 0
End If
   Y = Day(J(n, 1))
Select Case X
Case Is > 57599
       shet1 = shet1 + F(n, 1)
Case 28800 To 57599
       shet2 = shet2 + F(n, 1)
Case Is < 28800
       shet3 = shet3 + F(n, 1)
End Select
Next
With Sh2
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet3
    .Cells(shet4, 2) = Format(J(n - 1, 1), "dd.mm.yyyy") & " 0.00-8.00"
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet2
    .Cells(shet4, 2) = Format(J(n - 1, 1), "dd.mm.yyyy") & " 8.00-16.00"
shet4 = shet4 + 1
    .Cells(shet4, 1) = shet1
    .Cells(shet4, 2) = Format(J(n - 1, 1), "dd.mm.yyyy") & " 16.00-23.59.59"
End With
Application.ScreenUpdating = True
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить сумму квадратов простых чисел (PascalABC)! Amid1990 Помощь студентам 5 04.07.2011 14:08
Вычислить сумму неотрицательных эл-ов массива чисел , содержащих n эл-ов. Di_nusya Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2011 19:25
Вычислить сумму чисел. ilnar51 Паскаль, Turbo Pascal, PascalABC.NET 6 13.03.2011 14:29
Вычислить сумму всех простых чисел denicko Помощь студентам 0 27.10.2010 20:46
Вычислить сумму всех четных чисел в векторе malova Microsoft Office Excel 2 31.05.2010 09:09