WedX - журнал о программировании и компьютерных науках

Создание даты с 1-м, 2-м или 3-м днем ​​недели в excel

Мне нужно определить, в какой день недели задано данное число,

Для например. У меня Год = 2018 Календарная неделя = 51 и Число = 3 (это 3-й день недели)

Календарная неделя 51 приходится на декабрь месяц

Неделя начинается с понедельника по воскресенье

Поскольку 3-й день 51-й недели — 19-й, результат должен быть "19/12/2018".

Можем ли мы сделать это формулой excel или макросом VBA.

Любая помощь в этом отношении высоко ценится.

Спасибо, Ганеш

06.12.2018

Ответы:


1

Наглое копирование с сайта здесь вы можете использовать формулу Excel:

=DATE(<YearNumber>, 1, -2) - WEEKDAY(DATE(<YearNumber>, 1, 3)) + <WeekNumber> * 7+ <DayNumber> -1   

Итак, =DATE(2018, 1, -2) - WEEKDAY(DATE(2018, 1, 3)) + 51 * 7 + 3 - 1 возвращает 19 декабря 2018 г..

06.12.2018
  • Это замечательно! его работа .... Однако вместо этого вручную введите номер года, номер недели и номер дня. Я сделал ссылку на ячейку, год и номер недели работают нормально, но, однако, если я изменю номер дня в ячейке, результат не изменится. Вот формула, которую я использовал, где год в ячейке F3, неделя в G3 и день в H3 = ДАТА (F3 , 1, -2) - ДЕНЬ НЕДЕЛИ(ДАТА(F3, 1, H3)) + G3 * 7+ H3-1 07.12.2018
  • Ваша первая ссылка на день должна быть просто цифрой 3: =DATE(F3, 1, -2) - WEEKDAY(DATE(F3, 1, 3)) + G3 * 7+ (H3-1) 07.12.2018

  • 2

    Получается с помощью vba. Один макрос и один udf.

    макрос

    Sub getWeekDays()
        Dim vDB, vS(), vR()
        Dim y As Integer, s As Date, e As Date
        Dim i As Integer, k As Integer
        Dim n As Integer
        'y = Year
        y = InputBox("Input year : 2018  ")
    
        s = DateSerial(y, 1, 0)
        e = DateSerial(y + 1, 1, 0)
        n = e - s
        For i = 1 To n
            d = s + i
            If DatePart("ww", d, vbMonday) = DatePart("ww", d + 1, vbMonday) Then
            Else
                k = k + 1
                ReDim Preserve vR(1 To 2, 1 To k)
                vR(1, k) = DatePart("ww", d, vbMonday) & " Wk"
                If k = 1 Then
                    vR(1, k) = DatePart("ww", s + 1, vbMonday) & " Wk"
                    vR(2, k) = Format(s + 1, "dd.mm.yyyy") & "~" & Format(d, "dd.mm.yyyy")
                Else
                    vR(2, k) = Format(d - 6, "dd.mm.yyyy") & "~" & Format(d, "dd.mm.yyyy")
                End If
            End If
        Next i
        Range("a1").CurrentRegion.Clear
        Range("a1").Resize(k, 2) = WorksheetFunction.Transpose(vR)
    End Sub
    

    UDF

    Function getWeekDay(y As Integer, WeekNum As Integer, DayOrder As Integer)
        Dim s As Date, e As Date
        Dim i As Integer
        Dim n As Integer
        Application.Volatile
        'WeekNum = 51
        'y = Year
        'DayOrder <~~ If third day  DayOrder = 3
    
        s = DateSerial(y, 1, 0)
        e = DateSerial(y + 1, 1, 0)
        n = e - s
        For i = 1 To n
            d = s + i
    
            If DatePart("ww", d, vbMonday) = WeekNum Then
                getWeekDay = d + DayOrder - 1
                Exit Function
            End If
        Next i
    End Function
    

    введите здесь описание изображения

    07.12.2018
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]