Vba excel число дней в месяце

Skip to content

Exceldome

Exceldome

This tutorial shows how to return the number of days in a specific month using an Excel formula or VBA

Example: Return number of days in a month

Return number of days in a month

METHOD 1. Return number of days in a month using Excel formula

EXCEL

This formula uses a combination of Excel DAY and EOMONTH functions to calculate the number of days that are in a specific. The EOMONTH function, with the months criteria of 0, returns the last day for the month, represented as a date. Therefore in this example it would return a date of 31 March 2019. Then the DAY function is used to extract only the day from the selected date, which in this example would be the last day of the month.

METHOD 1. Return number of days in a month using VBA

VBA

Sub Days_in_a_Month()

‘declare a variable
Dim ws As Worksheet

Set ws = Worksheets(«Analysis»)

‘return the number of days in a month
ws.Range(«D5») = Day(Application.WorksheetFunction.EoMonth(ws.Range(«B5»), 0))

End Sub

ADJUSTABLE PARAMETERS
Output Range: Select the output range by changing the cell reference («D5») in the VBA code.
Month: Select the date that represents the month for which you want to return the number of days that form part of that month by changing the cell reference («B5»), in the VBA code, or enter the date with the relevant month in cell («B5»).
Worksheet Selection: Select the worksheet which captures the date that represents the month for which you want to return the number of days that form part of that month by changing the Analysis worksheet name in the VBA code. You can also change the name of this object variable, by changing the name ‘ws’ in the VBA code.

Explanation about the formulas used to extract the number of days in a month

EXPLANATION

EXPLANATION

This tutorial shows how to return the number of days in a specific month through the use of an Excel formula or VBA.

Both the Excel formula and VBA methods make use of the DAY and EOMONTH functions to return the number of days in a specific month.

FORMULA
=DAY(EOMONTH(date,0))

ARGUMENTS
date: The date that represents the month of which you want to return the number of days.

Related Topic Description Related Topic and Description
Return previous month based on current month How to return the previous month based on the current month using Excel and VBA methods
Return next month based on current month How to return the next month based on the current month using Excel and VBA
Difference in months between two dates How to calculate the difference in months between two dates using Excel and VBA methods
Difference in days between two dates How to calculate the difference in days between two dates using Excel and VBA methods
Related Functions Description Related Functions and Description
DAY Function The Excel DAY function returns the day from a specified date

There’s no need to remove 1st of next month from 1st of this month to get the number of days.

Day 0 in the DateSerial function is the last day of the previous month, so this will work:

DaysInMonth = Day(DateSerial(dtTrickle_Year, dtTrickle_Month + 1, 0))

It’s leap-year sensitive to:
Day(DateSerial(2015, 2+ 1, 0)) returns 28.
Day(DateSerial(2016, 2+ 1, 0)) returns 29.

Looking further through your code I’ve made an attempt at coding what I think you’re trying to do.
I’ve had to add some test values and variable declarations to make it work. It removes one of your loops by using the FIND method to go straight to the required cell.

Sub Test()

    Dim DaysInMonth As Long
    Dim DoM_Distro As Long
    Dim dtTrickle_Year As Long
    Dim dtTrickle_Month As Long
    Dim dblLeadsValue As Double
    Dim i As Long
    Dim dtCurrentDay As Date
    Dim rFound As Range

    dtTrickle_Year = 2016
    dtTrickle_Month = 2
    dblLeadsValue = 10

    'Determine DaysinMonth and assign DaysinMonth_Distro value
    DaysInMonth = Day(DateSerial(dtTrickle_Year, dtTrickle_Month + 1, 0))
    DoM_Distro = 1 / DaysInMonth

    'Cycle through each day in the month.
    For i = 1 To DaysInMonth
        dtCurrentDay = DateSerial(dtTrickle_Year, dtTrickle_Month, i)

        'Seach column 2 of the table to find the date value.
        With Range("wsUploadTable").Columns(2)
            'Find the value in the table.
            Set rFound = .Find( _
                What:=dtCurrentDay, _
                After:=.Cells(1, 1), _
                LookIn:=xlValues, _
                LookAt:=xlWhole)

            'Providing a value is found....
            If Not rFound Is Nothing Then
                'Place our result 10 columns to the right of the found cell.
                rFound.Offset(, 10).Value = dblLeadsValue + DoM_Distro
            End If
            Set rFound = Nothing
        End With
    Next i

