Страница 1 из 2

опять недели в разрезе текущей даты

Добавлено: 17 май 2007, 12:13
vadim245
как увязать в формулу:

1. получить текущую дату (например так: =сегодня() )
2. перевести в номер недели, на которую выпадает текущая дата (например из -17.05.2007 нужно получить 720, где 7год 20номер недели)

если не получается в формулу, то пускай выполняется макрос при открытии, а результат нужно при открытии же вписать в ячейку Ac6

PS я смог родить только такой вариант: =700+(НОМНЕДЕЛИ(СЕГОДНЯ();2))
но для работы формулы нужен пакет анализа/Analysis ToolPack VBA (не уверен какой именно)
К сожалению включить каждому потенциальному пользователю не получится. Желательно обойтись без них.
Кстати, если совсем нет вариантов, может можно запустить эти пакеты автоматом на доустановку на машине пользователя если они не стоят? И как?
=================================================================================================
Топик обновил в связи с актуальностью обратного конвертирования:
От номера недели к дате
Есть огромный лист. данные в котором состоят из номеров недель вида
701 год 2007 неделя 1
915 год 2009 неделя 15
1024 год 2010 неделя 24
Нужно в выделенном диапазоне ячеек все номера недель заменить
полноценными датами - четвергами указанных недель

Re: опять недели в разрезе текущей даты

Добавлено: 17 май 2007, 14:51
Pavel55
может так ?

=ПРАВСИМВ(ГОД(СЕГОДНЯ());1)&НОМНЕДЕЛИ(СЕГОДНЯ())

и вы получите 720 для текущей недели (17/05/2007)

P.s. у вас должна быть подключена надстройка "Пакет анализа" (Сервис - Надстройки... - Пакет анализа)

Re: опять недели в разрезе текущей даты

Добавлено: 17 май 2007, 15:04
vadim245
спасибо, ваш вариант мне больше нравится, только все же требуется пакет. в нем и есть камень преткновения. мне бы без доппакетов выкрутиться...

Re: опять недели в разрезе текущей даты

Добавлено: 17 май 2007, 15:06
Avsha
номнедели ...
смотрите ссылку на тему внизу, в разделе "похожие темы"
<как определить номер недели?>

Re: опять недели в разрезе текущей даты

Добавлено: 17 май 2007, 15:40
Pavel55
Я вот переделал функцию из той темы, у мя получилось так, может автору поможет

Код: Выделить всё

Function myWeekNum%()
    myWeekNum% = DatePart("ww", Date, vbMonday)
End Function
а в ячейку AC6 введите "=myWeekNum()"

Re: опять недели в разрезе текущей даты

Добавлено: 18 май 2007, 11:25
vadim245
последний рецепт оказался самым действенным

Re: опять недели в разрезе текущей даты

Добавлено: 18 май 2007, 15:08
Avsha
для работы формулы нужен пакет анализа
для полноты темы - аналог номнедели без пакета анализа:

Re: опять недели в разрезе текущей даты

Добавлено: 09 июл 2010, 21:48
vadim245
Avsha писал(а):для полноты темы - аналог номнедели без пакета анализа:
А не помогут ли знатоки сделать обратное:

От номера недели к дате
Есть огромный лист. данные к котором состоят из номеров недель вида
701 год 2007 неделя 1
915 год 2009 неделя 15
1024 год 2010 неделя 24
Нужно в выделенном диапазоне ячеек все номера недель заменить
полноценными датами - четвергами указанных недель

Re: опять недели в разрезе текущей даты

Добавлено: 10 июл 2010, 03:21
nilem
Попробуйте так. Выделяем диапазон с числами, запускаем макрос, числа заменятся на даты четвергов.

Код: Выделить всё

Sub ДатыЧетверги()
Dim God As String, Ned As Integer, Дата As Date
Dim DN As Integer, poz As Range
Application.ScreenUpdating = False
For Each poz In Selection.Cells
    God = "20" & Format(Mid(poz.Value, 1, Len(poz.Value) - 2), "0#")
    Ned = CInt(Right(poz.Value, 2))
    DN = Weekday("1/1/" & God, vbMonday)
    Дата = DateAdd("ww", Ned - 1, "1/1/" & God) + 4 - DN
    poz.Value = Дата
Next poz
Application.ScreenUpdating = True
End Sub

Re: опять недели в разрезе текущей даты

Добавлено: 10 июл 2010, 11:09
vadim245
nilem писал(а):Попробуйте так. Выделяем диапазон с числами, запускаем макрос, числа заменятся на даты четвергов.

Код: Выделить всё

Sub ДатыЧетверги()
Dim God As String, Ned As Integer, Дата As Date
Dim DN As Integer, poz As Range
Application.ScreenUpdating = False
For Each poz In Selection.Cells
    God = "20" & Format(Mid(poz.Value, 1, Len(poz.Value) - 2), "0#")
    Ned = CInt(Right(poz.Value, 2))
    DN = Weekday("1/1/" & God, vbMonday)
    Дата = DateAdd("ww", Ned - 1, "1/1/" & God) + 4 - DN
    poz.Value = Дата
Next poz
Application.ScreenUpdating = True
End Sub

Спасибо. почти то, что нужно. только промахиваемся на1 неделю - всегда заменяется на четверг неделей раньше