Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Условное форматирование Гистограмма на основании значений других ячеек
 
Добрый день!

Столкнулся с интересной задачкой.
Есть лист 1, на котором текстовые данные.
Макросом я могу для каждой ячейки посчитать некую метрику и записать ее в ячейку с таким же адресом, но на другом листе (Лист2).
Задача состоит в том, чтобы сделать условное форматирование гистограммой на ячейки Листа1 так, как будто бы каждая из них содержит не текст, а значение ячейки с таким же адресом на листе2.  

Сделал упрощенный пример. Мой макрос здесь не причем, поэтому
во все ячейки Лист 1 просто вбил один и тот же текст "Hello", значения на лист2 - руками заполнил несколько ячеек. Представим, что их написал макрос.
На листе2 понятное дело условное форматирование гистограмма делается за 5 сек.
А вот как такую же картинку получить на Лист1 - никак не могу.
Пробовал уже и макросом, и значения подпихивать из массива, и формулу, и даже внаглую
   Cells(1, 1).FormatConditions(1).Formula = "Лист2!A1"
   Cells(2, 1).FormatConditions(1).Formula = "Лист2!A2"
   Cells(3, 1).FormatConditions(1).Formula = "Лист2!A3"

но что-то не получается.

Вот сделал нечто близкое
На листе "Look hh"  условно форматируются первые 4 ячейки столбца A в зависимости от значений таких же ячеек на листе "hh".

Но мне нужно именно гистограмма условного форматирования (как на листе2), т.к. цвет менее информативен. А рисовать кучу фигур в ячейках как то не очень хочется, там наверняка какие-нибудь грабли повыползают.

Буду благодарен за любые идеи.
Задача о Ранцах, Нужна консультация по возможностям алгоритмов раскроя материала.
 
Чтобы сэкономить кому-то время, обозначу сразу:
Базовый бюджет 2 т.р.
Бюджет времени: думаю, час-полтора.
Но, в принципе, все обсуждаемо. Без фанатизма :)

Технология изготовления несколько замороченная, поэтому для упрощения решил изложить задачу в контексте всем известного рюкзака,
который грабителю ювелирной лавки нужно наполнить максимально полно.
Сформулировал несколько кривовато, но исключительно для ускорения примерного понимания сложности задачи и чтобы отсеять "школьников".
С конкретным исполнителем-консультантом, есть смысл обсуждать реальную задачу.
Предполагается наличие у консультанта опыта решения задач о мульти-рюкзаках, т.к. простую/банальную  моно-задачу раскроя я могу решить и сам.
Публичный макрос MCH уже поюзал (кстати, очень понравился). Пару лет назад на c#  делал задачу раскроя с помощью библиотеки OR-Tools от гугла.
Но, к сожалению, глубоко не погружался в саму механику алгоритмов (динамическое программирование, ветвей и границ и прочих).
Сейчас для себя определил 2 возможных пути решения. Но прежде, чем приступать, думаю нелишним будет часок пообщаться с кем-то поопытнее меня в данном вопросе.
Ведь могу получить бесценные советы в плане выбора алгоритма или хотя бы тактики его поиска.
Непосредственно исполнителю программировать ничего не надо - это просто беседа-консультация.


Итак сама задача

1 Есть 10 Рюкзаков типа А и 10 Рюкзаков типа Б

2 Каждый Рюкзак состоит из 5 отделений.
3 Каждый Рюкзак может быть настроен на одну (единую для него) ширину отделений.

4 Рюкзак типа А может быть настроен на ширину отделений 10 или 15 см
5 Рюкзак типа Б может быть настроен на ширину отделений 15 или 20 см
6 Ширина отделения никак не меняет их длину и количество в рюкзаке.

7 Слиток можно класть только в отделение точно такой же ширины как и он (не больше, не меньше,
т.е. это несколько необычный слиток, а скорее какой-то железнодорожный вагончик, с конкретной шириной рельсов).

8 Длина всех отделений Рюкзака А 50 см, Рюкзака Б = 60 см. Длина слитков кратко меньше, и разная.
Другими словами, внутри одного отделения стоит банальная задача линейного раскроя.
Сложность именно в том, что сами Рюкзаки то - с настраиваемой шириной отделений, что и добавляет комбинаторику, но на более высоком уровне.