End Sub

103 / 1 / 0

Регистрация: 13.12.2009

Сообщений: 136

1

Определить количество дней для определенного месяца и определенного года

17.06.2011, 00:59. Показов 40529. Ответов 18


Студворк — интернет-сервис помощи студентам

Составить программу, которая по заданным году и номеру месяца m определяет количество дней в этом месяце.



0



all_angarsk

761 / 268 / 57

Регистрация: 13.12.2009

Сообщений: 1,067

17.06.2011, 07:14

2

Лучший ответ Сообщение было отмечено как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub CommandButton2_Click()
Dim T1 As Date, T2 As Date
Dim Msg, s As String, s1 As String, dni As Integer
s = InputBox("Введите месяц:", "", "2011")
s1 = InputBox("Введите месяц:", "", "05")
s = "1." + s1 + "." + s
T1 = s
T2 = DateAdd("m", 1, s)
dni = DateDiff("d", T1, T2)
MsgBox dni
 
End Sub

вариант



0



103 / 1 / 0

Регистрация: 13.12.2009

Сообщений: 136

17.06.2011, 11:54

 [ТС]

3

а как сделать с помощью оператора выбора???



0



761 / 268 / 57

Регистрация: 13.12.2009

Сообщений: 1,067

17.06.2011, 12:07

4

Цитата
Сообщение от pups
Посмотреть сообщение

а как сделать с помощью оператора выбора???

что такое оператор выбора? я не понимаю….. Наверное на сегодня хватит. людей не понимаю



0



103 / 1 / 0

Регистрация: 13.12.2009

Сообщений: 136

17.06.2011, 12:48

 [ТС]

5

c помощью оператора case



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

17.06.2011, 13:01

6

Выбором хотите перебрать все годы и месяцы?!

А ничё, что VB просто напичкан функциями для дат?



0



103 / 1 / 0

Регистрация: 13.12.2009

Сообщений: 136

17.06.2011, 13:14

 [ТС]

7

да вот не знаю как сделать.. помогите



0



Sasha_Smirnov

5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

17.06.2011, 13:30

8

Сделай как я. Или проще.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub СколькоДней() 'по номеру месяца выдаёт число дней в нём
Const god = 400        'здесь задаём год
Const m = 2        'здесь задаём месяц
Dim k 'количество дней в месяце m года god
 
Select Case m
Case 1, 3, 5, 7, 8, 10, 12: k = 31
Case 4, 6, 9, 11: k = 30
Case 2
    Select Case god
    Case god Mod 4 = 0
    If god Mod 400 = 0 Then k = 28 Else k = 29
    Case Else: k = 28
    End Select
Case Else: MsgBox "Месяца с номером " & m & " не существует.": Exit Sub
End Select
 
MsgBox "В " & god & " году" & " месяц " & MonthName(m) & " содержит " & k & _
IIf(k = 31, " день.", " дней.")
End Sub

Изображения

 



0



103 / 1 / 0

Регистрация: 13.12.2009

Сообщений: 136

17.06.2011, 13:40

 [ТС]

9

ой спасибо, хотя бы так=)) очень выручили=)) спасибо большущее=))



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

17.06.2011, 13:48

10

Увы, я ступил. Там ещё надо для февраля один случай: когда god Mod 100 = 0 (год кратен ста), но при этом не кратен 400. Например, 1900 (в феврале там 28).



0



Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

17.06.2011, 13:52

11

Лучший ответ Сообщение было отмечено как решение

Решение

три строччки кода, наподобии

Visual Basic
1
If IsDate("02/29/" & Год_проверяемой_даты) = True Then Beep 'проверка высокосен ли год, высокосным считаетсся тот год у которого имеется 29 февраля



0



Sasha_Smirnov

5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

18.06.2011, 12:21

12

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
Sub СколькоДней() ' число дней месяца в заданном году
Const god = 2100     ' здесь задаём год
Const m = 1        ' здесь задаём месяц
Dim k 'количество дней в месяце m года god
 
