Как можно из интервалов в столбцах A и B (интервал от и до) получить результат как в столбце E. Важные ограничения: 1. В столбцах A и B может стать около 1000 интервалов (интервалы задаются руками). 2. В идеале получить решение не макросами, потому что я в них очень слаб(
Sub iDataSeries()
Dim iLastRow As Long
Dim iLR As Long
Dim i As Long
iLastRow = Cells(Rows.Count, "E").End(xlUp).Row + 1
Range("E2:E" & iLastRow).ClearContents
iLR = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To iLR
iLastRow = Cells(Rows.Count, "E").End(xlUp).Row + 1
Cells(iLastRow, "E") = Cells(i, "A")
Cells(iLastRow, "E").DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
xlDay, Step:=1, Stop:=Cells(i, "B"), Trend:=False
Next
Range("E2:E" & iLastRow).NumberFormat = "dd.mmm"
End Sub
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
period = Table.AddColumn(Источник, "period", each {Number.From([Интервал с])..Number.From([Интервал до])}),
dates_nmb = Table.ExpandListColumn(period, "period"),
dates = Table.TransformColumnTypes(dates_nmb,{{"period", type date}}),
out = Table.SelectColumns(dates, "period")
in
out
Но я обнаружил, что не до конца верно сформулировал первоначальную проблему( В связи с этим ваше гениальное решение работает не так, как я мечтал( Пытался разобраться с вашей формулой в доп столбце - это оказался путь в никуда((
Может, у вас есть идея - как выполнить то, что указано в этом файле (цвета - для наглядности). Если словами, то: 1. Введённые интервалы могут пересекаться. Оч нужно, чтобы разбивка адекватно это воспринимала. 2. В совершенном варианте - хотелось бы, чтобы она подтягивала и множила в нужном объёме ещё и строчку, которая идёт следом за второй датой
Введённые интервалы могут пересекаться. Оч нужно, чтобы разбивка адекватно это воспринимала.
Похоже, что вы проигнорировали решение макросом. Ну это ваше дело.
Цитата
чтобы она подтягивала и множила в нужном объёме ещё и строчку,
Добавил в макрос эту вашу хотелку. Для примера из сообщения #7
Код
Sub iDataSeries()
Dim iLastRow As Long
Dim iLR As Long
Dim i As Long
iLastRow = Cells(Rows.Count, "E").End(xlUp).Row + 1
Range("E2:F" & iLastRow).ClearContents
iLR = Cells(Rows.Count, "B").End(xlUp).Row
For i = 2 To iLR
iLastRow = Cells(Rows.Count, "E").End(xlUp).Row + 1
Cells(iLastRow, "E") = Cells(i, "B")
Cells(iLastRow, "F").Resize(Cells(i, "C") - Cells(i, "B") + 1) = Cells(i, "D")
Cells(iLastRow, "E").DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
xlDay, Step:=1, Stop:=Cells(i, "C"), Trend:=False
Next
iLastRow = Cells(Rows.Count, "E").End(xlUp).Row
Range("E2:E" & iLastRow).NumberFormat = "dd.mmm"
End Sub