9 Слиток характеризуется длиной, шириной (10, 15 или 20 см) и материалом (бронза, серебро и золото).

10 Набор слитков из указанных выше материалов четко задан (т.е. их не бесконечное множество; в реальности это уже полученные заказы клиентов).


Так как для простоты изложения реальная задача приведена к ранцу, следующие моменты могут показаться бредом в физическом смысле.
Но будем считать это игрой, поэтому просто таковы ее правила:

11 Каждое отделение можно заполнять только одним материалом - либо золотом, либо серебром, либо бронзой, либо ничем (это выгоднее, чем заполнить отделение наполовину).
Можно представить, что отделение - это литейная форма-дорожка, которую потом полностью заливаем нужным металлом, и потом только распиливаем на слитки.
И здесь есть пара нюансов:

11.1 В отличие от обычного распила трубы неиспользованный остаток пропадает навсегда, т.е. после распила остаток (даже большой) не представляет никакой ценности. И это - огромные потери!

11.2 Предыдущий пункт вынуждает использовать два недешевых выхода из ситуации:
А) за свой счет (т.е. с резким падением прибыли) изготавливать часть деталей из обрезков более дорогого материала. Но это все равно выгоднее, чем выбрасывать неиспользованный обрезок.
Б) если же для обрезка не удается подобрать уже заказанную деталь - изготавливать деталь на будущее ("на склад"), но он уже итак доверху забит этими неликвидами.
   Поэтому с точки зрения описанной модели ценность такого слитка "на потом" будет тарифицироваться на 50% дешевле (выгоднее чем просто выкинуть, но еще выгоднее подобрать из заказанных).

Типичная ситуация - это когда при любых комбинациях получается, что есть одно отделение, наполовину заполненное золотом, и одно наполовину заполненное серебром.
Соответственно, обрезки (читай - потери) - космические. Поэтому приходится как бы пере-изготавливать серебренные слитки из золота, и компоновать одно общее отделение из золота.


Цель как и всегда - найти самое прибыльное решение - сколько Рюкзаков использовать, на какую ширину отделений настроить каждый из них,
какие отделения не использовать совсем (не выгодно), какие детали изготовить из более дорого материала.

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


Но основную суть задачи я вроде бы описал.
Если у Вас есть опыт решения таких комбинированных задач и Вы готовы пообщаться со мной на эту (вернее уже реальную) тему часа полтора - пишите.
Созвон по скайпу или зуму - чтобы я мог показывать экран.
траблы с unicode
 
Привет всем!
Про проблематику с unicode тему-сборку прочитал и ни раз, но мало что понял. В общем для меня эта тема упорно сложная.

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

Поэтому если кто поможет коротким советом с конкретным файлом, сокращенным мной до 1 ячейки - буду благодарен.
Изменено: Alex-M - 16.02.2024 22:27:23
[ Закрыто] Вопросы от old-скульного Excel-щика
 
Добрый день!
Всех с наступившим Новым Годом!
Здоровья и удачи во всех делах!

Как известно, новый год - очередной шанс что-то поменять. Вот и я решил попробовать что-то новое.

Сам Excel изучил где-то в 1998 - сразу после института. Изучил хорошо, использую каждый день.
VBA освоил многим позже. Дома несколько компов. Т.к. придерживаюсь концепции
"любой хаос должен быть однообразен" на всех компах стоит
win10 pro и 32битный офис 2013. Ну чтобы не ловить глюков/разночтений в макросах,
в которых иногда используются всякие там директивы, в которых я не сильно секу.

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

Буду благодарен, если кто-то компетентный подскажет:
1. Все-таки можно одновременно юзать на одном ПК 2013 и 2021 Excel? Ну чтобы постараться сделать переход мягким.
2. Какой сейчас наиболее дешевый из относительно честных способов получения лицензии офиса 2021 без троянов и риска
    дискредитировать свой ЛК майкрософт, в котором все-таки куча лицензий. Хотя понимаю куда идет этот мир и что никаких прав
    российских потребителей США соблюдать не будет.
 
QUIK API TRANS2QUIK
 
Привет всем!

К торговому терминалу QUIK есть API TRANS2QUIK.dll

Раньше она была версии 1.2, сейчас 1.3