Select Case m
    Case 1, 3, 5, 7, 8, 10, 12
                                    k = 31
    Case 4, 6, 9, 11
                                    k = 30
    Case 2
        Select Case True
        Case god Mod 4000 = 0 'год, номер которого делится нацело на 4000
                                    k = 28
        Case god Mod 400 = 0 'год, номер которого делится нацело на 400
                                    k = 29
        Case god Mod 100 = 0 'год, номер которого делится нацело на 100
                                    k = 28
        Case god Mod 4 = 0 'год, номер которого делится нацело на 4
                                    k = 29
        Case Else
                                    k = 28
        End Select
    Case Else: MsgBox "Месяца с номером " & m & " не существует.": Exit Sub
End Select
 
MsgBox "В " & god & " году" & " месяц " & MonthName(m) & " содержит " & k & _
IIf(k = 31, " день.", " дней.")
End Sub

Теперь как по писаному, всё чётко. Ещё час угрохал☻

Изображения

 



1



1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

18.06.2011, 15:41

13

чем мой вариант не устроил?
тем что кто-то сказал, что надо через



0



Sasha_Smirnov

5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

20.06.2011, 09:57

14

Устроил бы, если б выдал ответ.

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

три строчки кода…

Visual Basic
1
If IsDate("02/29/" & Год_проверяемой_даты) = True Then Beep 'проверка высокосен ли год, высокосным считаетсся тот год у которого имеется 29 февраля

А остальные две строчки — Суб и Энд Суб!



0



Sasha_Smirnov

5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

25.06.2011, 05:22

15

Ну, при желании, можно и в «три строчки»:

