Страницы: 1
RSS
Выбрать из массива значения отличающиеся друг от друга на определенную величину (шаг), Поиск другого решения трудоёмкой прикладной специфической задачи
 

Здравствуйте уважаемые профессионалы Excel.

Прошу Вашей помощи в поиске другого решения трудоёмкой прикладной специфической задачи.

Пример с моим решением в прикреплённом файле.

Исходные данные для расчёта представлены во вкладке «Условия».

Из представленных «Значений» (их может быть и больше) надо выбрать значения, которые отличаются друг от друга на величину «Шага» с занесением их в таблицу, пример во вкладке «ИТОГ».

В моём решении, вкладка «РАСЧЁТ» (для значения «509200» из выпадающего списка ячейки «А1») жёлтым выделены значения, из которых минимальные вручную вставляются в таблицу (вкладка «ИТОГ») с добавлением «ШАГА» и количества шагов. Минимальное количество шагов «1» максимальное не ограничено, в зависимости от расчёта. Тоже самое делается для остальных значений из выпадающего списка ячейки «А1».

Во вкладке «ИТОГ» пример выбранных из «РАСЧЁТА» вручную до шага «500» значений, удовлетворяющих условию для выбранного в ячейке «А1» (выпадающий список) значения «509200».

Суть проблемы в том, чтобы сделать эту выборку автоматической для всех «Значений». Вручную это очень долго и естественно возникает много ошибок.

Может есть какие-то другие более простые решения с помощью формул. Если только макрос, то прошу помочь так как в этом я не силён.

Выбранные значения подлежат ещё дальнейшей выборке по другим условиям, но уже только вручную.

Версия Excel 2016.

Заранее
благодарю Вас за уделённое внимание и помощь.
Изменено: Sanja - 22.03.2026 13:16:44
 
Цитата
Сергей написал: Может есть какие-то другие более простые решения...
Может и есть вот только совсем не понятна логика
Согласие есть продукт при полном непротивлении сторон
 

Логика вроде бы простая, может объяснил сложно и по примеру не понятно. Попробую заново.

1.     Во вкладке «Условия» заданы «Значения» (А2-А129) и «Шаг» (от 50 до 2000).

2.     Из заданных «Значений» надо найти и выбрать значения начиная с которых при добавлении шага (от 50 до 2000) получается последовательность значений (из А2-А129), которые отстают друг от друга на величину шага, например, из вкладки «Расчёт»:

- 522100, 522400 – получили два значения (из А2-А129) с шагом между ними 300. В таблицу надо занести первое значение 522100 в столбец с шагом 300 и указать количество шагов между значениями – «1»;

- 510100, 510550, 51100 – получили три значения (из А2-А129) с шагом между ними 450. В таблицу надо занести первое значение 510100 в столбец с шагом 450 и указать количество шагов между значениями – «2»;

- 545600, 546000, 546400, 546800, 547200, 547600 – получили шесть значений (из А2-А129) с шагом между ними 400. В таблицу надо занести первое значение 545600 в столбец с шагом 400 и указать количество шагов между значениями – «5».

3.     В итоге в таблицу должны быть занесены для каждого шага (от 50 до 2000) все возможные значения, удовлетворяющие вышеописанному условию.

 
Сергей, см файл
 
ПавелW огромное спасибо за Ваш труд, профессионализм и помощь. Проблема по автоматическому заполнению итогов Вами решена. Буду теперь разбираться с Вашим решением и формулами подробнее и использовать в работе.
Ещё раз огромное спасибо за не равнодушие к чужой проблеме. Всего Вам самого наилучшего.
 
Сергей, пожалуста)
задача решается и без листа 'РАСЧЁТ' такими массивками:
'Значение' (A4):
=ЕСЛИОШИБКА(НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(Условия!$A$2:$A$129;Условия!$A$2:$A$129+A$2)*НЕ(СЧЁТЕСЛИ(Условия!$A$2:$A$129;Условия!$A$2:$A$129-A$2));Условия!$A$2:$A$129;"");СТРОКА(A1));"")
'Кол-во'  (B4):
=ЕСЛИ(A4="";"";ПОИСКПОЗ(;СЧЁТЕСЛИ(Условия!$A$2:$A$129;A4+A$2*СТРОКА(B$1:ИНДЕКС(B:B;СЧЁТ(Условия!$A$2:$A$129)-ПОИСКПОЗ(A4;Условия!$A$2:$A$129;)+1)));)-1)
...но с учётом количества таких формул - будет несколько ресурсоёмко)
 
ПавелW ещё раз огромное спасибо. Пока разбираюсь с первым вариантом,но обязательно доберусь и до второго. Второй получился не сразу сообразил что надо оформлять как формулу массива. Осталось разобраться с самими формулами.
Всего Вам самого наилучшего.
Изменено: Сергей - 24.03.2026 18:33:51
 
