Дмитрий(The_Prist) Щербаков, идея рабочая, спасибо, в эту сторону не думал. Можно даже сообразить UDF , которая будет выводить соответствующее число этих звездочек. Это я уже сам справлюсь
Изменено: - 18.11.2025 17:57:02
|
18.11.2025 17:56:06
Дмитрий(The_Prist) Щербаков, идея рабочая, спасибо, в эту сторону не думал. Можно даже сообразить UDF , которая будет выводить соответствующее число этих звездочек. Это я уже сам справлюсь
Изменено: - 18.11.2025 17:57:02
|
|
|
|
|
|
21.02.2025 12:01:31
Дмитрий(The_Prist) Щербаков, точно, помогло, спасибо.
Но смысл косяка остался где-то за границей понимания. Видимо придется просто запомнить. |
|
|
|
|
|
21.02.2025 08:49:15
Приветствую, господа.
Столкнулся с непонятным поведением excel, надеюсь кто-то окажется внимательнее и поймет что происходит. Итак. Есть макрос, выполняющий определенные вычисления в таблице. На основании полученных итогов таблица должна быть раскрашена. Чтобы точнее прицелится, ввожу в Immediate команду:
Дописываю в конце макроса такой код:
Вручную исправляю эту формулу, вся таблица раскрашивается как надо. Внимание, вопрос! В какой момент выражение, вычисляющееся в "$P6" вдруг выдало "$P8" ????
Изменено: - 21.02.2025 09:05:45
|
|||||
|
|
|
|
04.12.2024 13:33:21
Всего лишь:
И обратно массив сливается одной строчкой:
|
|||||||
|
|
|
|
18.11.2024 17:09:35
Изменено: - 18.11.2024 17:10:20
|
|||
|
|
|
|
18.11.2024 16:24:40
Коллеги, прошу подсказку. я то ли туплю, то ли путаю VBA с другим языком.
Задача: загнать range в массив. Вроде бы тривиально: dim arr arr = [A1].resize(5).value но на выхлопе получается двумерный массив (5,1), то есть обращение типа msgbox(arr(3)) даст ошибку "subscript out of range", а нужно писать msgbox(arr(3,1)). А можно ли одним оператором создать из одномерного range одномерный массив? Или для этого придется обходить заданный range циклом?
Изменено: - 18.11.2024 16:30:06
|
|
|
|
|
|
31.05.2024 06:11:29
Да, так работает. А не получается вот так:
Приходится делать через промежуточный массив:
|
|||||||
|
|
|
|
29.05.2024 12:42:52
Это мощно. Переписал свой макрос со словарем. Мало того что он работать стал на порядок быстрее, так ещё и код в три раза компактнее получился:
Может и не идеально, но скорость меня уже устраивает. То что раньше работало до 10 минут, выполняется в пределах 3-5 секунд. Ура. Благодарю за подсказку sokol92, БМВ, Jack Famous, А не подскажете ли ещё, если в словарь добавить массив, как адресоваться к его элементам? У меня не получилось. Например: dic1.Add key1, array(10, 20, 30) msgbox Dic1.Item(key1)(1) Результат - 0.
Изменено: - 29.05.2024 12:43:51
|
|||
|
|
|
|
27.05.2024 19:02:58
Привет, коллеги. Прошу помочь с алгоритмом, теоретической подготовки не хватает.
Суть в следующем. Есть книга с двумя (на самом деле гораздо больше) листами. На одном из них (назовем его Лист1) несколько десятков или даже сотен тысяч записей, которые постоянно обновляются и пополняются копированием-вставкой из внешнего источника. Данные на этом листе не упорядочены, и содержат графы "дата", "ID", некая "сумма", и много всего прочего. На другом листе (Лист2) нужно макросом сформировать типа сводного отчета, в котором данные первого листа подсуммируются по "дате" + "ID". Есть рабочее решение, но оно слишком медленно, поэтому и прошу подсказки. Суть моего макроса состоит в том, что содержимое обоих листов считывается в два массива, потом двумя вложенными FOR даные суммируются (внешний for пробегает больший массив1, а внутренний накапливает в меньшем массиве2 суммы по заданным условиям), затем меньший массив заливается обратно на Лист2 конструкцией типа cells(...).resize(...).value = arr. Этот макрос работает несколько минут, что очень долго, учитывая прочие условия задачи. Со сводными таблицами знаком, в данном случае это неприменимо, потому что Лист2 имеет фиксированную разметку - это достаточно сложный отчет, который нужно заполнить цифрами по одной кнопке, нажатой пользователем. С функцией СУММЕСЛИМН тоже знаком, но если её использовать на этом объеме данных, перерасчет всей книги на шести ядрах core i5-8500 c 16GB памяти занимает почти 2 минуты, что также недопустимо, т.к. перерасчет будет запускаться на каждое редактирование, фильтрацию и т.п. (application.calculation =xlcalculationmanual не предлагать, противоречит прочим неозвученным условиям) В общем, требуется именно макрос, который будет работать по кнопке, и по возможности "мгновенно". Накидайте пожалуйста идей или ссылок на описание, какой алгоритм суммирования по нескольким условиям самый быстрый. С реализацией в VBA буду разбираться сам. Спасибо.
Изменено: - 27.05.2024 19:29:07
|
|
|
|
|