Visual Basic
1
2
3
4
5
6
7
8
Sub СколькоДней_without_Case()  ' число дней месяца в заданном году без оператора Case
Const g = 1900                  ' здесь задаём год
Const m = 2                     ' здесь задаём месяц
Dim k                           ' количество дней в месяце m года g
k = Choose(m, 31, _
28 - (g Mod 4 = 0) + (g Mod 100 = 0) - (g Mod 400 = 0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
MsgBox MonthName(m) & " " & g & " г. содержит " & k & IIf(k = 31, " день.", " дней.")
End Sub

Изображения

 



0



5561 / 1367 / 150

Регистрация: 08.02.2009

Сообщений: 4,107

Записей в блоге: 30

10.02.2012, 23:45

16

Причём число дней (k) выдаётся вообще чисто арифметически, без использования функций даты!



1



diska

0 / 0 / 0

Регистрация: 09.06.2014

Сообщений: 17

05.05.2012, 08:25

17

Добрый день!
Мне тут тож потребовалось вычислить кол-во дней, Ваши строки мне кажутся слишком большими.
Пришлось задуматься — СИЛЬНО (я начинающий),и вот че родилось :

Visual Basic
1
2
3
4
5
6
7
Dim дата As Date
Dim дата_1 As Date
дата = "01/" & month_cb.Value & "/" & year_cb.Value
If month_cb.Value < 12 Then дата_1 = "01/" & month_cb.Value + 1 & "/" & year_cb.Value Else _
 дата_1 = "01/" & 1 & "/" & year_cb.Value + 1
дней= DateDiff("d", дата, дата_1)
MsgBox (дней)

где, month_cb и year_cb — заполненные combobox’ы для месяца и года. Можно ввести еще пару cb и тем самым расширить границы определения кол-ва дней.



0



Ананаско

2 / 2 / 0

Регистрация: 23.11.2014

Сообщений: 60

13.12.2014, 17:01

18

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

Visual Basic
1
2
3
4
5
6
7
8
Sub СР2()
   Range("C1") = Now
    Range("C1:I1").DataSeries Rowcol:=xlRows, Date:= _
        xlMonth, Step:=1
For i = 1 To 12
     Cells(2, i + 2) = Day(Cells(1, i + 2))
   Next i
End Sub

Cells(2, i + 2) = Day(Cells(1, i + 2)) вот здесь он просто выводит сегодняшнее число.. а как вывести количество дней в месяце в зависимости от номера месяца?

Добавлено через 1 час 37 минут

Visual Basic
1
2
3
4
5
6
7
8
9
Sub ÑÐ2()
   Range("C1") = Now
    Range("C1:N1").DataSeries Rowcol:=xlRows, Date:= _
        xlMonth, Step:=1
For i = 1 To 12
     Cells(2, i + 2) = Month(Cells(1, i + 2))
   Next i
   Range("C3:N3") = "=CHOOSE(R[-1]C,""31"",""31"",""28"",""31"",""30"",""31"",""30"",""31"",""31"",""30"",""31"",""30"")"
End Sub

А вот все)



0



cshyka

1 / 1 / 0

Регистрация: 21.10.2022

Сообщений: 1

21.10.2022, 11:15

19

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Function funMonthDayCount(data As Date) As Integer
 
funMonthDayCount = DateAdd("m", 1, CDate("01." + Trim(Month(data)) + "." + Trim(Year(data)))) _
                                - CDate("01." + Trim(Month(data)) + "." + Trim(Year(data)))
 
End Function
 
Sub test()
a = funMonthDayCount("31.05.2001") 'a = 31
a = funMonthDayCount("15.02.2000") 'a = 29
a = funMonthDayCount("16.02.2001") 'a = 28
 
End Sub



1



Функции для работы с датой и временем в VBA Excel. Синтаксис, параметры, спецсимволы, примеры. Функции, возвращающие текущие дату и время по системному таймеру.

Функция Date

Date – это функция, которая возвращает значение текущей системной даты. Тип возвращаемого значения – Variant/Date.

Синтаксис

Пример

Sub PrimerDate()

    MsgBox «Сегодня: « & Date

End Sub

Функция DateAdd

DateAdd – это функция, которая возвращает результат прибавления к дате указанного интервала времени. Тип возвращаемого значения – Variant/Date.

Синтаксис

DateAdd(interval, number, date)

Параметры

Параметр Описание
interval Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, который требуется добавить.
number Обязательный параметр. Числовое выражение, задающее количество интервалов, которые необходимо добавить. Может быть как положительным (возвращается будущая дата), так и отрицательным (возвращается предыдущая дата).
date Обязательный параметр. Значение типа Variant/Date или литерал, представляющий дату, к которой должен быть добавлен интервал.

Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1».

Примечание к таблице аргументов: три символа – y, d, w – указывают функции DateAdd на один день, который необходимо прибавить к исходной дате number раз.

Пример

Sub PrimerDateAdd()

    MsgBox «31.01.2021 + 1 месяц = « & DateAdd(«m», 1, «31.01.2021») ‘Результат: 28.02.2021

    MsgBox «Сегодня + 3 года = « & DateAdd(«yyyy», 3, Date)

    MsgBox «Сегодня — 2 недели = « & DateAdd(«ww», 2, Date)

    MsgBox «10:22:14 + 10 минут = « & DateAdd(«n», 10, «10:22:14») ‘Результат: 10:32:14

End Sub

Функция DateDiff

DateDiff – это функция, которая возвращает количество указанных интервалов времени между двумя датами. Тип возвращаемого значения – Variant/Long.

Синтаксис

DateDiff(interval, date1, date2, [firstdayofweek], [firstweekofyear])

Параметры

Параметр Описание
interval Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, количество которых (интервалов) требуется вычислить между двумя датами.
date1, date2 Обязательные параметры. Значения типа Variant/Date, представляющие две даты, между которыми вычисляется количество указанных интервалов.
firstdayofweek Необязательный параметр. Константа, задающая первый день недели. По умолчанию – воскресенье.
firstweekofyear Необязательный параметр. Константа, задающая первую неделю года. По умолчанию – неделя, в которую входит 1 января.

Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1».

Примечание к таблице аргументов: в отличие от функции DateAdd, в функции DateDiff спецсимвол "w", как и "ww", обозначает неделю. Но расчет осуществляется по разному. Подробнее об этом на сайте разработчиков.

Параметры firstdayofweek и firstweekofyear определяют правила расчета количества недель между датами.

Таблицы констант из коллекций firstdayofweek и firstweekofyear смотрите в параграфах «Приложение 2» и «Приложение 3».

Пример

Sub PrimerDateDiff()

‘Даже если между датами соседних лет разница 1 день,

‘DateDiff с интервалом «y» покажет разницу — 1 год

    MsgBox DateDiff(«y», «31.12.2020», «01.01.2021») ‘Результат: 1 год

    MsgBox DateDiff(«d», «31.12.2020», «01.01.2021») ‘Результат: 1 день

    MsgBox DateDiff(«n», «31.12.2020», «01.01.2021») ‘Результат: 1440 минут

    MsgBox «Полных лет с начала века = « & DateDiff(«y», «2000», Year(Now) 1)

End Sub

Функция DatePart

DatePart – это функция, которая возвращает указанную часть заданной даты. Тип возвращаемого значения – Variant/Integer.

Есть предупреждение по использованию этой функции.

Синтаксис

DatePart(interval, date, [firstdayofweek], [firstweekofyear])

Параметры

Параметр Описание
interval Обязательный параметр. Строковое выражение из спецсимволов, представляющее часть даты, которую требуется извлечь.
date Обязательные параметры. Значение типа Variant/Date, представляющее дату, часть которой следует извлечь.
firstdayofweek Необязательный параметр. Константа, задающая первый день недели. По умолчанию – воскресенье.
firstweekofyear Необязательный параметр. Константа, задающая первую неделю года. По умолчанию – неделя, в которую входит 1 января.

Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1». В третьей графе этой таблицы указаны интервалы значений, возвращаемых функцией DatePart.

Таблицы констант из коллекций firstdayofweek и firstweekofyear смотрите в параграфах «Приложение 2» и «Приложение 3».

Пример

Sub PrimerDatePart()

    MsgBox DatePart(«y», «31.12.2020») ‘Результат: 366

    MsgBox DatePart(«yyyy», CDate(43685)) ‘Результат: 2019

    MsgBox DatePart(«n», CDate(43685.45345)) ‘Результат: 52

    MsgBox «День недели по счету сегодня = « & DatePart(«w», Now, vbMonday)

End Sub

Функция DateSerial

DateSerial – это функция, которая возвращает значение даты для указанного года, месяца и дня. Тип возвращаемого значения – Variant/Date.

Синтаксис

DateSerial(year, month, day)

Параметры

Параметр Описание
year Обязательный параметр типа Integer. Числовое выражение, возвращающее значение от 100 до 9999 включительно.
month Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 1 до 12.*
day Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 1 до 31.*

* Функция DateSerial автоматически пересчитывает общее количество дней в полные месяцы и остаток, общее количество месяцев в полные годы и остаток (подробнее в примере).

Пример

Sub PrimerDateSerial()

    MsgBox DateSerial(2021, 2, 10) ‘Результат: 10.02.2020

    MsgBox DateSerial(2020, 1, 400) ‘Результат: 03.02.2021

End Sub

Разберем подробнее строку DateSerial(2020, 1, 400):

  • 400 дней = 366 дней + 31 день + 3 дня;
  • 366 дней = 1 год, так как по условию month:=1, значит февраль 2020 входит в расчет, а в нем – 29 дней;
  • 31 день = 1 месяц, так как сначала заполняется январь (по условию month:=1);
  • 3 дня – остаток.

В итоге получается:

DateSerial(2020+1, 1+1, 3) = DateSerial(2021, 2, 3)

Функция DateValue

DateValue – это функция, которая преобразует дату, указанную в виде строки, в значение типа Variant/Date (время игнорируется).

Синтаксис

Параметр date – строковое выражение, представляющее дату с 1 января 100 года по 31 декабря 9999 года.

Пример

Sub PrimerDateValue()

    MsgBox DateValue(«8 марта 2021») ‘Результат: 08.03.2021

    MsgBox DateValue(«17 мая 2021 0:59:15») ‘Результат: 17.05.2021

End Sub

Функция DateValue игнорирует время, указанное в преобразуемой строке, но если время указано в некорректном виде (например, «10:60:60»), будет сгенерирована ошибка.

Функция Day

Day – это функция, которая возвращает день месяца в виде числа от 1 до 31 включительно. Тип возвращаемого значения – Variant/Integer.

Синтаксис

Параметр date – любое числовое или строковое выражение, представляющее дату.

Пример

Sub PrimerDay()

    MsgBox Day(Now)

End Sub

Функция IsDate

IsDate – это функция, которая возвращает True, если выражение является датой или распознается как допустимое значение даты или времени. В остальных случаях возвращается значение False.

Синтаксис

Параметр expression – это переменная, возвращающая дату или строковое выражение, распознаваемое как дата или время.

Значение, возвращаемое переменной expression, не должно выходить из диапазона допустимых дат: от 1 января 100 года до 31 декабря 9999 года (для Windows).

Пример

Sub PrimerIsDate()

    MsgBox IsDate(«18 апреля 2021») ‘Результат: True

    MsgBox IsDate(«31 февраля 2021») ‘Результат: False

    MsgBox IsDate(«4.10.20 11:12:54») ‘Результат: True

End Sub

Функция Hour

Hour – это функция, которая возвращает количество часов в виде числа от 0 до 23 включительно. Тип возвращаемого значения – Variant/Integer.

Синтаксис

Параметр time – любое числовое или строковое выражение, представляющее время.

Пример

Sub PrimerHour()

    MsgBox Hour(Now)

    MsgBox Hour(«22:36:54»)

End Sub

Функция Minute

Minute – это функция, которая возвращает количество минут в виде числа от 0 до 59 включительно. Тип возвращаемого значения – Variant/Integer.

Синтаксис

Параметр time – любое числовое или строковое выражение, представляющее время.

Пример

Sub PrimerMinute()

    MsgBox Minute(Now)

    MsgBox Minute(«22:36:54»)

End Sub

Функция Month

Month – это функция, которая возвращает день месяца в виде числа от 1 до 12 включительно. Тип возвращаемого значения – Variant/Integer.

Синтаксис

Параметр date – любое числовое или строковое выражение, представляющее дату.

Пример

Sub PrimerMonth()

    MsgBox Month(Now)

End Sub

Функция MonthName

MonthName – это функция, которая возвращает название месяца в виде строки.

Синтаксис

MonthName(month, [abbreviate])

Параметры

Параметр Описание
month Обязательный параметр. Числовое обозначение месяца от 1 до 12 включительно.
abbreviate Необязательный параметр. Логическое значение: True – возвращается сокращенное название месяца, False (по умолчанию) – название месяца не сокращается.

Пример

Sub PrimerMonthName()

    MsgBox MonthName(10) ‘Результат: Октябрь

    MsgBox MonthName(10, True) ‘Результат: окт

End Sub

Функция Now

Now – это функция, которая возвращает текущую системную дату и время. Тип возвращаемого значения – Variant/Date.

Синтаксис

Пример

Sub PrimerNow()

    MsgBox Now

    MsgBox Day(Now)

    MsgBox Hour(Now)

End Sub

Функция Second

Second – это функция, которая возвращает количество секунд в виде числа от 0 до 59 включительно. Тип возвращаемого значения – Variant/Integer.

Синтаксис

Параметр time – любое числовое или строковое выражение, представляющее время.

Пример

Sub PrimerSecond()

    MsgBox Second(Now)

    MsgBox Second(«22:30:14»)

End Sub

Функция Time

Time – это функция, которая возвращает значение текущего системного времени. Тип возвращаемого значения – Variant/Date.

Синтаксис

Пример

Sub PrimerTime()

    MsgBox «Текущее время: « & Time

End Sub

Функция TimeSerial

TimeSerial – это функция, которая возвращает значение времени для указанного часа, минуты и секунды. Тип возвращаемого значения – Variant/Date.

Синтаксис

TimeSerial(hour, minute, second)

Параметры

Параметр Описание
hour Обязательный параметр типа Integer. Числовое выражение, возвращающее значение от 0 до 23 включительно.
minute Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 0 до 59.*
second Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 0 до 59.*

* Функция TimeSerial автоматически пересчитывает общее количество секунд в полные минуты и остаток, общее количество минут в полные часы и остаток (подробнее в примере).

Пример

Sub PrimerTime()

    MsgBox TimeSerial(5, 16, 4) ‘Результат: 5:16:04

    MsgBox TimeSerial(5, 75, 158) ‘Результат: 6:17:38

End Sub

Разберем подробнее строку TimeSerial(5, 75, 158):

  • 158 секунд = 120 секунд (2 минуты) + 38 секунд;
  • 75 минут = 60 минут (1 час) + 15 минут.

В итоге получается:

TimeSerial(5+1, 15+2, 38) = TimeSerial(6, 17, 38)

Функция TimeValue

TimeValue – это функция, которая преобразует время, указанное в виде строки, в значение типа Variant/Date (дата игнорируется).

Синтаксис

Параметр time – строковое выражение, представляющее время с 0:00:00 по 23:59:59 включительно.

Пример

Sub PrimerTimeValue()

    MsgBox TimeValue(«6:45:37 PM») ‘Результат: 18:45:37

    MsgBox TimeValue(«17 мая 2021 3:59:15 AM») ‘Результат: 3:59:15

End Sub

Функция TimeValue игнорирует дату, указанную в преобразуемой строке, но если дата указана в некорректном виде (например, «30.02.2021»), будет сгенерирована ошибка.

Функция Weekday

Weekday – это функция, которая возвращает день недели в виде числа от 1 до 7 включительно. Тип возвращаемого значения – Variant/Integer.

Синтаксис

Weekday(date, [firstdayofweek])

Параметры

Параметр Описание
date Обязательный параметр. Любое выражение (числовое, строковое), отображающее дату.
firstdayofweek Константа, задающая первый день недели. По умолчанию – воскресенье.

Таблицу констант из коллекции firstdayofweek смотрите в параграфе «Приложение 2».

Пример

Sub PrimerWeekday()

    MsgBox Weekday(«23 апреля 2021», vbMonday) ‘Результат: 5

    MsgBox Weekday(202125, vbMonday) ‘Результат: 6

End Sub

Функция WeekdayName

WeekdayName – это функция, которая возвращает название дня недели в виде строки.

Синтаксис

WeekdayName(weekday, [abbreviate], [firstdayofweek])

Параметры

Параметр Описание
weekday Обязательный параметр. Числовое обозначение дня недели от 1 до 7 включительно.
abbreviate Необязательный параметр. Логическое значение: True – возвращается сокращенное название дня недели, False (по умолчанию) – название дня недели не сокращается.
firstdayofweek Константа, задающая первый день недели. По умолчанию – воскресенье.

Таблицу констант из коллекции firstdayofweek смотрите в параграфе «Приложение 2».

Пример

Sub PrimerWeekdayName()

    MsgBox WeekdayName(3, True, vbMonday) ‘Результат: Ср

    MsgBox WeekdayName(3, , vbMonday) ‘Результат: среда

    MsgBox WeekdayName(Weekday(Now, vbMonday), , vbMonday)

End Sub

Функция Year

Year – это функция, которая возвращает номер года в виде числа. Тип возвращаемого значения – Variant/Integer.

Синтаксис

Параметр date – любое числовое или строковое выражение, представляющее дату.

Пример

Sub PrimerYear()

    MsgBox Year(Now)

End Sub

Приложение 1

Таблица аргументов (значений) параметраinterval для функций DateAdd, DateDiff и DatePart:

Аргумент Описание Интервал значений
yyyy Год 100 – 9999
q Квартал 1 – 4
m Месяц 1 – 12
y День года 1 – 366
d День месяца 1 – 31
w День недели 1 – 7
ww Неделя 1 – 53
h Часы 0 – 23
n Минуты 0 – 59
s Секунды 0 – 59

В третьей графе этой таблицы указаны интервалы значений, возвращаемых функцией DatePart.

Приложение 2

Константы из коллекции firstdayofweek:

Константа Значение Описание
vbUseSystem 0 Используются системные настройки
vbSunday 1 Воскресенье (по умолчанию)
vbMonday 2 Понедельник
vbTuesday 3 Вторник
vbWednesday 4 Среда
vbThursday 5 Четверг
vbFriday 6 Пятница
vbSaturday 7 Суббота

Приложение 3

Константы из коллекции firstweekofyear:

Константа Значение Описание
vbUseSystem 0 Используются системные настройки.
vbFirstJan1 1 Неделя, в которую входит 1 января (по умолчанию).
vbFirstFourDays 2 Неделя, в которую входит не менее четырех дней нового года.
vbFirstFullWeek 3 Первая полная неделя года.

Формулировка задачи:

Ктонибудь знает как узнать сколько дней в месяце, по дате без циклов.
Например 10.2004 сколько в нём дней или какое последнее число.

Код к задаче: «Как узнать сколько дней в месяце, по дате без циклов?»

textual

Sub Тест()
 
Dim datDate As Date
Dim bytDay As Byte
 
datDate = "1.10.2004"
bytDay = Day(DateAdd("d", -1, (DateAdd("m", 1, datDate))))
 
End Sub

Полезно ли:

5   голосов , оценка 4.800 из 5

Понравилась статья? Поделить с друзьями:
  • Vba excel число в символах
  • Vba excel четная или нечетная
  • Vba excel часы минуты
  • Vba excel циклические ссылки
  • Vba excel цикл продолжить