Страницы: 1
RSS
Список из номеров месяцев между двумя датами
 
Приветствую всех!

Прошу посоветовать как красиво решить задачу. Может кто-то реализовывал подобное
Введена дата начала и завершения контракта, нужно получить в ячейку список номеров месяцев.
примеры:
#2020/04/01# - #2020/06/30# - - - - - > {4,5,6}
#2020/05/12# - #2020/05/30# - - - - - > {5}
#2020/01/31# - #2020/05/01# - - - - - > {1,2,3,4,5}

осложнение:
#2020/12/05# - #2021/01/31# - - - - - > {12,1}
 
я бы на PQ делал
Соблюдение правил форума не освобождает от модераторского произвола
 
Добрый вечер. Формула =month() почему не подходит? а потом просто склеить.
 
Осенило. Тестирую.
Код
// в исходной таблице две колонки c датами [A] и [B]
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],

    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"A", type datetime}, {"B", type datetime}}),

    #"Вставлено: месяц.A" = Table.AddColumn(#"Измененный тип", "Месяц.A", each Date.Month([A]), Int64.Type),

    #"Вставлено: месяц.B" = Table.AddColumn(#"Вставлено: месяц.A", "Месяц.B", each Date.Month([B]), Int64.Type),

    #"Добавлен пользовательский объект" = Table.AddColumn(#"Вставлено: месяц.B", "Мес", each 
        if [Месяц.A]>[Месяц.B] then List.Combine({{[Месяц.A].. 12},{1.. [Месяц.B]}}) else {[Месяц.A] .. [Месяц.B]}),

    #"Развернутый элемент Пользовательский" = Table.ExpandListColumn(#"Добавлен пользовательский объект", "Мес"),

    #"Другие удаленные столбцы" = Table.SelectColumns(#"Развернутый элемент Пользовательский",{"A", "B", "Мес"})

in
    #"Другие удаленные столбцы"
Изменено: Alexey795 - 21.05.2020 20:30:32
 
Цитата
Alexey795 написал:
// в исходной таблице две колонки c датами [A] и [B]
Код
let
    from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    typ = Table.TransformColumnTypes(from,{{"A", type date}, {"B", type date}})
in Table.AddColumn(typ, "lst", each [d=Date.StartOfMonth([A]),f=Date.EndOfMonth([B]),
            l = Text.Combine(List.Generate(()=>[i=0,n=Text.From(Date.Month([A]))],each Date.AddMonths(d,[i])<=f,
            each [i=[i]+1,n = Text.From( Date.Month(Date.AddMonths(d,[i]+1)))],each [n]),",")][l])
Изменено: buchlotnik - 21.05.2020 21:49:29
Соблюдение правил форума не освобождает от модераторского произвола
 
Еще вариант
Код
let i=Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content]
in let a=i, b={Number.From(a[а]{0})..Number.From(a[б]{0})},
c=List.Transform(b,each Date.Month(Date.From(_))),d=Table.FromList
(c, Splitter.SplitByNothing(),{"a"}),e=Table.Group(d, {"a"}, {{"b", each _}},
0)[a] in "{"&Text.Combine(List.Transform(e,Text.From),", ")&"}"
 
Здравствуйте, подскажите пожалуйста, можно как-то и каким образом реализовать: Есть курс валют, например доллара на каждое число на одном листе и есть сумма в долларах, на другом листе. Хотелось бы сделать так, чтоб при вводе даты подтягивался курс из таблицы курсов на эту конкертную дату, т.е. чтоб Эксель находил тот курс на определенное число, который я ввожу в ячейку? Надеюсб понятно написал)
Изменено: freezoloto - 21.05.2020 22:23:26
 
Цитата
freezoloto написал:
можно как-то и каким образом реализовать
можно, но не в этой теме
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
freezoloto написал:
пожскадите пожалуйста
Создайте тему - пожскаджем
Эта тема о другом
 
Извините, минуту.
 
buchlotnik, Михаил Л, так как пример не бродит в теме, мне просто интересно, при длительности больше года последовательность начинается снова? 1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6
По вопросам из тем форума, личку не читаю.
 
БМВ, у меня так и будет
При исходнике:  02.04.2019 - 05.09.2021
Выдало: {4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9}
 
Михаил Л,  ок. Это я так , просто накалякал формулу, но в виду отсутствия TEXTJOIN у меня получается до 14 месяцев сделать и то двумя частями. но вот сейчас появилась идея
=REPLACE(SUBSTITUTE(MID(REPT(",01,02,03,04,05,06,07,08,09,10,11,12";INT((DATEDIF(EOMONTH(A3;0);EOMONTH(B3;0);"M")-1)/12)+2);(MONTH(A3)-1)*3+1;(DATEDIF(EOMONTH(A3;0);EOMONTH(B3;0);"M")+1)*3);",0";",");1;1;)

ну фигурные скобки добавить по вкусу
Изменено: БМВ - 22.05.2020 10:42:57
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
ЦЕЛОЕ((РАЗНДАТ(КОНМЕСЯЦА(A7;0);КОНМЕСЯЦА(B7;0);"M")-1)/12)+2
Интересное решение. Спасибо
Страницы: 1
Наверх