Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 SharePoint Foundation 2010 Excel 2010 SharePoint Server 2010 Excel 2007 Excel для Mac 2011 Excel Starter 2010 Windows SharePoint Services 3.0 Еще…Меньше
Вычисляет количество дней, месяцев или лет между двумя датами.
Предупреждение: Функция РАЗНДАТ предлагается в Excel для поддержки старых книг Lotus 1-2-3. В некоторых ситуациях она может выдавать неправильные результаты. Дополнительные сведения см. в разделе «Известные проблемы» в этой статье.
Синтаксис
РАЗНДАТ(нач_дата,кон_дата,единица)
Аргумент |
Описание |
||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
start_date Обязательный |
Дата, которая представляет первую или даты начала заданного периода. Даты можно вводить в виде текстовых строк в кавычках (например, «30.1.2001»), в виде порядковых номеров (например, 36921 представляет 30 января 2001 г., если используется система дат 1900) или как результаты вычисления других формул или функций (например ДАТАЗНАЧ(«30.1.2001»)). |
||||||||||||||
end_date Обязательный |
Дата окончания периода. |
||||||||||||||
Единица |
Тип возвращаемой информации, где:
|
Замечания
-
Даты хранятся в виде последовательных чисел, что позволяет использовать их в вычислениях. По умолчанию дате 1 января 1900 года соответствует номер 1, а 1 января 2008 года — 39448, так как интервал между этими датами составляет 39 447 дней.
-
Функция РАЗНДАТ полезна в формулах расчета возраста.
-
Если онtart_date больше, чем end_date,результат будет #NUM!.
Примеры
нач_дата |
кон_дата |
Формула |
Описание (результат) |
1.1.2001 |
1.1.2003 |
=РАЗНДАТ(нач_дата,кон_дата,»Y») |
Два полных года в периоде (2). |
1.6.2001 |
15.8.2002 |
=РАЗНДАТ(нач_дата,кон_дата,»D») |
440 дней между 1 июня 2001 г. и 15 августа 2002 г. (440) |
1.6.2001 |
15.8.2002 |
=РАЗНДАТ(нач_дата,кон_дата,»YD») |
75 дней между 1 июня и 15 августа без учета годов дат (75) |
Известные проблемы
При использовании аргумента «MD» результатом может быть отрицательное число, нуль или неверное значение. Если вы пытаетесь вычислить оставшиеся дни после последнего полного месяца, вот как можно это сделать:
Эта формула вычитает первый день окончания месяца (01.05.2016) из исходной даты окончания в ячейке E17 (06.05.2016). Вот как это делается: сначала функция ДАТА создает дату 01.05.2016. Она создается с помощью года в ячейке E17 и месяца в ячейке E17. 1 обозначает первый день месяца. Результатом функции ДАТА будет 01.05.2016. Затем мы вычитаем эту дату из исходной даты окончания в ячейке E17 (06.05.2016), в результате чего получается 5 дней.
Дополнительные сведения
Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.
См. также
Функции Excel (по алфавиту)
Функции Excel (по категориям)
Рекомендации, позволяющие избежать появления неработающих формул
Нужна дополнительная помощь?
Нужны дополнительные параметры?
Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.
В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.
Imagine you are in a scenario where you need to construct a table that is organized by date. For instance, you are making a schedule and need to specify a list of activities arranged by date in the appropriate order. You would require a list of dates in the event that this occurs.
There is no such thing as a limitless list, so it stands to reason that the one you would have a beginning and an end date. In certain circumstances, if you already know the date at which you want to begin and the date at which you want to finish, you may need to use Excel to create a list of all the dates that fall in between these two specified days.
List all Dates using Formula
Let’s understand step by step through an example.
Step 1
In our example, we have Start Date and End Date in an Excel sheet. We will create a list the dates in between the starting date and ending date. See the following image.
Step 2
Then type the below given formula in C2 cell and press enter. The formula is =A2+1 where A2 is the cell in which starting date is written. After pressing Enter, you will see the next date of starting date. See the following image.
Step 3
After that, select the cell C3 and type the below given formula in formula bar and press enter.
=IF($A$2+ROW(A2)>=$B$2,"",C2+1)
Step 4
Click the «+» sign appears on the lower right corner of the cell C3, which activates the autofill function and then drag down to reflect in other cells.
The difficulty in defining the syntax or making modifications to this formula is the primary drawback to using it. In addition to this, the dates aren’t quite in the correct order.
List All Dates Using VBA
If you are interested in macro code, the following Visual Basic for Applications (VBA) can be used in Excel to list any dates that fall between two specified dates.
Follow the steps given below −
Step 1
Enter the Start date and the End date into separate cells.
Step 2
To open the Microsoft Visual Basic for Applications window, press the «Alt + F11» keys simultaneously.
Step 3
Then click Insert > Module and the popup Module window will open.
This is the VBA editor.
Step 4
In the Module window, type the following VBA code.
Sub DatesBetween() Dim rng As Range Dim StartRng As Range Dim EndRng As Range Dim OutRng As Range Dim StartValue As Variant Dim EndValue As Variant xTitleId = "VBOutput" Set StartRng = Application.Selection Set StartRng = Application.InputBox("Start Range (single cell):", xTitleId, StartRng.Address, Type:=8) Set EndRng = Application.InputBox("End Range (single cell):", xTitleId, Type:=8) Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8) Set OutRng = OutRng.Range("A1") StartValue = StartRng.Range("A2").Value EndValue = EndRng.Range("A2").Value If EndValue - StartValue <= 0 Then Exit Sub End If ColIndex = 0 For i = StartValue To EndValue OutRng.Offset(ColIndex, 0) = i ColIndex = ColIndex + 1 Next End Sub
Step 5
Click Run or F5 to run the VBA, a window pops up where you will choose the starting date, then click OK, then in the next window, choose the Ending date, then click OK.
Then another window pops up asking Output to, give the output cell and click OK.
In our example, the Cell value of Starting Date is A2, so we write it in this way: «A2″.
In our example, the Cell value of Ending Date is B2, so we write it in this way: «B2″.
In our example, the Cell value of Output Date is C2, so we write it in this way: «C2″.
After clicking OK, close the VBA window and you will get the dates between the starting and ending dates, including both starting and ending dates, as shown in the following image.
Conclusion
In this tutorial, we showed two different ways (Formula and VBA) that you can use to list all the dates between two given dates in Excel.
- Related Articles
- How to Extract All Records Between Two Dates in Excel?
- How To Create A Dynamic Chart Between Two Dates (Based On Dates) In Excel?
- How to calculate average between two dates in Excel?
- Return all dates between two dates in an array in PHP
- How to calculate the midpoint between two dates in Excel?
- How to calculate the percentage between two dates in Excel?
- How to Count Unique Values Between Two Dates in Excel?
- How to store all dates in an array present in between given two dates in JavaScript?
- How to create a vector with dates between two dates in R?
- How to calculate the weeks and days between two dates in Excel?
- How To Count Records Between Two Dates With Matching Criteria In Excel
- How To Count The Days Excluding Sundays Between Two Dates In Excel?
- How To Count Number Of Leap Years Between Two Dates In Excel?
- How to generate k random dates between two other dates using Python?
- How to Count the Number of Weekends/Weekdays Between Two Dates in Excel?
Kickstart Your Career
Get certified by completing the course
Get Started
Автозаполнение ячеек с датами с помощью формулы
У нас задача — выписать все календарные даты между двумя другими — началом и концом периода, как показано на скриншоте ниже:
Для решения задачи нужно сначала рассчитать приращение на единицу к начальной дате периода, как показано ниже:
Затем нужно вписать в ячейку ниже следующее выражение
=ЕСЛИ($A$1+СТРОКА(A1)>=$A$2-1;»»;C1+1)
Далее нужно протянуть перекрестие автозаполнения вниз и вы увидите, что последней заполненной будет дата окончания периода.
Еще простой вариант автозаполнения периода между датами
В Лгещщды есть специальный инструмент для рандомного (случайного) вставки случайных чисел. Вызывается команда из группы команд «Вставить» — «Вставка случайных чисел»
В диалоговом окне следует указать даты начала и окончания периода между которым нужно сгенерировать даты. Указываем, что даты должны быть уникальными, выделяем диапазон ячеек, куда нужно будет вставить даты и нажимаем «Ок»
Даты генерированы в нужном диапазоне но расставлены беспорядочно. Вызываем сортировку и сортируем по порядку возрастания или убывания, как нам нужно.
2.1. Использованиеjava.util.Date для определения разницы в днях
Давайте начнем с использования основных API-интерфейсов Java для расчета и определения количества дней между двумя датами:
@Test
public void givenTwoDatesBeforeJava8_whenDifferentiating_thenWeGetSix()
throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);
Date firstDate = sdf.parse("06/24/2017");
Date secondDate = sdf.parse("06/30/2017");
long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime());
long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
assertEquals(diff, 6);
}
2.2. Использованиеjava.time — начиная с Java 8
Теперь вычисление разницы станет более интуитивным, если мы используемLocalDate, LocalDateTime для представления двух дат (со временем или без него) в сочетании сPeriod иDuration:.
РазницаLocalDate:
@Test
public void givenTwoDatesInJava8_whenDifferentiating_thenWeGetSix() {
LocalDate now = LocalDate.now();
LocalDate sixDaysBehind = now.minusDays(6);
Period period = Period.between(now, sixDaysBehind);
int diff = period.getDays();
assertEquals(diff, 6);
}
СлучайLocalDateTime:
@Test
public void givenTwoDateTimesInJava8_whenDifferentiating_thenWeGetSix() {
LocalDateTime now = LocalDateTime.now();
LocalDateTime sixMinutesBehind = now.minusMinutes(6);
Duration duration = Duration.between(now, sixMinutesBehind);
long diff = Math.abs(duration.toMinutes());
assertEquals(diff, 6);
}
Here ‘немного подробнее об этом API.
2.3. Использованиеjava.time.temporal.ChronoUnit для определения разницы в секундах
API времени в Java 8 представляет собой единицу даты и времени, например секунды или дни, используяTemporalUnit interface. Each unit provides an implementation for a method named between to calculate the amount of time between two temporal objects in terms of that specific unit.
Например, чтобы вычислить секунды между двумяLocalDateTimes:
@Test
public void givenTwoDateTimesInJava8_whenDifferentiatingInSeconds_thenWeGetTen() {
LocalDateTime now = LocalDateTime.now();
LocalDateTime tenSecondsLater = now.plusSeconds(10);
long diff = ChronoUnit.SECONDS.between(now, tenSecondsLater);
assertEquals(diff, 10);
}
ChronoUnit предоставляет набор конкретных единиц времени, реализуя интерфейсTemporalUnit. It’s highly recommended to static import the ChronoUnit enum values to achieve more readability:
import static java.time.temporal.ChronoUnit.SECONDS;
// omitted
long diff = SECONDS.between(now, tenSecondsLater);
Кроме того, мы можем передать любые два совместимых временных объекта методуbetween , дажеZonedDateTime.
Что замечательно вZonedDateTime, так это то, что расчет будет работать, даже если они установлены в разные часовые пояса:
@Test
public void givenTwoZonedDateTimesInJava8_whenDifferentiating_thenWeGetSix() {
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime now = ldt.atZone(ZoneId.of("America/Montreal"));
ZonedDateTime sixMinutesBehind = now
.withZoneSameInstant(ZoneId.of("Asia/Singapore"))
.minusMinutes(6);
long diff = ChronoUnit.MINUTES.between(sixMinutesBehind, now);
assertEquals(diff, 6);
}
2.4. Используяjava.time.temporal.Temporaluntil()
Любой объектTemporal, например LocalDate or ZonedDateTime, provides an until method to calculate the amount of time until another temporal in terms of the specified unit:
@Test
public void givenTwoDateTimesInJava8_whenDifferentiatingInSecondsUsingUntil_thenWeGetTen() {
LocalDateTime now = LocalDateTime.now();
LocalDateTime tenSecondsLater = now.plusSeconds(10);
long diff = now.until(tenSecondsLater, ChronoUnit.SECONDS);
assertEquals(diff, 10);
}
Temporal#until иTemporalUnit#between — это два разных API для одной и той же функциональности.
Подсчитывает количество дней, месяцев или лет между двумя датами.
Примеры использования
РАЗНДАТ(ДАТА(1969; 7; 16); ДАТА(1969; 7; 24); "D")
РАЗНДАТ(A1; A2; "YM")
РАЗНДАТ("7/16/1969"; "7/24/1969"; "Y")
Синтаксис
РАЗНДАТ(дата_начала, дата_окончания, единица_измерения)
-
дата_начала
– начальная дата для расчета. Она может быть представлена числом, адресом ячейки, содержащей дату, или функцией, возвращающей дату. -
дата_окончания
– конечная дата для расчета. Она может быть представлена числом, адресом ячейки, содержащей дату, или функцией, возвращающей дату. -
единица_измерения – аббревиатура единицы времени. Например,
"M"
означает «месяц». Возможные значения:"Y"
,"M"
,"D"
,"MD"
,"YM"
,"YD"
.-
"Y"
: вычисляется количество полных лет междудатой_начала
идатой_окончания
. -
"M"
: вычисляется количество полных месяцев междудатой_начала
и датой_окончания. -
"D"
: вычисляется количество дней междудатой_начала
идатой_окончания
. -
"MD"
: вычисляется количество дней междудатой_начала
идатой_окончания
после вычитания полных месяцев. -
"YM"
: вычисляется количество полных месяцев междудатой_начала
и датой_окончания после вычитания полных лет. -
"YD"
: вычисляется количество дней междудатой_начала
идатой_окончания
при условии, что разница между этими датами не более одного года.
-
Примечания
-
Месяц или год окончания учитывается только в том случае, если указанное число в нем не меньше, чем в начальном. Например, для диапазона 30.09.2015–28.02.2016 функция вернет значение «4 месяца», несмотря на то что 28 февраля – последний день месяца.
-
Если функция
РАЗНДАТ
возвращает результат в странном формате, значит этот формат применен к ячейке. Например, еслиРАЗНДАТ(ДАТА(1969; 7; 16); ДАТА(1969; 7; 24); "D")
возвращает07.01.1900
, значит формат ячейки –Дата
. Чтобы появился нужный результат8
, измените формат ячейки наЧисло
. -
Используйте аргумент
"MD"
, чтобы ответить на такие вопросы как: «Если из моего возраста вычесть количество полных лет и месяцев, сколько останется дней?» -
Используйте аргумент
"YM"
, чтобы ответить на такие вопросы как: «Если из моего возраста вычесть количество полных лет, сколько останется месяцев?» -
Используйте аргумент
"YD"
, чтобы ответить на такие вопросы как: «Сколько дней прошло с моего последнего дня рождения?»
Похожие функции
ДАТА
: Преобразует год, месяц и день в значение даты.
ДАТАЗНАЧ
: Преобразует строку в значение даты.
Примеры
В этом примере функция РАЗНДАТ
вычисляет длительность миссии «Аполлон-11» в днях.
В этом примере функция РАЗНДАТ
вычисляет количество месяцев в году.