При написании простейшего кода столкнулся со странностью - при использовании переменной типа integer и приравниванию к ней значения пустой ячейки, длина данной переменной через len = 2.
Подскажите, в чем дело, чтобы не попадаться на такое в будущем. Спасибо!
Изменено: - 27.04.2016 13:39:49
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
Пользователь
Сообщений: Регистрация: 27.02.2013
26.04.2016 17:05:08
Добрый вечер, уважаемые!
Стоит следующая задача - необходимо выгрузить данные из закрытых книг в целевую книгу. При выгрузке, книга открывается, из нее данные вставляются в строку целевого файла, книга закрывается, после чего в целевом файле происходит смещение на 1 строку вниз и цикл повторяется. Некоторые книги могут иметь схожее название, отличающееся лишь идентификатором (например, А_2010, А_2011, Б_2010). Необходимо выгрузить данные так, чтобы книги с одинаковым общим названием выгружались в одну строку (смещения не происходило).
Выгрузка у меня реализована должным образом, но вот никак не могу сделать это проклятое объединение строк. Прикрепляю пример того, что нужно получить (при этом суммировать значения объединяемых данных не нужно) Выглядит это все как задача извлечения уникальных значений массива (я уже вставил макрос, уважаемого ), но есть одна тонкость - в этом примере исходные данные уже введены, в то время как в моем случае они подгружаются по одному - не знаю как сделать пример, чтобы отражалась именно моя проблема.
В случае необходимости пришлю рабочий файл (здоровенный и туманный) Спасибо!
Метод Application.Match со ссылкой на другую книгу, ошибка в коде
Пользователь
Сообщений: Регистрация: 27.02.2013
08.04.2016 18:51:00
Добрый вечер!
Уже несколько часов бьюсь над кодом, не могу понять в чем ошибка. Помогите разобраться, пожалуйста.
Сама ошибка сидит в модуле "Vlookup", в блоке "поиск №столбца с годом". Там используется метод Application.Match, который не находит нужные значения (и, судя по всему, вообще не работает, хотя его отдельные составляющие функционируют как надо). Проверку провожу при помощи MsgBoxa, который и выкидывает ошибку.
Сам макрос должен загружать данные из другой книги, поэтому скидываю 2 файла (при запуске макроса нужно выбрать файл с данными).
Спасибо!
Помощь в доработке макроса
Пользователь
Сообщений: Регистрация: 27.02.2013
01.04.2016 15:28:15
Добрый день!
В продолжение темы на форуме
К сожалению, все оказалось не так радужно. При попытке адаптировать вариант уважаемого Sanja к своим нуждам, у меня возникли следующие проблемы: 1) при работе первого макроса, выгружающего данные из файлов-исходников, происходит конфликт с макросом модуля листа, что приводит к бесконечному (или конечному, но требующему более 5 минут) циклу пересчета изменяющихся значений, и их постоянному перемножению (критично). 2) при обработке введенных ранее значений, макрос из модуля листа работает исключительно долго, пересчитывая 32 значения около 10 секунд (неприятно, но терпимо) 3) при попытке изменения более 2 ячеек одновременно происходит пересчет всего столбца, вне зависимости от прописанных условий (неприятно, но терпимо)
Путем измышлений я пришел к следующим возможным решениям: а) Основной макрос при выгрузке изменяет значение "-" (введенное по-умолчанию) на один из вариантов "млн / млрд". Для решения этой проблемы нужно как-то задать очередность выполнения макросов, чтобы модуль листа работал только после загрузки данных основным макросом, т.е. после первого изменения значения "-" на значение "млн/млрд", т.е. нужно как-то объявить переменные в 1 макросе и счетчики количества их изменений, которые привязать к модулю листа; б) Для решения второй проблемы нужно как-то перенести тело макроса листа в отдельный модуль, оставив на листе исключительно вызов этого макроса при выполнении условия а)
Просидев часов 5 над решением этих задач, я понял, что знаний у меня резко недостает, поэтому готов рассмотреть вариант платной помощи уважаемых гуру, в случае, если задача излишне трудоемкая.
По запросу могу выслать образец файла-исходника для загрузки данных. Нужно только это, оптимизация уже написанного кода не обязательна. В общем-то, я бы удовлетворился и советом с форума о механизме реализации задачи, но, к сожалению, нет времени ждать. Напишите приблизительную цену.
Спасибо!
Изменено: - 01.04.2016 16:47:21
Выполнение части макроса при изменении соответствующих ячеек
Пользователь
Сообщений: Регистрация: 27.02.2013
31.03.2016 16:35:31
Добрый день!
Немного дурацкое название темы, но оно лучше всего отображает проблему.
Предыстория следующая - в целевой файл выгружаются данные из нескольких источников, каждому столбцу целевой таблицы соответствует свой файл-источник. В разных источниках могут быть разные измерители (млн/млрд). В макросе, выгружающем данные, реализована выгрузка измерителя, вставляющегося сразу в выпадающий список (млн/млрд) в шапке каждого столбца.
Необходимо: написать макрос, который бы при изменении измерителя в выпадающем списке на лету пересчитывал значения соответствующего столбца (домножая или деля их на 1000). Важно, чтобы данный макрос выполнялся только при ручном изменении значения в выпадающем списке (а не при выгрузке значений из первоисточников первым макросом), и применялся только к соответствующему столбцу (а не ко всей таблице).
В настоящий момент реализовано домножение/деление данных при изменении значения выпадающего списка, но я не знаю, как ограничить макрос исключительно тем столбцом, в котором произошло изменение измерителя. (пример во вложении)
Поиски навели меня на конструкцию If Not Intersect(Target, Range)) Is Nothing Then, но мне она не совсем понятна.
Подскажите, пожалуйста, как можно решить проблему. Спасибо!
Автозамена в формулах незащищенных ячеек
Пользователь
Сообщений: Регистрация: 27.02.2013
28.03.2016 16:53:32
Добрый день, уважаемые! Традиционно не обнаружил ответа через поиск, поэтому создаю тему.
Ситуация следующая: при защите листа и отмене защиты некоторых ячеек, в данных ячейках возможно изменение как значений, так и формул вручную. Однако при попытке изменений формул в данных ячейках при помощи замены ("найти и заменить" - Ctrl+F) возникает ошибка (запрет об использовании данной команды на защищенном листе".
Вопрос: можно ли каким-то образом разрешить замену без снятия пароля с листа?
Спасибо!
Изменено: - 31.03.2016 19:09:55
Изменение макроса при помощи другого макроса
Пользователь
Сообщений: Регистрация: 27.02.2013
26.02.2016 18:32:05
Здравия желаю!
У меня появился теоретический вопрос, ответ на который я не смог найти за двадцать минут интенсивного гугления. Если эта тема поднималась на форуме, прошу - подскажите куда рыть.
Предположим, у меня есть 100 книг, абсолютно одинаковых по своей структуре и содержащих одинаковые макросы. Отличаются только уже введенными в них значениями. В ходе изысканий было обнаружено, что при создании шаблона этих книг в макросе была допущена ошибка и теперь имеется 100 косячных книг, которые используются некими юзерами. Можно исправить ошибку в макросе, по новой создать 100 книг и отправить их юзерам, что долго, нудно и создаст дополнительную мороку пользователям по переносу данных из косячных книг в актуальные. Либо же можно отправить всем по почте мастер-файл, в котором будет кнопка выбора файла и кнопка "патч", которая заменит текст макроса на новый.
Так вот вопрос - можно ли провернуть второй вариант и как это сделать?
Спасибо!
VBA: application.vlookup - error 91, Есть 2 макроса, в одном нет ошибки, в другом - есть
Пользователь
Сообщений: Регистрация: 27.02.2013
16.02.2016 13:41:30
Добрый день, уважаемые!
Собственно, проблема описана в названии темы. Я написал два макроса с vlookup'ом (практически идентичных), однако в одном случае макрос выкидывает ошибку 91, а в другом - работает отлично. Подскажите, пожалуйста, где косяк.
Спасибо!
VBA: обновление столбцов таблицы по строке-условию
Пользователь
Сообщений: Регистрация: 27.02.2013
12.02.2016 09:50:24
Добрый день!
Подскажите, пожалуйста, каким образом реализуются задачи подобного рода?
В таблице А4:Е8 необходимо обновить значения ячеек в столбцах (В:Е) в случае, если соответствующее конкретному столбцу значение условия в диапазоне В1:Е1 равно 1. В данном примере макрос должен обновить столбцы таблицы С и D, т.к. С1 и D1 = 1
Замена числовых делений осей на текстовые (точечная диаграмма)
Пользователь
Сообщений: Регистрация: 27.02.2013
07.07.2015 11:48:44
Доброго дня!
Возникла необходимость построения подобного графика (прикреплен). Не могу понять, каким образом произвести замену числовых значений оси Х (1, 2, 3) на текстовые (Африка, Азия, Европа).
Подобной темы на форуме не обнаружил.
Буду рад подсказкам. Спасибо!
VBA| Замена фрагмента формул активного диапазона
Пользователь
Сообщений: Регистрация: 27.02.2013
02.04.2015 11:51:54
Доброго дня, уважаемые!
Я только-только начинаю постигать таинства ВБА, поэтому выполнение любой команды представляется архисложной задачей. Так что если вопрос ниже - идиотский и сто раз поднимался, прошу сильно не ругаться, т.к. найти ничего не получилось (хотя скорее всего просто криво формулировал). ----- Записываемый макрос должен заменять во всех формулах определенного диапазона ячеек на всех листах книги определенный фрагмент данных на другой фрагмент (в данном случае имя листа, на который ссылается формула).
Макрос прекрасно справляется со своей задачей за исключением двух моментов:
1. В случае, если первоначальные формулы ссылаются на разные книги, то после запуска макроса все формулы ссылаются на тот адрес книги, на который ссылается формула верхней левой ячейки заданного диапазона Нутром я понимаю, что все дело в конструкции:
однако никак не пойму, как задать замену не активной ячейки, а активного диапазона (надеюсь, сформулировал корректно). Естественно, необходимо, чтобы после запуска макроса формулы всего диапазона оставались прежними, за исключением заменяемого фрагмента.
2. Кроме этого макрос должен вытаскивать из формулы ячейки определенный фрагмент и вставлять его значение в другую ячейку. Так вот, визуально это значение вставляется только после второго запуска макроса. Не пойму почему.
-------------------------------
Буду благодарен за любой совет!
Изменено: - 02.04.2015 13:01:51
Изменение структуры сводной таблицы
Пользователь
Сообщений: Регистрация: 27.02.2013
05.10.2014 17:46:20
Здравствуйте, уважаемые!
Столкнулся с ерундовой, как мне кажется проблемой, которую не могу решить, как мне кажется, исключительно из-за неумения формировать правильный запрос в поиске этого форума. Решить эту проблему необходимо именно с помощью сводных таблиц, Вся суть вопроса в прилепленном файле.
Спасибо!
Протягивание формулы со ссылкой на отфильтрованные значения
Пользователь
Сообщений: Регистрация: 27.02.2013
07.03.2014 20:41:13
Здравствуйте, уважаемые! Сегодня довелось столкнуться с такой задачей: было необходимо собрать таблицу по заданным критериям из другой таблицы-базы данных. Данные собираются фильтрацией БД по заданным критериям с последующим копированием в собираемую таблицу со вставкой как значения. Однако некоторые столбцы данных изменяются в БД, и, соответственно, необходимо, чтобы они менялись и в собираемой таблице. В связи с тем, что простое протягивание ссылки на отфильтрованные ячейки в этой жизни не работает, а постоянно ставить "=" и лезть в другую книгу - не по-джигитски, приходится использовать впр, причем связи со спецификой работы, с впр по трем критериям () из-за чего уже после первых 100 строк начинаются жесткие лаги. И хотя это не совсем по правилам, все же, надеюсь, Вы поможете прояснить ряд вопросов: 1) можно ли заполнить значения в одной таблице отфильтрованными значениями другой простым протягиванием ссылки? (макрос, специальная функция), если нет, то 2) можно ли модифицировать ту формулу таким образом, чтобы если встречаются несколько строчек с одинаковыми критериями, вставлялось следующее за ним значение (сейчас ситуация такая - если идут три одинаковые строки подряд, с различием только в какой-нибудь переменной, то формула возвращает три одинаковых значения) 3) можно ли каким-нибудь образом оптимизировать эту формулу из техник или заменить ее на что-нибудь более подходящее для снижения загрузки процессора? 4) можно ли решить проблему как-то иначе?
Большое спасибо за помощь. PS: клянусь, что свято соблюдал 1 пункт правил!
Получить все возможные не повторяющиеся комбинации
Пользователь
Сообщений: Регистрация: 27.02.2013
06.03.2014 22:46:18
Здравствуйте, уважаемые!
Тут попалась задачка, не могу сообразить как решить: Имеется таблица, где левый столбец и верхняя строка - значения. Необходимо получить в отдельную строку все возможные не повторяющиеся комбинации этих строки и столбца. К примеру, значения столбца - 1, 2, 3, значения строки - а, б, в. Необходимо получить а) а1, а2, а3, б1, б2 и т.д. б) а1, 1а, а2, 2а и т.д. Для пущей наглядности прилепил пример.
Спасибо!
Вытаскивание базы данных из сводной таблицы/добавление данных в "отсутствующую" БД,
Пользователь
Сообщений: Регистрация: 27.02.2013
03.03.2014 10:50:35
Здравствуйте, уважаемые! Дан файл со сводной таблицей, при этом доступ к базе данных этой таблицы отсутствует. Необходимо добавить в существующую сводную таблицу новые поля для сортировки, т.е. добавить в "отсутствующую" базу данных несколько новых столбцов. Возможно ли это в принципе - добавление новых данных в сводную таблицу? Иначе каким образом можно вытащить БД из сводной таблицы?
Огромная благодарность за любую помощь!
Перераспределение данных массива с сохранением тенденции
Пользователь
Сообщений: Регистрация: 27.02.2013
27.09.2013 17:40:25
Здравствуйте, уважаемые!
Сегодня на работе поставили задачу, повергнувшую меня в смущение Собственно, условия: дан массив данных, в котором встречаются пустые значения. По этим данным построена определенная тенденция. Необходимо перераспределить значения массива таким образом, чтобы не было пустых мест.
Существуют три ограничения: 1. Итоговый результат не должен изменяться 2. Количество строк данных должно оставаться неизменным. 3. Распределение данных должно сохранить имеющуюся тенденцию
Благодарю за любую помощь!
Изменено: - 27.09.2013 20:06:35
Суммирование по нескольким текстовым критериям
Пользователь
Сообщений: Регистрация: 27.02.2013
24.09.2013 15:36:31
Здравствуйте, уважаемые! Кажется, что простейшая задача, но никак не получается решить в одну, не громоздкую, формулу
Даны два массива - текст и значения, необходимо суммировать значения по нескольким текстовым критериям. С помощью ввода отдельного столбца с критериями и гпр-ом или при расписывании огромной формулы типа суммесли(...;1критерий;...)+суммесли(...;2 критерий;...) - все работает, но это выглядит настолько не эстетично, что аж жуть берет. Подскажите, пожалуйста, в чем дело. Спасибо!
Цикл движения поезда
Пользователь
Сообщений: Регистрация: 27.02.2013
09.07.2013 22:43:36
Здравствуйте, уважаемые! Встала проблема, и не знаю, как подойти к решению Дело вот в чем - необходимо рассчитать цикл движения поезда: от станции до пункта назначения, затем простОй, затем движение в обратном направлении, и снова простой до отправления Схематически это изображено на рисунке справа Проблема: Не могу понять, как экселем найти время простоя, т.е. разницу времени, у меня получаются решетки\либо что-то некорректное Спасибо большое!
Upd: прикрепил пример
Изменено: - 09.07.2013 22:47:39
Аппроскимация
Пользователь
Сообщений: Регистрация: 27.02.2013
02.04.2013 23:52:23
Здравствуйте, уважаемые!
Сразу оговорюсь, возможно это и не аппроксимация, просто это самый подходящий термин к этой задаче, который мне известен. Полное описание в файле А вкратце: Имеется таблица с квартальными объемами работ, которые нужно перевести в месячные объемы. Нужно это сделать таким образом, чтобы проценты работ шли по нарастающей, с примерным соблюдением пропорций (пять минут думал, как бы все это яснее сформулировать, но, видимо, мозг уже окончательно расплавился)
Заранее возношу хвалебные гимны за любую помощь!
Обратное индексирование
Пользователь
Сообщений: Регистрация: 27.02.2013
29.03.2013 16:42:02
Здравствуйте!
Недавно был загнан в тупик решением следующей задачи: Имеется таблица с вертикальной и горизонтальной шапкой, эти шапки - координаты х и у Необходимо, чтобы при вводе значения из таблицы, автоматически определялось значение х из левой шапки, и в другой ячейке - у (из вертикальной). Проблема в том, что при индексировании, позицию значения нужно икать не в одномерном, а в двумерном массиве, что выводит Н\Д
Спасибо!
Индексирование цены с несколькими построчными условиями
Пользователь
Сообщений: Регистрация: 27.02.2013
16.03.2013 03:28:01
Здравствуйте!
Мне кажется, что проблема уже сто раз как решена, но поиск ничего полезного не выдал. В общем, суть: Даны исходные данные, по которым нужно найти цену в таблице. Сама же таблица состоит из одного столбца цен и нескольких столбцов с условиями, по которым эта цена отбирается. То есть, есть одно большое условие, в которого входит несколько условий поменьше, в которые ... ну Вы поняли)
Буду рад любой наводке!
Попарный поиск значений в диапазоне с условиями, минимальных, средних и максимальных значений
Пользователь
Сообщений: Регистрация: 27.02.2013
15.03.2013 03:31:07
Здравствуйте, уважаемые!
В очередной раз встала задача, над решением которой уже не первый час кипит мой мозг: Вкратце, задача выглядит так: есть исходная таблица со значениями, и из нее нужно выбрать по два минимальных, средних и максимальных значения, но с условиями: 1) Эти парные значения не должны быть в одном и том же столбце и строке 2) Разница между парными значениями не должна превышать модуля какого-то определенного числа (в этом задании это 20) Прилагаю пример и заранее благодарю за любую помощь!
Изменено: - 15.03.2013 04:30:53
Разбивка дат на интервалы по условию
Пользователь
Сообщений: Регистрация: 27.02.2013
07.03.2013 01:44:04
Здравствуйте, уважаемые! Ничего похожего в поиске не нашел. Тут такое дело, опишу вкратце: имеются две таблицы, 1) годы и затраты по этим годам 2) интервалы времени и затраты по этим интервалам Необходимо разбить годы на интервалы по заданным условиям и соответственно посчитать суммы затрат по этим интервалам Я просто не знаю, с какого бока подойти к решению, поэтому могу лишь заранее горячо благодарить за любую наводку!
Суммирование стоимости с выборкой по годам
Пользователь
Сообщений: Регистрация: 27.02.2013
06.03.2013 06:59:35
Здравствуйте!
Возникла проблема, не знаю как к ней подойти. В примере все подробно описано, а вкратце: В одной таблице есть массив дат и массив стоимостей, а в другой - года и сумма по ним
Проблема же кроется в автоматизации процесса, ибо размеры таблиц такие, что раньше птицы заведутся в моей отросшей к тому моменту бороде, чем я сделаю это вручную)
Сложное индексирование, Вывод данных в календарный график
Пользователь
Сообщений: Регистрация: 27.02.2013
05.03.2013 22:21:33
Здравствуйте, уважаемые!
Уже три часа ломаю голову, но ничего путного не приходит В примере все наглядно показано, а вкратце - есть таблица с датами, есть таблица с процентами выполнения по месяцам, и есть третья таблица - календарный график. Необходимо, чтобы проценты выполнения выводились в календарный график, в зависимости от даты
Большое предварительное спасибо)
Расписывание формулы в ячейку, Чуть доработать в VBA
Пользователь
Сообщений: Регистрация: 27.02.2013
27.02.2013 03:01:41
Здравствуйте! Наткнулся на функцию, которая расписывает формулу в ячейку, в виде 1+2=3. Лучшая из всех реализаций этого, что я встречал. Но существует недостаток - после знака равно нет ограничения на длину знаков после запятой (т.е. может получиться что-то вроде 1 + 2 = 3,13523537626333 (это для наглядности)) И вроде есть команда round, но в виду полного профанства в вба, не знаю, куда ее впихнуть. Доработайте, если не сложно!
Прилагаю исходный код
Function Rasp(a As Range) As String Dim f As String 'Dim text As String 'Stop f = a.Formula f = Replace(f, "/", "&""/""&" ;) f = Replace(f, "*", "&""*""&" ;) f = Replace(f, "+", "&""+""&" ;) f = Replace(f, "-", "&""-""&" ;) f = Replace(f, "(", "&""(""&" ;) f = Replace(f, " ;) ", "&"" ;) ""&" ;) f = Right(f, Len(f) - 1) f = Replace(f, "=", "&""=""&" ;)
f = Replace(f, "=", """""&" ;) 'f = f & "&"" = ""&" & a f = Replace(f, "&&", "&" ;) f = Replace(f, "&&", "&" ;) Rasp = (f)
If Right(f, 1) = "&" Then f = Left(f, Len(f) - 1) If Left(f, 1) = "&" Then f = Right(f, Len(f) - 1) f = Evaluate(f) f = f & " = " & a f = Replace(f, ".", "," ;) Rasp = f End Function ---------------------------------------- Повторюсь, цель - доработать код так, чтобы можно было ставить ограничение на длину знаков после запятой, причем желательно, чтобы ограничение можно было ставить на все элементы формулы (К примеру, если расписываемая формула состоит из ссылок на ячейки, в которых происходило какое-нибудь математическое действие, то в итоге, ячейка может выглядеть так 1,21426457893 * 14,2134668645 = 15,2456457356849569569 Конечно, можно каждое значение предварительно прогонять через ОКРУГЛВВЕРХ, но это муторно, да и не всегда это получается
И еще ерундовый вопрос, но ставит в тупик все поисковики - как внедрить эту функцию в эксель таким образом, чтобы ее можно было сразу вводить через равно, а не через "вставка функции" - "определенные пользователем"?