Добрый имею последовательно (хаотично, не по возрастанию) записанные чиста в одной ячейке через запятую вида : [ 3,2,1,5,7,8,9,10 ] Необходимо преобразовать в запись вида по возрастанию: [ '1-3', '5', '7', '8-10' ]. В файле исходные данные в колонке L. Буду благодарен за помощь. Случайно создал в разделе: Вопросы по Excel для Mac, прошу перенести в раздел Вопросы по Excel.
Добрый имею последовательно (хаотично, не по возрастанию) записанные чиста в одной ячейке через запятую вида : [ 3,2,1,5,7,8,9,10 ] Необходимо преобразовать в запись вида по возрастанию: [ '1-3', '5', '7', '8-10' ]. В файле исходные данные в колонке L. Буду благодарен за помощь. Случайно создал в разделе: Вопросы по Excel для Mac, прошу перенести в раздел Вопросы по Excel.zingeroud
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], f = (txt as text) => [tbl = Table.FromList(Text.Split(txt, ","), (x) => List.Transform({x}, Number.From), type table [n = number]), sort = Table.Sort(tbl, "n"), idx = Table.AddIndexColumn(sort, "idx"), fx_lst = (lst as list) => try Text.From(List.Single(lst)) otherwise Text.From(List.Min(lst)) & "-" & Text.From(List.Max(lst)), group = Table.Group( idx, {"n", "idx"}, {"g", each fx_lst(_[n])}, GroupKind.Local, (s, c) => Number.From( (c[n] - s[n]) <> (c[idx] - s[idx])) ), out = Text.Combine(group[g], ", ")][out], z = List.Transform(Source[NUMBER_IND], f) in z
[/vba] Вообще, в ваших данных все числа идут подряд. Кстати, на "планете" решали эту задачу несколько раз и PQ и VBA (про формулы не скажу - не помню).
Вот такой вариант PQ, например. [vba]
Код
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], f = (txt as text) => [tbl = Table.FromList(Text.Split(txt, ","), (x) => List.Transform({x}, Number.From), type table [n = number]), sort = Table.Sort(tbl, "n"), idx = Table.AddIndexColumn(sort, "idx"), fx_lst = (lst as list) => try Text.From(List.Single(lst)) otherwise Text.From(List.Min(lst)) & "-" & Text.From(List.Max(lst)), group = Table.Group( idx, {"n", "idx"}, {"g", each fx_lst(_[n])}, GroupKind.Local, (s, c) => Number.From( (c[n] - s[n]) <> (c[idx] - s[idx])) ), out = Text.Combine(group[g], ", ")][out], z = List.Transform(Source[NUMBER_IND], f) in z
[/vba] Вообще, в ваших данных все числа идут подряд. Кстати, на "планете" решали эту задачу несколько раз и PQ и VBA (про формулы не скажу - не помню).AlienSphinx