Для 1.2 есть примеры на VBA Excel, но я так понимаю, что они уже не стыкуются с текущей версией QUIK.
Версия 1.3 вроде как актуальная, но в ней нет примеров на VBA Excel.
Хотя разработчики QUIK уверяют, что пример из 1.2 подойдет.


Потыркался сам с часок - что-то не сильно продвинулся. :(

В общем, нужна помощь в запуске мини прототипа - выставить заявку, узнать ее статус, снять заявку.
Excel 32 бита.
Делать это через текстовые файлы импорта транзакций в QIUK я умею, но как то совсем уж древнее.
Вот хотелось бы выйти на "новый уровень", а он, гад, не пускает :)

Всем удачного дня!
Нажать кнопку на сайте трейдингвью
 
Добрый день!

На сайте https://www.tradingview.com/screener/ нужно силами VBA нажать кнопку "Export screener data to a csv file" (кнопка "скачать" - со стрелочкой вниз).

Темы по этому вопросу на данном форуме прочитал, и сам вроде неплохо пишу на VBA, но в вебе - совсем дуб. Я даже что искать то в коде страницы не понимаю.
"И где же у него кнопка?" ;)

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

Алексей
Ошибка при использовании ChartDirector
 

Привет всем!

Коллеги, нужна ваша помощь.

Для более эффективного рисования диаграмм скачал внешний компонент ChartDirector. Имхо очень достойно сделан. Вот только у меня руки, видать, кривые. Т.к. примеры работают, но как только я пытаюсь сделать что-то аналогичное – почему-то не получается.

Поэтому сдаюсь и прошу о помощи. Если надо - на возмездной основе, к примеру  1 т.р., т.к. подозреваю, что ответ скорее всего до смешного прост.

Итак, последовательность действий.

1.       К сожалению, сначала надо поставить вышеуказанный внешний компонент. Понимаю, что это не айс, но по-другому никак.
http://www.advsofteng.com/download.html
ChartDirector for ASP/COM/VB , Software and Documentation

2.       Потом берем тестовый файл «cd_excel_demo4», выложенный техподдержкой. Он прекрасно работает. Для этого файл надо открыть и на листе Sheet1 в 18й строке в одной из ячеек поменять циферку. Диаграмма (вернее, рисунок) тут же перерисуется. Здесь все ок.

3.       Потом берем файл «Мой тест2», в котором, по сути, находится тот же самый код. Но почему то он не работает.

Поможите, люди добрые – подскажите, где я туплю.

Кстати, кто знает – как Excel определяет «язык» файла (т.е. создает ли он Диаграмма1 или Chart1)? Это, конечно, не ответ на мою проблему, но просто интересно.

Создание своих нестандартных диаграмм
 
Доброго всем дня и с наступающим праздником Победы!

Возникла задача - создать нестандартные диаграммы. С учетом того, что аналогичная и гораздо более простая задача пару лет назад не была решена штатными инструментами Excel (изменить тип диаграммы для ряда и т.п.), сейчас даже пытаться не буду сделать это таким образом - понимаю, что надо рисовать самому.
Может ли кто-то поделиться хоть какой-нибудь информацией касаемо сторонних графических библиотек для построения диаграмм, а то самостоятельный поиск в гугле, к сожалению, к успеху не привел. Возможно, не то ищу (очевидно что шансы есть только в англоязычной части интернета).

Заранее благодарен за любую помощь!
Корпоративный стандарт: Excel 2013 vs 2016, выбор версии Excel
 
Доброго времени суток!

Ситуация обычная - в компании зоопарк версий офиса и хочется привести все к единому стандарту. Выбор идет между 2013 и 2016.
Лично для меня важна стабильность и скорость работы с VBA и большими файлами. Но, не смотря на то, что компания достаточно крупная (несколько сотен пользователей), вынужден признать, что таких как я - единицы.

Пока склоняюсь оставить 2013, т.к. есть ряд макросов, написанных на нем, и не хочется ими рисковать. А те новшества, что есть в 2016 - имхо не такие существенные + далеко не все партнеры имеют 2016, т.е. существуют риски отправки, к примеру, новых диаграмм, которые партнер открыть не сможет. Начнутся лишние вопросы...

Результат поиска на форуме - несколько аналогичных тем (парочка даже свежих), но информация для явного, осознанного выбора имхо не раскрыта, возможно из-за того, что разница действительно не такая значительная. Поэтому вынужден обратиться за помощью к аксакалам и тем, кто уже решил для себя данный вопрос -

