Учитывая конкретную дату начала (например, 11 января 2012 г.), я хочу автоматически заполнить строку в Excel диапазоном дат, соответствующим следующему шаблону для дней (период выплаты заработной платы дважды в месяц).
1. 11th - 25th
2. 26th - 10th
Конечно, с реальными датами в каждой ячейке, включая месяц и год (а не просто повторяя два значения выше). Я ищу способ ввести один или два определенных диапазона дат, например:
January 11th, 2012 - January 25th, 2012
January 26th, 2012 - February 10th, 2012
И пусть Excel автоматически заполнит еще много ячеек по тому же шаблону:
January 11th, 2012 - January 25th, 2012
January 26th, 2012 - February 10th, 2012
February 11th, 2012 - February 25th, 2012
....
December 11th, 2012 - December 25th, 2012
Как я могу это сделать?
решение1
Отформатируйте столбцы в предпочитаемом вами формате даты. Введите дату 1/11/2012 в ячейку A1 и дату 1/25/2012 в ячейку B2. Скопируйте следующий код в A2;
=DATE(YEAR(B1),MONTH(B1), DAY(B1)+1)
и скопируйте это в B2;
=IF(DAY(B1)=10, DATE(YEAR(B1), MONTH(B1), DAY(25)), DATE(YEAR(B1),MONTH(B1)+1, DAY(10)))
Продолжайте, выделите A2 и B2 и перетащите их вниз настолько, насколько вам нужно.
Когда все будет готово, должно получиться примерно так:
решение2
Вот решение для одной строки. Внимание, это гигантская формула, и она требует отдельной таблицы поиска.
Где-нибудь в вашей рабочей тетради вам нужно будет создать следующую таблицу:
0 January
1 February
2 March
3 April
4 May
5 June
6 July
7 August
8 September
9 October
10 November
11 December
В моем примере эта таблица находится в I1:J12, поэтому скорректируйте формулу соответствующим образом. В A1 введите:
=VLOOKUP(MOD(ROUNDDOWN((ROW()-0.5)/2,0),12),$I$1:$J$12,2,FALSE) & IF(ISODD(ROW())," 11th, "," 26th, ") & 2012 + INT((ROW()-0.5)/24) & " - " & VLOOKUP(MOD(ROUNDDOWN(ROW()/2,0),12),$I$1:$J$12,2, FALSE) & IF(ISODD(ROW())," 25th, "," 10th, ") & 2012 + INT(ROW()/24)
Чтобы помочь разобраться, вот формула, разбитая на части:
=VLOOKUP(MOD(ROUNDDOWN((ROW()-0.5)/2,0),12),$I$1:$J$12,2,FALSE) &
IF(ISODD(ROW())," 11th, "," 26th, ") &
2012 + INT((ROW()-0.5)/24) &
" - " &
VLOOKUP(MOD(ROUNDDOWN(ROW()/2,0),12),$I$1:$J$12,2, FALSE) &
IF(ISODD(ROW())," 25th, "," 10th, ") &
2012 + INT(ROW()/24)
решение3
Метод без формулы
Введите вА1:
11/1/2012
Введите вА2:11/2/2012
ВыделятьА1:А2, заполнить вниз (перетаскиванием мыши), например доА12(11/12/2012
)Введите вА13:
26/1/2012
Введите вА14:26/2/2012
ВыделятьА13:А14, заполнить вниз (перетаскиванием мыши), например доВ24(26/12/2012
)Сортировать столбецАчто будет датой начала периода
(а) Повторите для столбцаБчто будет датой окончания периода (каждое 25-е и 10-е число)
ИЛИ
(b) Установите следующую начальную дату - 1 как конечную дату, т.е. введитеВ1:=A2-1
, затем скопируйте вниз доВ2:В23Формат столбцаА:Бпо желанию в Формате ячеек (Ctrl-1), например
mmmm dd, yyyy
Бонус
Чтобы отобразить начальную и конечную дату в одной ячейке, разделенной дефисом:
Введите вС1:
=TEXT(A1,"mmmm dd, yyyy") & " - " & TEXT(B1, "mmmm dd, yyyy")
Это даст вам что-то вродеJanuary 11, 2012 - January 25, 2012
Копировать внизС2:С24