Консультация № 191223
15.07.2017, 13:43
0.00 руб.
1 5 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

передо мной стоит задача - необходимо найти все Трифные планы (столбец TP) в каждом отдельном регионе которые будут соответсвовавть следующему правилу

По каждому из указанных Destination они должны иметь одно и тоже значение Price
Если таковых не найдется то необходимо найти совпадение Price на 90% , по кажому параметру Destination (их 8 - 4 для СМС и 4 для телефонии)
Если не найдется 8 совпадений по 90%, то нужно найти хотя бы 6 сопадений полных

на выходе получится нечто следующее
есть регион и в нем есть N тарифов с совпадащими (или близкими) ценовыми параметрами по 8 категриям

Например москва
5-6 ТП которые совпадают между собой в цене по 8 категориям (пусть цена будет х1, у1, z1 и т.д.)
5-6ТП которые совпадают на 90% между собой в ценах по 8 категориям и тд
Прикрепленные файлы:
2b57b445be99c73f95f4957682400be073cea739.xlsx

Обсуждение

давно
Мастер-Эксперт
259041
7459
18.07.2017, 03:25
общий
Адресаты:
Вы обрушили на головы экспертов настолько сложный по объёму алгоритм, что решать Вашу задачу бесплатно (отложив все свои дела) вряд ли кто-то возьмётся. Я подозреваю, что Вы сами хорошо представляете, что именно Вы хотите, многое из того, что Вы подразумеваете, не описано или плохо описано в Вашем Вопросе.
Мне видится метод решения в VBScript , умеющим подключать и читать Excell-страницы. Но для начала я предлагаю Вам перезадать свой Вопрос и упростить условие. Покажите небольшой исходный документ и пример готового решения для разработки VBScript-программы.
Затем, после первого успеха можно будет наращивать сложность ветвления (типа "Если таковых не найдется то необходимо найти совпадение Price...")
давно
Мастер-Эксперт
259041
7459
19.07.2017, 12:31
общий
Адресаты:
Здравствуйте Megaloman! (Прошу извинить, Ваше Имя отсутствует в Вашей РегКарте).
Вы писали в Личной почте: "не стОит связываться с vbs, когда есть живая Еxcel таблица… Тут должен работать vba" - Я уважаю Ваше профессиональное мнение, но Вы несколько лет назад научили меня работать с vbs (большое Спасибо Вам!). А изучать vba для очень редких задач мне слишком убыточно (все языки изучать - будет каша в голове).

"ответ, похоже, надо сформировать в Excel- таблице" - я не увидел в Вопросе ограничение для выводимых данных. Мне думается, автору Вопроса надо помочь автоматизировать выборку из огромной таблицы и получить совпадающие Тарифн планы в любом виде.
давно
Мастер-Эксперт
259041
7459
19.07.2017, 12:37
общий
Адресаты:
Я научил свой скрипт q191223.vbs (прилагаю) читать Ваш прикреплённый Excel-документ с неизвестным именем (сайт-программа исказила имя), я назвал его q191223.xlsx . А "Начало - это уже пол-дела".

Скрипт будет в процессе обработки выводить много данных в прокрутке окна Командной строки. Если Вы не окультурили свойства своего окна Ком-строки (включить кириллич шрифт, возможности копирования/вставки…), то мой скрипт предложит Вам настроить свойства. Согласитесь, и тогда Вы сможете в Cmd-окне выделять текст-фрагмент мазком по нему лев-кнопкой мыши и копировать в Буфер обмена побелевшее выделение.

По умолчанию скрипт ищет и пытается зачитать докум q191223.xlsx в своей Родитель-папке. Но Вы можете легко изменить путь к докуму в 6й строке скрипта. Читать/править код скрипта Вы сможете из его контекстного меню (клик правой кнопкой мыши), выбрав команду "Изменить". В коде достаточно поясняющих комментариев, они начинаются с символа '(апостроф) до конца ткщ-строки.

Если помощь ещё нужна Вам, то попросите модераторов продлить срок действия Вашего Вопроса. Я допишу код чтения блоков по 8 строк из Вашего докума. Каждые 8 Ваших табли-строк описывают 1 ТП (Тарифный План). 2256 строк (исключаем заголовок) - это 282 ТП. В каждом из 282 ТП-блоке много избыточных ячеек. Можно выпарсить нужные данные, сравнить их и вывести результат в Блокноте или html-файле. А можно просто зачитать окончание Cmd-вывода. Что Вы предпочитаете?
Прикрепленные файлы:
7ecdc3bc266ac7bfdc8f5a415c717f31.zip
давно
Модератор
137394
1850
19.07.2017, 15:57
общий
Адресаты:
Продлил
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Мастер-Эксперт
259041
7459
20.07.2017, 16:56
общий
это ответ
Здравствуйте, 1peachpuncher!
Выбрать одинаковые ТП (Тарифные Планы) из огромной Excel-таблицы в 2256 строк и 5 столбцов, да ещё с заданной точностью вручную очень трудоёмко. Для автоматизации обработки я предлагаю применить мини-программу, написанную на языке VBScript .

VBScript имеет компактный код (12кБ всего), не требует установки среды программирования, работает в любой Windows-системе. VBScript подключается к Excel-оболочке, быстро читает данные в свой массив из XLSX-документа, затем отключается от Excel-приложения, и дальнейшую обработку (сравнение ТП-блоков) производит самостоятельно. При этом снимается ограничение режима "Только чтение" для работы пользователя с документом.

В исходной Excel-таблице много ошибок (в ячейки E694, E695, E696, E697 вписаны значения символа "Запятая" вместо числа) и недоразумений (в ячейки E66, E110, E134… вписаны нули для Телефония\ИсходящСвязь, что довольно сомнительно и вызывало ошибку деления на нуль при подсчёте относительной погрешности сравнения). Поэтому пришлось ввести в код несколько страховочных тестов и исключить из сравнения некоторые ТП с явными ошибками.
Однако, мой скрипт q191223.vbs (прилагаю) нашёл 107 одинаковых ТП по региону Москва и 115 по региону Краснодар. Скрипт формирует файл отчёта и авто-открывает его в Блокноте.

Скрипт в процессе обработки выводит много текста в прокрутке окна Командной строки. Поэтому, если Вы не окультурили свойства своего окна Ком-строки (включить кириллич шрифт, возможности копирования/вставки…), то мой скрипт предложит Вам настроить свойства. Согласитесь, и тогда Вы сможете в Cmd-окне выделять текст-фрагмент мазком по нему лев-кнопкой мыши и копировать в Буфер обмена побелевшее выделение.

По умолчанию скрипт ищет и пытается зачитать исходный документ q191223.xlsx в своей Родитель-папке. Но Вы можете легко изменить путь к докуму в 6й строке скрипта. Читать/править код скрипта Вы сможете из его контекстного меню (клик правой кнопкой мыши), выбрав команду "Изменить". В коде достаточно поясняющих комментариев, они начинаются с символа '(апостроф) до конца текущей строки. =Удачи!
Прикрепленные файлы:
474612045f4fa057a1d078f09fafbdc19693d53c.zip
Форма ответа