- каковы на ваш взгляд 1-2 самых значимых плюса и минуса в переходе на 2016?
- ну и главное лично для меня - что возвращает функция isVBAProblem для аргументов: скорость, стабильность, совместимость? ;)

Заранее благодарен за любую помощь!
Изменено: Alex-M - 29.03.2017 09:28:38
Защита VBA кода. Новое решение - VBACompiler
 
Привет всем!

Рано или поздно, почти каждый разработчик сталкивается с вопросом защиты своего кода от нежелательного распространения.
Данная тема поднимается периодически. На мой взгляд, самая толковая информация была здесь - http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=45829&TITLE_SEO=4...

На ее основании я остановил свой выбор на DoneEx. Немного погонял - вроде работает четко. Нравится максимальный уровень защиты. Не нравится то, что это предполагает распространение своих наработок в виде exe-файла. Все-таки не каждый решится использовать чужой exe (хотя, с точки зрения злодеяний - навредить можно  и VBA-кодом, но его хотя бы можно отключать). Да и размер файла большой. В общем, exe-формат как-то напрягал. Но за неимением лучшего, решился все-таки на приобретение решения от DoneEx.

И вот захожу я на http://doneex.com/ дабы оплатить это чудо (в хорошем смысле), как вижу новую кнопочку - мол есть новый продукт.
Перехожу на http://vbacompiler.com/, изучаю (сайт пока что откровенно лаконичен).
Решение - давняя моя (и не только) мечта - макросы (вернее их Си-версия) переносятся в DLL-ку!

А мне как раз срочно надо распространить один свой файл, но только так чтобы он дальше не пошел. В итоге я на эмоциях и цейтноте решился сразу взять новый продукт. Все-таки решение гораздо красивее и логичнее. К сожалению, именно мой файл он "кушать" отказался, даже после исправления мной пары ошибок. Выслал разработчикам - все-таки бетта-версия. Уже через сутки прислали ссылку на новый релиз. Теперь компиляция проходила успешно. Но во время работы файл "падает". Еще причину не понял, но пока грешу на себя - возможно, где-то обнуляющие set-ы не использую, плюс у меня для он-лайн обновления данных используется несколько кривое, поспешное решение через постоянный запуск процедуры самой себя через OnTime. В общем буду искать ошибки и помогать разработчикам. С учетом того, что они смогли сотворить в первом своем продукте - в успехе даже не сомневаюсь.

О результатах обязательно проинформирую. Все-таки выход практически компилятора VBA считаю значимым событием. Хочу также убедить разработчиков добавить функцию не изменять (не шифровать) имена процедур/функций, т.к. я бы лично значительную часть своих вспомогательных библиотек с большой радостью таскал не в коде, а в виде DLL. Даже не защиты ради, а ради облегчения взгляда на код.
Открытие кода модуля в текущем окне
 
Добрый день.
Сильно не бейте и не смейтесь - и на старуху бывает проруха. :(
Программирую на VBA несколько лет, и органически привык к тому, что при двойном щелчке имени модуля у меня в окне редактора появляется его код, скрывая (как минимум - визуально) код модуля, который я редактировал до этого.
Вчера переустановил офис. Сегодня срочная работа, а я уже 40 минут борюсь с тем, что при двойном щелчке имени модуля его код выскакивает в новом окне. Этот каскад окон дико раздражает и отвлекает от работы.
Галки всякие потыкал, руководство прочитал - не помогло.
Поможите, пожалуйста, люди добрые. ;)
Ускорение работы в офисных программах с помощью программируемых кнопок игровых мышек
 
Ситуация банальна - пришла пора купить мышь, ибо обе (на работе и дома) лоджитечки 705 как то вдруг одновременно приказали долго жить.
К мышке привык, но т.к. покупал недавно и в аккурат на пике курса, то решил применить "ответные санкции" и устроить конкурс, а не просто автоматом взять ту же модель.
Беглый просмотр обзоров натолкнул на мысль пересмотреть свое отношение к программируемым кнопкам.
Так как именно благодаря этому форуму научился более-менее кодить макросы, и даже уже начал хулиганить в outlook, то вот решил здесь и задать свой вопрос:

