Дата и время
Диапазон дат, которые доступны в Excel. Мы имеем возможность работать с датами от 1 января 100 года до 31 декабря 9999 года. Если указать только две цифры года, то дата воспринимается в диапазоне от 1930 до 2029 года. Однако этот диапазон можно менять в настройках Windows. При описании переменных, в которых будет храниться дата или время, используется ключевое слово Date. Dim MyDate As Date, MyTime As Date При этом в переменной описанной типом Date, может храниться как дата, так и время, а так же дата и время сразу.
В программах даты и время следует заключать в знаки номера (#). Например, #1 Jan 2010# #11/21/09 17:00#. Обратите внимание, что месяц в датах может обозначаться как словом (английским), так и числом. При обозначении месяца числом, разделителем между числом, месяцем и годом является слеш "/". Дата в этом случае записывается в формате месяц/число/год. При выводе даты на экран она будет отображаться в том формате, который установлен в Windows. Так в русской версии чаще всего число/месяц/год.
При записи и отображении времени разделителем между часами, минутами и секундами является двоеточие ":". Например, #10:07:27# Если в одну переменную необходимо записать и время и дату сразу, то это будет записано следующим образом: Dim Z As Date Z=#2/3/03 12:30:08# Такая запись означает, что в переменную z будет записано 3 февраля 2003 года, 12 часов, 30 минут, 08 секунд.
Хранение дат и времени в Excel Переменная типа Date хранится как вещественное число как положительное, так и отрицательное. Число 0 означает полночь 1 января 1900 года. Целая часть числа означает, сколько дней прошло от этой даты (если число положительное, то вперед, если отрицательное, то назад). Так число 2 будет представлять 3 января 1900 года. Дробная часть говорит о том, какая часть суток прошла, и при отображении выражается в часах, минутах и секундах. Например, #01/03/ :00:00# будет храниться как 2.25 (6 часов составляют 0.25 суток).
Исходя из сказанного, можно понять, как будут работать с датами операции сложения и вычитания (говоря даты, мы подразумеваем даты и время одновременно). При вычитании из одной даты другой мы получаем вещественное число, которое означает, сколько суток (целых или дробных) прошло от первой даты до второй. Например #01/05/2003# - #01/02/2003# даст в результате 3 #01/05/2003# - #01/02/ :00:00# даст в результате 2.75 #01/02/ :00:00# - #01/05/2003# даст в результате -2.75
Если к дате прибавить (или вычесть) вещественное число, то получится дата, отстоящая на указанное число суток (целое или дробное). Например #01/02/2003# + 3 даст в результате #01/05/2003# #01/05/2003# даст в результате #01/02/ :00:00# Сложение двух дат не имеет практического смысла, но не вызывает ошибки. В данном случае каждая дата рассматривается как вещественное число, а их сумма интерпретируется как новая дата.
Однако для времени и сложение, и вычитание являются очень удобными инструментами. Например tm = #3:05:00# - #2:06:00# В переменной tm будет 00:59:00, т.е. при помощи этого механизма мы легко можем посчитать, сколько времени прошло с некоторого момента до указанного или сколько будет времени через заданный интервал времени.
Поскольку VBA сам преобразует тип данных, то имеется возможность присваивать строкам даты и наоборот. Однако надо иметь в виду, что формат записи может быть различен. Например, для русской версии Windows Dim S As String S=#01/23/2003# MsgBox S может вывести на экран 23/01/2003 или (в зависимости от настроек Windows)
Функции для работы с датой и временем Date возвращает текущую дату Time возвращает текущее время Now возвращает текущую дату и время Timer возвращает число секунд прошедших с полуночи текущего дня. Hour(tim), Minute(tim), Second(tim) возвращают соответственно число часов, минут, секунд от tim. Tim в данном случае должно быть типа Date или String. Year(tim), Month(tim), Day(tim) возвращают соответственно год, месяц, число от даты tim. Tim в данном случае должно быть типа Date или String.
Функции для работы с датой и временем WeekDay(tim) возвращает номер дня недели (1 – воскресенье, 2 – понедельник, 3 – вторник и т.д.). Tim в данном случае должно быть типа Date или String. Если использовать второй аргумент, то можно изменить начало недели, например WeekDay(tim,2) изменяет начало недели на понедельник, т.е. номер 1 будет соответствовать понедельнику, 2 – вторнику и т.д. WeekDayName(k) возвращает название дня недели в зависимости от величины k (1 – понедельник, 2 – вторник и т.д.). Название выводится на том языке, который установлен в настройках Windows. MonthName(k) возвращает название месяца в зависимости от величины k (1 – январь, 2 – февраль и т.д.). Название выводится на том языке, который установлен в настройках Windows.
Задачи Задание 1. В столбце A записаны даты. Вывести в столбце B дни недели соответствующие датам из столбца A, а в столбце C названия месяцев. Задание 2. С клавиатуры вводится дата. Вывести на экран, сколько полных лет, месяцев и дней отделяет введенную дату от текущего момента времени. Задание 3. Выделить с помощью мышки некоторый диапазон ячеек. Все ячейки, в которых записаны даты в текущем году, закрасить красным цветом.