2016-05-18 7 views
2

У меня есть четыре ячейки, как показано ниже, и я хочу, чтобы объединить их в одну ячейку в виде короткой даты:Как получить дату, поставляя год, месяц, номер недели, день недели первенствует

A1: Year 
A2: Month 
A3: Week number 
A4: Week day 

сейчас Я хочу, чтобы это, excel, смотрело на вышеуказанные ячейки и сообщило мне дату в коротком формате. Я не хочу видеть имя дня в конечном результате.

В качестве примера:
A1:
A2: мая
A3:
A4: Среда

Тогда я хочу, чтобы получить =>18,05. 2016

I ap избегать любой помощи.

+0

На какой день делать ваши недели начать? Воскресенье? Понедельник? – Jordan

+0

Привет, Джордан. Он начинается в понедельник. – Dio

+0

Используете ли вы определение определения длины в Ион? Или какое-то другое определение? –

ответ

1
=DATE(A1,1,1)+7*(A3-1)+MATCH(A4,{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"},0)-WEEKDAY(DATE(A1,1,1)+7*(A3-1)) 

выше даст вам дату 16/05/11, которые при поверке с WEEKNUM и будний день 20-й недели и 4-й день недели (среда).

ЕСЛИ вы хотите, чтобы дата была 16/05/18, когда при проверке с WEEKNUM и WEEKDAY - 21-я неделя и 4-й день недели (среда), затем удалите -1 и просто используйте A3.

Доказательство концепции

enter image description here

+0

Спасибо, вперед, То есть, что я искал. – Dio

0

Попробуйте это:

=DATE(A1,MONTH(DATEVALUE(A2&" 1")),A3) 

Вам действительно нужно будний день для этого?

+0

Спасибо, но да. Мне это нужно. Я хочу знать, например, дату в среду на 20-й неделе 2016 года. Каждая из этих данных находится в другой ячейке. Ваша текущая формула не содержит дня. – Dio

+0

@Dio - В вашем вопросе вы упомянули «Теперь я хочу получить дату, например 20.05.2016», и это то, что вышло выше. – Mrig

+0

@ Dio - Если ваше требование - это что-то еще, дайте мне знать. – Mrig

1

Попробуйте это:

=DATE(A$1,1,-6)-WEEKDAY(DATE(A$1,1,1),2)+A3*7+CHOOSE(IF(A4="Monday",1,IF(A4="Tuesday",2,IF(A4="Wednesday",3,IF(A4="Thursday",4,If(A4="Friday",5,if(A4="Saturday",6,IF(A4="Sunday",7,0))))))),1,2,3,4,5,6,7)

Где A1 = год, A3 = неделя, A4 = Будний

К сожалению, забыл функция Text(,"d") не будет работать.

+0

Не работает. – Dio

0

Этот бесхитростный подход начинается на первую часть года и шагов по календарю, пока он не находит дату в правильной НомерНеделе с соответствующим текстом днем:

Public Function INeedADate(yr As Long, wkmn As Long, dy As String) As Date 
    Dim i As Long, dtStart As Date, d As Date 
    Dim x As String 

    x = LCase(dy) 
    dtStart = DateSerial(yr, 1, 1) 
    With Application.WorksheetFunction 
     For i = 0 To 400 
      d = dtStart + i 
      If .WeekNum(d) = wkmn And LCase(Format(d, "dddd")) = x Then 
       INeedADate = d 
       Exit Function 
      End If 
     Next i 
    End With 
End Function 

enter image description here

Вы можете изменить формат ячейки в соответствии с вашими потребностями.
Если неделя начала понедельник, а не воскресенье использования: .WeekNum(d,2) вместо: .WeekNum(d)

+0

так что 20-я неделя? Мои методы формулы говорят «да», но OP говорит, что 2016/05/18 - это 20-я неделя. ищет какое-то независимое подтверждение нумерации недели, не переходя в мой календарь и считая –

+0

@ForwardEd Существует несколько разных определений * WEEKNUM() *. Мой подход предполагает, что рабочий лист Microsoft по умолчанию .......... с воскресеньем в первый день недели. –

+0

Я сделал weeknum с вариантами 1 и 2 и получил тот же номер недели. –

Смежные вопросы