имеет ли кто-нибудь практику использования программируемых кнопок мышки (к примеру лоджитеч g600) для вызова часто используемых команд или макросов, своих или plex?

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

Или же я перемудриваю?
Ошибка при использовании .SpecialCells(xlCellTypeBlanks)
 
Вот, нарвался на глюк. Может кому поможет. Беглый поиск по форуму явных аналогов не выявил, но если не так - не судите строго.

Ситуация достаточно типичная - после формирования силами VBA сводной таблицы и вставки на ее же место ее же значений возникает потребность заполнить пустоты полей области строк. Это делается заполнением всех пустот формулой, которую я называю "см.выше" (т.е. значение поля надо продублировать вниз на все строки этого поля - пока не встретится новое значение по данному полю). Это приводит наполнение сводной таблицы в нормализованный вид, пригодный для разного рода отчетов, ожидающих в каждой строке зоны данных увидеть заполненные данные в каждом столбце.

В общем вместо:

Код
Отдел А    Иванов
         Петров
         Сидоров
Отдел Б
          Власов
          Тарасов
          Кузьмин

Получаем:
Отдел А    Иванов
Отдел А    Петров
Отдел А    Сидоров
Отдел Б    Власов
Отдел Б    Тарасов
Отдел Б    Кузьмин


Код одолжен из книги, поэтому я был в нем уверен на все 100%:
Код
 
    FinalReportRow = WSD.Range("R1048576").End(xlUp).Row
    
    With Range("O2").Resize(FinalReportRow - 1, 1)
        With .SpecialCells(xlCellTypeBlanks)
            .FormulaR1C1 = "=R[-1]C"
        End With
        .Value = .Value
    End With




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

Глюк имел плавающий характер - данных 400 тысяч строк, импортированных из текстового файла, что и усиливало желание найти "левый символ"  ;)  . В итоге методом половинного деления за 2,5 часа я его вычислил с точность до 10 строк. А потом - хвать, а демонов то и нет. Заполнение этих строк любыми другими (даже из уже прошедших проверку частей) также приводит к сбою. Потом я воспользовался гулглом, и нашел описание данного глюка.
http://support.microsoft.com/kb/832293/ru

Вывод - гугл круче клоуна с половинным делением  :)  , поэтому если ошибка не лечится за 20 минут - разумно потратить 2 минуты на погуглить. Ты понял, Леша? (это я себе  :)  )

ЗЫ. Больше всего понравился статус глюка в базе данных Microsoft - прям вспоминается программистская байка - "если в вашей программе обнаружили глюк, не спешите его исправлять - позиционируйте его как уникальную особенность вашего программного продукта"  :)
Куплю книги по VBA Excel 2007. Дорого.
 
Друзья!
Так уж вышло, что на "старости лет" возникла потребность изучить VBA под Excel. Однако, в компании используется именно 2007 версия и менять ее не планируется. Я понимаю, что 2003 и 2010 не сильно отличаются от 2007. Более того - благодаря данному форуму я буквально за 2 суток практически изучил несколько книг (включая 2003 и 2010) и уже приступил к написанию нужной программы, на практике видя, что действительно все итак работает. + форум и гугл - ответят, наверное, на любые вопросы.

Но привычки тяжело менять - мат часть хочется знать именно той версии, в которой и предстоит работать. Лучше изначально научиться писать правильно - чтобы потом не переучиваться.
Поэтому очень хочется ознакомиться с двумя, как я понял, лучшими книгами именно по 2007:

Билл Джелен "VBA и макросы в Microsoft Office Excel 2007"
и
Джон Уокенбах Microsoft Office Excel 2007: профессиональное программирование на VBA.

Я достаточно изучил форум и понимаю, что эти книги - редкость, и даже в электронном виде их достать непросто, поэтому готов на любые варианты:
- бумажный
- бумажный сильно потрепанный
- электронный
- перевод с бумажного в электронный (владельцем или мной или за мой счет)
и т.п.

Заранее благодарен всем откликнувшимся и готовым реально помочь!

Также приношу извинения модераторам - если все же ошибся разделом. Обсуждать книги - там. Здесь - работа. А где купить книги - понимаю, что таких клоунов как я - с шилом в одном месте - немного и раздел не очевиден  :)  .
Изменено: Alex-M - 05.09.2013 23:16:23
Страницы: 1
Loading...