Страницы: 1
RSS
Раскрытие числовых последовательностей
 
Необходимо получить из 1-10 числовую последовательность 1 2 3 4 5 6 7 8 9 10. Подскажите пожалуйста варианты решения, заранее спасибо!
 
Например так :)
Код
For i = 1 To 10
    'MsgBox i
    Debug.Print i
Next i
 
Не совсем понятен вопрос, для чего нужно получить последовательность и причем тут Excel, может вам на форум математики начальной школы нужно?
Ни файла, ни где применяется, а просто посчитать от 1 до 10. Или все таки есть какой то скрытый смысл в вопросе? И какие могут быть варианты решения пересчета от 1 до 10?
Изменено: Nordheim - 25.06.2019 08:08:58
"Все гениальное просто, а все простое гениально!!!"
 
Спасибо большое, а формульно (без кода) это возможно сделать? Это списки элементов и они выводятся в ячейки по разному например 1-5 10 21 14, ну т.е. это элементы с 1 по 5 и еще 10, 21, 14. В идеале хотелось бы чтоб он находил промежуток 1-5 и расписывал его вместе с остальными
 
В данном файле группы элементов после двоеточия, их надо расписать
 
А покажите в каком виде нужен результат.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
перечисление номеров элементов после двоеточия
 
Правильно ли я понимаю, что Вас интересует замена диапазона чисел на последовательность его составляющих?

Посмотрите предлагаемое итерационное решение - для наглядности формулы разнесены в разные ячейки, но при желании часть из них можно записать в одной ячейке. Обратите внимание на использование формулы массива (вводится нажатием CTRL+SHFT+ENTER)
 
Да, совершенно верно, замена диапазона на последовательность, т.е. первое значение, последующие и последнее. Из той таблицы я не совсем понимаю как получить промежуточные значение диапазона, а его крайние значения просто считываются и выводятся.
 
Вариант на PQ:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Запрос"]}[Content],
    #"Inserted Text Between Delimiters" = Table.AddColumn(Source, "Текст между разделителями", each Text.BetweenDelimiters([Столбец1], ":", "/"), type text),
    #"Trimmed Text" = Table.TransformColumns(#"Inserted Text Between Delimiters",{{"Текст между разделителями", Text.Trim, type text}}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Trimmed Text", {{"Текст между разделителями", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Текст между разделителями"),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Текст между разделителями", type text}}),
    Custom = Table.TransformColumns(#"Changed Type", {{"Текст между разделителями", each if Text.Contains(_, "-") then List.Transform( List.Numbers( Number.From( Text.Split(_, "-"){0} ), Number.From( Text.Split(_, "-"){1} ) - Number.From( Text.Split(_, "-"){0} ) + 1 ), Text.From) else {_}, type list}}),
    #"Expanded {0}" = Table.ExpandListColumn(Custom, "Текст между разделителями"),
    #"Grouped Rows" = Table.Group(#"Expanded {0}", {"Столбец1"}, {{"Количество", each Text.BeforeDelimiter(_[Столбец1]{0}, ":") & ": " & Text.Combine(_[Текст между разделителями]," ") & "/", type text}})
in
    #"Grouped Rows"

В левый столбец вставляете исходные данные, потом жмите по таблице ПКМ и Обновить в правый столбец вывалится результат.
Вот горшок пустой, он предмет простой...
 
ругается что-то
Изменено: jks1 - 25.06.2019 11:29:48
 
jks1, какая версия Excel установлена? я написал, что решение реализовано на Power Query, для 2010-2013 это бесплатная надстройка (её нужно отдельно установить), с 2016 это часть Экселя.
Изменено: PooHkrd - 25.06.2019 11:49:19
Вот горшок пустой, он предмет простой...
 
PooHkrd, установлена 2013, PQ не установлен, поставлю и проверю, спасибо вам большое!
 
Цитата
jks1 написал:
я не совсем понимаю как получить промежуточные значение диапазона, а его крайние значения просто считываются и выводятся
Не совсем.
Признаком диапазона является символ "-"
Два знака перед позицией признака интерпретируются как первое число диапазона, а два знака после - как последнее.
Последовательность чисел, ограниченная найденными значениями генерируется формулой-массива как последовательность номеров строк, заданных при помощи текстовой ссылки.
А затем результирующая ссылка обрамляется пробелами и замещает символы внутри оригинальной строки
Затем операция рекурсивно повторяется для следующего разделителя диапазона, если он есть.

Сейчас мне кажется, что можно сделать проще: вырезать вырезать кусок текста вокруг "-" и заменить разделитель на ":"
Код
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПСТР(D4;ПОИСК("-";D4)-2;5);" ";"");"-";":")
и тогда формулу массива проще сворачивать в единую формулу
Код
=ЕСЛИОШИБКА(ОБЪЕДИНИТЬ(" ";1;СТРОКА(ДВССЫЛ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПСТР(D4;ПОИСК("-";D4)-2;5);" ";"");"-";":"))));"")
или целиком вся свернутая формула выглядит так:
Код
=ЗАМЕНИТЬ(D4;ПОИСК("-";D4)-2;5;" "&ОБЪЕДИНИТЬ(" ";1;СТРОКА(ДВССЫЛ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПСТР(D4;ПОИСК("-";D4)-2;5);" ";"");"-";":"))))&" ")
 
Цитата
IKor написал:
Два знака перед позицией признака интерпретируются как первое число диапазона, а два знака после - как последнее.
почему только 2 знака? Я брал от пробела до тире. Вдруг там трех-четырехзначное число?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Я брал от пробела до тире
Ограничения метода. Поиск пробела, предшествующего тире, при помощи формул кажется мне избыточно сложным...
Итак уже достигнуто ограничение вложенности функций для XLS...
 
PooHkrd, установил PQ, проверил, все работает, еще раз спасибо ;)  :)  
Страницы: 1
Наверх