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

Страницы: 1
Совместимость .XLSB в разных версиях Excel?
 
Случилось странное. На работе начал писать макрос в Excel 2007. Вечером забрал xlsb-файл домой, поработал с ним в Excel 2021, и отправил себе обратно на рабочую почту. Утром, на работе, обнаружил что файл пришел битый, не открывается (обнаружено ... содержимое... восстановить? после восстановления - полностью поломанный файл - не хватает главного листа, куча каких-то левых листов, полностью слетевшее форматирование и т.п.). Грешил на майл.ру, но не поленился - сгонял домой, и привез файл на флешке. То же самое.
На соседней машине поднял офис 2021, убедился что файл там открывается нормально, пересохранил в .xlsm, перенес на рабочий комп - и всё норм, работает в 2007.
Вопрос!!! Чем xlsb в 2021 офисе отличается от xlsb в 2007? Или что ещё могло стать причиной такого глюка?
Изменено: Alexcx - 24.04.2025 15:38:58
условное форматирование таблицы из VBA, Глюк Excel?
 
Приветствую, господа.
Столкнулся с непонятным поведением excel, надеюсь кто-то окажется внимательнее и поймет что происходит.

Итак. Есть макрос, выполняющий определенные вычисления в таблице. На основании полученных итогов таблица должна быть раскрашена.
Чтобы точнее прицелится, ввожу в Immediate команду:
Код
? ActiveSheet.ListObjects("реестр").DataBodyRange.Cells(1,16).Address(0, 1)
$P6
пока всё правильно, мне действительно  нужно создать правило на основании клетки P6
Дописываю в конце макроса такой код:
Код
With ActiveSheet.ListObjects("реестр").DataBodyRange
 .FormatConditions.Delete
 .FormatConditions.Add Type:=xlExpression, Formula1:="=" & .Cells(1, 16).Address(0, 1) & ">0"
 .FormatConditions(1).Interior.Color = vbGreen
End With
Выполняю макрос, замечаю что клетки раскрасились как-то неправильно, и обнаруживаю, что в созданном правиле прописалась формула "=$P8>0"

Вручную исправляю эту формулу, вся таблица раскрашивается как надо.
Внимание, вопрос! В какой момент выражение, вычисляющееся в "$P6" вдруг выдало "$P8" ????
Изменено: Alexcx - 21.02.2025 09:05:45
range в массив, туплю
 
Коллеги, прошу подсказку. я то ли туплю, то ли путаю VBA с другим языком.
Задача: загнать range в массив.
Вроде бы тривиально:
dim arr
arr = [A1].resize(5).value
но на выхлопе получается двумерный массив (5,1),  то есть обращение типа msgbox(arr(3)) даст ошибку "subscript out of range", а нужно писать msgbox(arr(3,1)).
А можно ли одним оператором создать из одномерного range одномерный массив? Или для этого придется обходить заданный range циклом?
Изменено: Alexcx - 18.11.2024 16:30:06
суммирование макросом, нужен быстрый алгоритм
 
Привет, коллеги. Прошу помочь с алгоритмом, теоретической подготовки не хватает.

Суть в следующем. Есть книга с двумя (на самом деле гораздо больше) листами. На одном из них (назовем его Лист1)  несколько десятков или даже сотен тысяч записей, которые постоянно обновляются и пополняются копированием-вставкой из внешнего источника. Данные на этом листе не упорядочены, и содержат графы  "дата", "ID",  некая "сумма", и много всего прочего. На другом листе (Лист2) нужно макросом сформировать типа сводного отчета, в котором  данные первого листа подсуммируются по "дате" + "ID".
Есть рабочее решение, но оно слишком медленно, поэтому и прошу подсказки. Суть моего макроса состоит в том, что содержимое обоих листов считывается в два массива, потом двумя вложенными FOR даные суммируются  (внешний for пробегает больший массив1, а внутренний накапливает в меньшем массиве2 суммы по заданным условиям), затем меньший массив заливается обратно на Лист2 конструкцией типа cells(...).resize(...).value = arr. Этот макрос работает несколько минут, что очень долго, учитывая прочие условия задачи.
Со сводными таблицами знаком, в данном случае это неприменимо, потому что Лист2 имеет фиксированную разметку  - это  достаточно сложный  отчет, который нужно заполнить цифрами по одной  кнопке, нажатой пользователем.

С функцией СУММЕСЛИМН тоже знаком, но если её использовать на этом объеме данных, перерасчет всей книги на шести ядрах core i5-8500 c 16GB памяти занимает почти 2 минуты, что также недопустимо, т.к. перерасчет будет запускаться на каждое редактирование, фильтрацию и т.п. (application.calculation =xlcalculationmanual не предлагать, противоречит прочим неозвученным условиям)

В общем, требуется именно макрос, который будет работать по кнопке, и по возможности "мгновенно".
Накидайте пожалуйста идей или ссылок на описание, какой алгоритм суммирования по нескольким условиям самый быстрый. С реализацией в VBA буду разбираться сам. Спасибо.
Изменено: Alexcx - 27.05.2024 19:29:07
Страницы: 1
Наверх