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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2011, 22:08   #1
Alexey_Panda
 
Регистрация: 11.09.2011
Сообщений: 3
По умолчанию VBA Операции с датой и временем

Пара задачек..help

1. Научный сотрудник забыл точную дату конференции, на которой ему необходимо присутствовать, но помнит, что она должна начаться в четверг в период с 1 по 8 октября 2004 года. Помогите ему определить точную дату начала конференции.

Не знаю как перебрать все дни из этого диапазона..


2. В одной из ячеек укажите некоторое время и определите длительность отрезка вре-мени (в виде n часов, m минут, s секунд), оставшегося до конца дня.

PHP код:
Sub lab_6_2()
Dim Time1 As DateTime2 As Date
Time1 
CDate(Range("c14"))  //некоторое время 
Time2 CDate(Range("c15")) // конец дня
If Hour(Time2) > Hour(Time1Then
    Range
("c16") = Hour(Time2) - Hour(Time1)
Else
    
Range("c16") = Hour(Time1) - Hour(Time2)
End If
End Sub 
как посчитать минуты и секунды?
Alexey_Panda вне форума Ответить с цитированием
Старый 11.09.2011, 22:26   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub lab_6_2()
    Dim Time1 As Date, Time2 As Date
    Time1 = CDate(Range("c14"))  'некоторое время в ячейке (записал в ячейку 16:15:49 )
    Time2 = 1 ' конец дня
    
    РазницаВоВремени = Format(Time2 - Time1, "H часов N минут S секунд")
    MsgBox РазницаВоВремени ' результат: 7 часов 44 минут 11 секунд
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 11.09.2011, 22:36   #3
Alexey_Panda
 
Регистрация: 11.09.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Код:
Sub lab_6_2()
    Dim Time1 As Date, Time2 As Date
    Time1 = CDate(Range("c14"))  'некоторое время в ячейке (записал в ячейку 16:15:49 )
    Time2 = 1 ' конец дня
    
    РазницаВоВремени = Format(Time2 - Time1, "H часов N минут S секунд")
    MsgBox РазницаВоВремени ' результат: 7 часов 44 минут 11 секунд
End Sub
огромное спасибо.
А первая задача как решается?
Alexey_Panda вне форума Ответить с цитированием
Старый 11.09.2011, 22:39   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

6_1
Код:
Dim Skleroz As Date
Skleroz = CDate("1.10.2004")
Skleroz = IIf(Weekday(Skleroz, vbMonday) = 1, Skleroz, Skleroz + 8 - Weekday(Skleroz, vbMonday))
Не правильно прочитал задание.
Сделал для понедельника

Для четверга будет так
Код:
 Dim Skleroz As Date
Skleroz = CDate("1.10.2004")
Skleroz = IIf(Weekday(Skleroz, vbThursday) = 1, Skleroz, Skleroz + 8 - Weekday(Skleroz, vbThursday))
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 11.09.2011 в 22:56.
doober вне форума Ответить с цитированием
Старый 11.09.2011, 22:56   #5
Alexey_Panda
 
Регистрация: 11.09.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
6_1
Код:
Dim Skleroz As Date
Skleroz = CDate("1.10.2004")
Skleroz = IIf(Weekday(Skleroz, vbMonday) = 1, Skleroz, Skleroz + 8 - Weekday(Skleroz, vbMonday))
Минутку,переделаю.
Не правильно прочитал задание.
Сделал для понедельника
Код:
Sub lab_6_1()
Dim Skleroz As Date
Skleroz = CDate("1.10.2004")
Skleroz = IIf(Weekday(Skleroz, vbThursday), Skleroz, Skleroz + 8 - Weekday(Skleroz, vbThursday))
Range("b4") = Skleroz
End Sub
Разве не так тогда(выводит то что надо)? можно пару пояснений насчет IIF.. немного не понял как он тут используется
Alexey_Panda вне форума Ответить с цитированием
Старый 11.09.2011, 23:02   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Iif (функция) - возвращает одно из двух значений в зависимости от значения выражения
что тут непонятного.Если четверг,то дату не трогаем.Если нет,то добавляем нужное количество дней
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 12.09.2011, 01:24   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
CDate("1.10.2004")
вместо CDate я бы рекомендовал использовать
Код:
Skleroz  = DateSerial(2004, 10, 1)
CDate зависит от региональных настроек windows...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с датой-временем SwiP Общие вопросы Delphi 12 28.04.2011 08:01
Работа со временем и датой Peenuts Общие вопросы C/C++ 3 10.01.2011 16:49
Проблема с датой и временем Amen PHP 8 17.10.2009 22:11
Манипуляции с датой и временем. Tatyana БД в Delphi 16 29.06.2007 19:19