| Цитата |
|---|
| написал: Если все формулы не верны - то значит та, что в одной строке - верна? |
Изменено: - 07.11.2025 12:14:27
|
06.11.2025 22:34:46
В одном году 31 536 000 секунд или 31 622 400 секунд если год високосный. Решение задачи зависит от того какой год брать, какой период считать месяцем, есть ли смещение часового пояса. Ваша цифра сама по себе имеет мало смысла без базовой даты от которой идет отсчет. Вероятно, у вас есть еще одна дата от которой идет отсчет, например Unix-дата (01.01.1970 в UTC)?
Изменено: - 06.11.2025 22:43:29
|
|
|
|
|
|
06.11.2025 22:16:58
Здравствуйте!
При удалении таблице DataBodyRange и создании новой строки, таблица откуда-то восстанавливает формулу столбца. Найти бы где она хранит эти формулы. Прикладная VBA-задача, например, может быть такой - выяснить соответствует ли формула в строке таблицы, общей формуле для всего столбца (при этом у всех ячеек столбца формула может быть не верна (при создании новой строки она была бы иная), а значит сверять формулы строк относительно друг-друга тупик. Хочется прямолинейно решить задачу, а не, например, через костыль, где я создаю дополнительную строку, смотрю ее формулы, а затем сношу)
Изменено: - 06.11.2025 23:16:15
|
|
|
|
|
|
14.10.2025 17:52:55
Sanja, великолепно!
Добавлю только что можно обернуть в Индекс чтобы работало без формулы массива:
|
|||
|
|
|
|
10.10.2025 19:16:42
Alex, Спасибо, очень познавательно! В целом решение, но не гибкое
|
|
|
|
|
|
10.10.2025 18:38:38
Здравствуйте!
Как задать массив как литерал прямо в ячейке чтобы потом это значение ячейки можно было скормить какой-либо формуле, принимающей массив? Я хочу где-то задавать массив как литерал (допустим, строковым типом, так как тип значения A1 это "строка"). Нужен механизм конвертации на уровне формул. Нужен какой-то способ сказать "Excel, тут в A1 не строка, а массив", пример. Решить нужно на уровне формул, доступных в Excel-2019 или ниже. Спасибо!
Изменено: - 10.10.2025 18:48:55
|
|
|
|
|
|
04.10.2025 13:38:23
Здравствуйте!
Мне нужно типо ВПР по двум искомым значениям, но не сам результат, а номер позиции, удовлетворяющий критериям (не важно первый он или последний). Также в примере какой-то косяк в работе ПОИСКПОЗ, когда умная таблица из одной строки. Я знаю, что формула =ПРОСМОТР(1;1/(B18=B24:B40);D24:D40) работает как впр и ее не нужно вводить как формулу массива, но мне нужен номер по массиву. Есть ли более удачный вариант формулы, чем моя ПОИСКПОЗ, желательно работающий как обычная формула (не массива), как это демонстрирует ПРОСМОТР? |
|
|
|
|
|
09.09.2025 17:03:57
Понял, спасибо. Решение через временный файл держал в уме, но искал способ чище. Извините что привередничаю, ваши сообщения полезны, если что пойду одним из этих путей, если ничего лучше нет. В целом, я готов вообще радикально пересмотреть код, я в первом сообщении дописал задачу, которую преследую, вот: Мне нужно импортировать группу листов из другого файла и сохранить их формульные связи друг на друга. Кроме того, я не могу удалять старый лист и заменять его новым, т.к. это руинит формульные связи других листов к такому листу. Приходится действовать через Cells.Copy и Cells.PasteSpecial чтобы формулы ссылающиеся на лист выжили после того как он изменит данные. Я бы с радостью изменил код на что-то другое, раз тут есть проблемы с подменой связей, но озвученное выше должно соблюдаться. Надеюсь, не слишком субурно описал Может не нужно было действовать через Cells.Copy и Cells.PasteSpecial и нужно было завозить данные как-то по другому чтобы не получать эти связи с донором, а потом бороться с ней. Но ничего умнее в голову не пришло
Изменено: - 09.09.2025 17:13:20
|
|||
|
|
|
|
09.09.2025 15:35:39
МатросНаЗебре, разумеется второй вариант будет работать если связь локализуется в ячейках! Спасибо за ваши идеи, но может есть вариант проще чем обходить каждую ячейку. Если честно мне проще оставить проблему как есть и убедить пользователей избегать квадратных скобок в нейминге файлов чем чекать все ячейки импортируемых листов (что-то мне претит заниматься этим, наверное предрассудки что так не должно быть). Да, можно оптимизировать ваш код и чекать только формульные ячейки, но все равно выглядит подозрительно и с таким кодом иметь дел не хочется. В общем, я думал что человечество уже нашло элегантный способ решения этой проблемы, пойди на форум и забери его
Изменено: - 09.09.2025 15:44:30
|
|
|
|
|
|
09.09.2025 15:27:15
Изменено: - 09.09.2025 15:30:20
|
|||
|
|
|
|
09.09.2025 14:58:49
Здравствуйте! Возникает такая проблема, смотрите вложенный файл. Я не могу контролировать какие имена задают файлам пользователи поэтому совет "просто переименуй" не работает.
------------------------------------------------------------------------------------------------------ (Добавлено спустя) Мне нужно импортировать группу листов из другого файла и сохранить их формульные связи друг на друга. Кроме того, я не могу удалять старый лист и заменять его новым, т.к. это руинит формульные связи других листов к такому листу. Приходится действовать через Cells.Copy и Cells.PasteSpecial чтобы формулы ссылающиеся на лист выжили после того как он изменит данные. Я бы с радостью изменил код на что-то другое, раз тут есть проблемы с подменой связей, но озвученное выше должно соблюдаться. Надеюсь, не слишком субурно описал
Изменено: - 09.09.2025 15:57:41
|
|
|
|
|
|
05.06.2025 13:28:17
nilske, попробуйте еще сделать так, пкм по файлу и в его свойствах разблокировать, вдруг у вас макросы блокируются для файлов из интернета. Я с трех компов вижу эту ошибку
Изменено: - 05.06.2025 13:29:22
|
|
|
|
|
|
05.06.2025 13:15:41
nilske, возьмите файл sokol92 и проделайте действия, который я ему описал, у него не получалось, но следуя данным шагам он смог воспроизвести, вот:
Для этого я прямо в вашем файле переименовал функцию, стал в ячейку A2 и нажал enter для пересчета ячейки в локальную ошибку #ИМЯ?, после чего вернул старое имя функции и закрыл файл с сохранением изменений. При повторном открытии увидел "разрушительный сбой". Переименовывать функцию нужно в модуле VBA, а не в ячейке.
Изменено: - 05.06.2025 13:23:16
|
|
|
|
|
|
05.06.2025 00:57:17
Есть ли у вас что добавить касательно файлов .xlsb? Остаются ли они островком безопасности, как кажутся на первый взгляд, для тех, кто хочет работать с UDF и умными таблицами или бинарный файл тоже деградирует, но по тихому? (Я в курсе, что в .xlsb не возникает разрушительного сбоя, но это совсем не означать, отсутсвие деградации структуры на уровне бинарного файла). Самое неприятное в этой истории, что люди из моего коллектива нашли другой неизвестный путь к разрушительному сбою в новом файле и он исключает редактирование имени макроса в VBA модуле (они его не посещали, доверяя коду разработчика, но тем не менее заруинили файл через разрушительный сбой). Я пробовал добавлять строку в таблицу в эксель с подавленым макросом чтобы в новой строке было #ИМЯ? и открывать файл с включеным макросом, но это не вызывает проблем и на первый взгляд проходит гладко. Я бы успокоился, но я знаю, что есть какой-то более короткий способ и меня это беспокоит так как у меня в проде xlsm+таблица+udf и потенциально у нас в зоне риска много форумчан. Желательно формализовать проблему с ракурса как без посещая модуль VBA, люди, ничего не знающие про VBA тоже могут прийти к аналогичной проблеме путем прямой работы с таблицей. Я видел пару таких случаев на слабой машине, когда было открыто много эксель-файлов. Открытие моего файла сопровождалось разрушительным сбоем, пока небыло сокращено число открытых файлов на машине. Потенциально это второй способ руинить новый файл, но мне тяжело его воспроизвести и указать конкретные шаги как прийти к проблеме. Могу только добавить, что тот файле также представлял связку xlsm+таблица+udf. Вероятно, я теперь хочу пересесть на xlsb, который видится мне более стабильным, но уверенности в этом нет и вероятно мне нужна помощь того, кто может справоцировать проблему в xlsm на своей машине (так как не у всех, судя по отзывам, она появляется) после чего повторить действие для xlsb и проверить пледовательность 0 и 1 бинарного файла на идентичность после повторного открытия файла в условиях, где xlsm выдавал разрушительный сбой. Я думаю, это единственный верный способо наделить xlsb титулом "островок безопасности", просто ориентироваться на сообщение о разрушительном сбое не столь надежно, т.е. xlsb мог бы маскировать проблему, но быть корумпированым ей. p.s. Я не вижу для себя выхода в попытке связаться с разработчиками продукта Excel, так как в случае успеха, мой работодатель не сменит версию Excel в ближайшее время и мне нужно адаптироваться к существующей среде, а не ждать обновлений от MS. Кроме того, я не смогу зарегламентировать посещение публичного файла в сети и непускать в него пользователей эксель с неподходящей версией
Изменено: - 05.06.2025 01:44:05
|
|||
|
|
|
|
04.06.2025 17:16:48
sokol92, спасибо, за ваше участие. Я открыл ваш файл и проблема не возникла. Но сделать на основе этого файла разрушительный сбой удалось. Для этого я прямо в вашем файле переименовал функцию, стал в ячейку A2 и нажал enter для пересчета ячейки в локальную ошибку #ИМЯ?, после чего вернул старое имя функции и закрыл файл с сохранением изменений. При повторном открытии увидел "разрушительный сбой". Windows 10 Pro 64x разрядный, Excel-2019 (64 бит)
Изменено: - 04.06.2025 17:27:50
|
|
|
|
|
|
04.06.2025 16:47:49
В исходном файле проблему вызывает функция с совершенно другим названием и оно не из зарезирвированных слов, даже если api объекта FSO причислить к таковым. Выше я указал, что упрощал файл ошибки и доупрощался до того, что от старой функции нет ничего, даже ее имени, т.к. старое имя не продолжало нести смысла в виду сильных упрощений. Я думаю, причина не в этом, хотя замечание верное и я мог бы подобрать имя для примера более аккуратно не создавая двусмысленности и ассоциаций с системными утилитами. Вероятно, вы смогли бы убедиться в том, что дело вовсе не в текущем имени функции на более старой версии MS Office. Уже двое отписались что на 365 ошибки не возникает. Естественно, не понимая природы данной ошибки я был вынужден экперементировать не только с именами функций, но и именами и типами аргументов и типами возвращаемого результата. Уверяю вас, дело не в текущем имени функции, я перебрал достаточно имен, чтобы быть уверенным в этом.
Изменено: - 05.06.2025 00:46:00
|
|||
|
|
|
|
04.06.2025 13:42:16
Приветствую!
Скачайте пример, зайти в единственный модуль макроса VBA, переименуйте функцию ‘GetText_’ убрав нижнее подчеркивание в конце имени функции. Закройте файл сохранив изменения и при повторном открытии у вас возникнет «Разрушительный сбой», если работа макросов не подавлена. Файл-пример можете создать сами, если думаете, что дело в специфичных особенностях примера, новый файл будет работать с тем же эффектом в виде разрушительного сбоя, для этого в новом файле сначала создайте таблицу, в единственной строке которой укажите формулу ‘=GetText()’, затем вставьте модуль vba и код функции GetText, закройте файл сохранив его как .xlsm Тестировалось на пакетах MS Office 2016 и 2019, 64-бит, на разных машинах. Теперь вопрос. Разумеется, обнаружил этот способ не от хорошей жизни. Часто ломается файл, где в умной таблице есть формулы с UDF, не зная как решить проблему, я упрощал и упрощал пример ошибки до минимально работающего набора, который ее провоцирует и он перед вами. Я не могу отказаться от умной таблицы и от UDF и от файла .xlsm, но вместе эти три сущности, кажется, не уживаются, что делать, сталкивался ли кто?
Изменено: - 05.06.2025 00:21:14
|
|
|
|
|
|
14.01.2025 15:05:06
БМВ,
А если вы будете удалять и добавлять элемент заново и таким образом добиваться сортировки (типо сортировки пузырьком, но снизу), то тоже самое можно делать и в Dictionary.
Изменено: - 14.01.2025 15:13:40
|
|||||
|
|
|
|
13.01.2025 12:47:16
То это долгий старт для Dictionary и тогда понятно почему вам приходится говорить о разительной разнице. Для себя решил отказаться от такого способа создания словарей.
Изменено: - 13.01.2025 12:55:07
|
|||||
|
|
|
|
13.01.2025 07:44:48
testuser, это понятно, что выгрузку ключей лучше переиспользовать. Вопрос был другой - эффективность ColKeys, пример которой вы привели, в плане производительности. Сильно уступает методу keys(), который у Dictionary (при равном наборе ключей и значений)? Или призводительность сопоставима и переписав проект, избавив его от Dictionary, я не получу жесткой просадки производительности в части .keys() функционала? Вы не тестировали ее в плане перформанса?
Изменено: - 13.01.2025 07:51:27
|
|
|
|
|
|
13.01.2025 02:23:51
Изменено: - 13.01.2025 02:34:55
|
|||
|
|
|
|
13.01.2025 01:30:21
testuser, БМВ, спасибо огромное! То, что нужно!
Скажите, а в плане производительности это сопоставимо с Dictiory.keys()? Без учета накладных на первоначальное создание самого объетка Dictiory или коллекции, ключи которого получаем. Что скажете, подходит ли этот функционал для широкого использования, аналогично Dictiory.keys()? Например. Задумал заменить в своем проекте все Dictionary на Коллекции. Мотивация - опасное поведение Dictionary при обращении к значению, он добавляет ключ, если его не было, даже тогда, когда я предпочел бы ошибку. Проект покрыт проверками Dictionary.Exists с функционалом выброса ошибки, если ключа нет, коллекция делала бы выброс ошибки по-умолчанию, что избавляет меня от нудных танцев с Dictionary и неочевидного Debugа. Аналог .keys() для коллекций потребовался чтобы не городить дополнительный уровень вложености коллекции, хранящей Row таблицы (в отличии от Dictionary, Row в виде коллекции не может сообщить к каким столбцам она хранит значения из-за чего где-то в верхнеуровневом коде нужно выписывались названия столбцов или же хранить их в общей структуре DSetWithMeta с полями "rows", "columnNames". Т.е. образовался дополнительный уровень вложенности в сравнении с Dictionary). Пример с Row не единственный, а лишь один частный случай, но очень часто Dictionary подкупает именно тем, что имеет метод .keys(), который в отличии от метода exists() сложно реализовать для коллекции (но благодаря вам, кажется, это теперь стало возможным).
Изменено: - 13.01.2025 02:19:55
|
|
|
|
|
|
15.12.2024 21:16:47
New, спасибо! Я в итоге к тому же пришел, только кода в реальный проект чуток более пришлось написать - приходится обрабатывать возможную ошибку и возвращать итоги на место даже если .ListRows.Add провалился. А что там на уровне проблемной таблицы сломано так и не понял, вероятно, таблице переписали стиль, это можно сделать, например, если задать формат на уровне столбца, а затем попытаться вернуть формат таблицы обратно простым форматированием ячеек (это не удастся без таких вот последствий).
Изменено: - 15.12.2024 22:47:48
|
|
|
|
|
|
14.12.2024 01:34:50
Привет! У двух умных таблиц разное поведение в части форматирования итогов при удалении макросом DataBodyRange.
Одна не сбрасывает формат итогов, другая сбрасывает. Внешне таблицы выглядят абсолютно одинаково и я хотел бы понять в чем дело и как сделать чтобы вторая таблица прекратила переустанавливать формат итогов. При ручном удалении разницы между таблицами не возникает, не ясно почему разница возникает только при удалении макросом. Смотрите Лист1 и Лист2 в файле-примере.
Изменено: - 14.12.2024 01:59:55
|
|
|
|
|