Вариант решения с помощью Power Query.
Время обработки данных на моём компьютере - в районе 3 секунд. Но понятно, что с увеличением значений и количества шагов время обработки будет увеличиваться.  
Шлюхогон42
 
Дмитрий спасибо , что нашли время для поиска нового решения. К сожалению в Power Query я не силён и не смогу оценить Ваш труд. Я не понял полученный результат и что обозначают эти цифры в таблице. То что мне хотелось бы увидеть выглядит совсем по иному, что я и пытался объяснить выше.
Ещё раз спасибо и извините за не понимание. Всего Вам самого наилучшего.
 
Цитата
ПавелW написал: ...но с учётом количества таких формул - будет несколько ресурсоёмко)
Цитата
Дмитрий Никитин написал: Время обработки данных на моём компьютере - в районе 3 секунд.

Решение макросом. Время - около 100 МИЛЛИсекунд )

Скрытый текст

Не стал разносить значение и количество по разным столбцам (при необходимости можно доработать)
Макросу не нужен список шагов.
В коде задаются первое/последнее значения и сам шаг.
Можно сделать - Начало/Шаг/Количество шагов
Можно их вбивать на листе, а не в коде
На листе 'Условия' нажмите на кнопку
Согласие есть продукт при полном непротивлении сторон
 
еще вариант PQ.
код
Изменено: AlienSx - 29.03.2026 00:48:27 (bug fixing)
Пришелец-прораб.
 
Sanja большое спасибо за макрос всё работает. Увеличил условия в два раза тоже всё быстро посчитало, просто летает. Единственное не очень удобно когда значение и результат в одной ячейке так как с этими итогами предстоит ещё работать. Если не трудно переделать макрос буду весьма благодарен. Если не сможете из-за занятости то я Вас пойму. Буду разбивать ячейки формулами.
Ещё раз спасибо Вам за не равнодушие и Ваш профессионализм. Всего Вам самого наилучшего.
 
AlienSx спасибо за ещё одно решение. К сожалению как я уже писал выше в Power Query я не силён и не смогу воспользоваться Вашим трудом. Попробовал вставить как макрос, при его выполнении выдаёт ошибку "Compile error" "Syntax error". Что с этим делать не знаю.
Ещё раз спасибо и извините за не понимание. Всего Вам самого наилучшего.
 
Разнес по столбцам. См.файл
Согласие есть продукт при полном непротивлении сторон
 
Sanja большое спасибо за доработку макроса под мои задачи. Благодаря не равнодушным мастерам Excel обнаружил, что моё решение было с ошибками.
Ещё раз спасибо Вам большое за то, что нашли время на доработку макроса, за Ваше не равнодушие и за Ваш профессионализм.
Всего Вам самого наилучшего.
 
Sanja извините что опять обращаюсь к Вам, старость не радость. К сожалению допустил ошибку в условии. Надо чтобы было подсчитано не сколько шагов между значениями а сколько значений с таким шагом, т.е. в вашем макросе все значения должны были бы получиться на "1" больше. Из вкладки «Расчёт»:

Получили шесть значений - 545600, 546000, 546400, 546800, 547200, 547600. В таблицу надо занести первое значение 545600 в столбец с шагом 400 и указать количество значений – «6».

Пытался разобраться в макросе, но увы не силён. Огромная просьба помогите последний раз в доработке макроса сам не справлюсь.

Ещё раз прошу прощения за беспокойство. Всего Вам самого наилучшего. И в любом случае благодарю за всё.

 
Там все просто. Удалите строку
Код
J = J - 1
Согласие есть продукт при полном непротивлении сторон
 
Sanja большое спасибо. Действительно всё просто.
Как говорит в своих видио Николай Павлов: "Когда знаешь всё просто".
Ещё раз большое спасибо и всего самого наилучшего.
 
Sanja здравствуйте. С праздником Вас Светлой Пасхи.
Извините, что опять отвлекаю, надеюсь прочитаете после праздника.
Подскажите как откорректировать макрос.
Увеличил количество значений и в расчёте (3359 мсек) в конце каждого столбца с количеством значений появилось число "254". Можно как нибудь сделать чтобы его не было, чтобы не мешало в дальнейших действиях.
Ещё раз прошу прощения за беспокойство. С праздником Вас Всего Вам самого наилучшего.  
 
Цитата
Сергей написал: Увеличил количество значений ... (3359 мсек)
Судя по значительному увеличению времени выполнения макроса Вы серьезно увеличили количество значений. Возможно в исходных данных появились пустые строки. Значения для шага прежние? Можете файл приложить?
Согласие есть продукт при полном непротивлении сторон
 
Sanja здравствуйте.
С Вашей помощью разобрался. Количество значений увеличилось до 246, но это на быстродействие не сильно повлияло.
Сильно повлияло наличие 254 пустых ячеек с ссылками на другую вкладку. Всё поправил и лишние значения пропали.
Спасибо Вам за подсказку. Извините за беспокойство. Всего Вам самого наилучшего.  
Страницы: 1
Читают тему
Наверх