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

Страницы: 1
VBA странность при работе с переменными
 
Добрый день, коллеги!

При написании простейшего кода столкнулся со странностью - при использовании переменной типа integer и приравниванию к ней значения пустой ячейки, длина данной переменной через len = 2.

Подскажите, в чем дело, чтобы не попадаться на такое в будущем.
Спасибо!
Изменено: cray - 27.04.2016 13:39:49
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
 
Добрый вечер, уважаемые!

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

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

В случае необходимости пришлю рабочий файл (здоровенный и туманный)
Спасибо!  
Метод Application.Match со ссылкой на другую книгу, ошибка в коде
 
Добрый вечер!

Уже несколько часов бьюсь над кодом, не могу понять в чем ошибка. Помогите разобраться, пожалуйста.

Сама ошибка сидит в модуле "Vlookup", в блоке "поиск №столбца с годом". Там используется метод Application.Match, который не находит нужные значения (и, судя по всему, вообще не работает, хотя его отдельные составляющие функционируют как надо). Проверку провожу при помощи MsgBoxa, который и выкидывает ошибку.

Сам макрос должен загружать данные из другой книги, поэтому скидываю 2 файла (при запуске макроса нужно выбрать файл с данными).

Спасибо!
Помощь в доработке макроса
 
Добрый день!

В продолжение темы на форуме
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=76401&TITLE_SEO=76401-vypolnenie-chasti-makrosa-pri-izmenenii-sootvetstvuyushchikh-yacheek

К сожалению, все оказалось не так радужно.
При попытке адаптировать вариант уважаемого Sanja к своим нуждам, у меня возникли следующие проблемы:
1) при работе первого макроса, выгружающего данные из файлов-исходников, происходит конфликт с макросом модуля листа, что приводит к бесконечному (или конечному, но требующему более 5 минут) циклу пересчета изменяющихся значений, и их постоянному перемножению (критично).
2) при обработке введенных ранее значений, макрос из модуля листа работает исключительно долго, пересчитывая 32 значения около 10 секунд (неприятно, но терпимо)
3) при попытке изменения более 2 ячеек одновременно происходит пересчет всего столбца, вне зависимости от прописанных условий (неприятно, но терпимо)

Путем измышлений я пришел к следующим возможным решениям:
а) Основной макрос при выгрузке изменяет значение "-" (введенное по-умолчанию) на один из вариантов "млн / млрд". Для решения этой проблемы нужно как-то задать очередность выполнения макросов, чтобы модуль листа работал только после загрузки данных основным макросом, т.е. после первого изменения значения "-" на значение "млн/млрд", т.е. нужно как-то объявить переменные в 1 макросе и счетчики количества их изменений, которые привязать к модулю листа;
б) Для решения второй проблемы нужно как-то перенести тело макроса листа в отдельный модуль, оставив на листе исключительно вызов этого макроса при выполнении условия а)

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

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

Спасибо!
Изменено: cray - 01.04.2016 16:47:21
Выполнение части макроса при изменении соответствующих ячеек
 
Добрый день!

Немного дурацкое название темы, но оно лучше всего отображает проблему.

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

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

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

Поиски навели меня на конструкцию If Not Intersect(Target, Range)) Is Nothing Then, но мне она не совсем понятна.

Подскажите, пожалуйста, как можно решить проблему.
Спасибо!
Автозамена в формулах незащищенных ячеек
 
Добрый день, уважаемые!
Традиционно не обнаружил ответа через поиск, поэтому создаю тему.

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

Вопрос: можно ли каким-то образом разрешить замену без снятия пароля с листа?

Спасибо!  
Изменено: cray - 31.03.2016 19:09:55
Изменение макроса при помощи другого макроса
 
Здравия желаю!

У меня появился теоретический вопрос, ответ на который я не смог найти за двадцать минут интенсивного гугления. Если эта тема поднималась на форуме, прошу - подскажите куда рыть.

Предположим, у меня есть 100 книг, абсолютно одинаковых по своей структуре и содержащих одинаковые макросы. Отличаются только уже введенными в них значениями.
В ходе изысканий было обнаружено, что при создании шаблона этих книг в макросе была допущена ошибка и теперь имеется 100 косячных книг, которые используются некими юзерами. Можно исправить ошибку в макросе, по новой создать 100 книг и отправить их юзерам, что долго, нудно и создаст дополнительную мороку пользователям по переносу данных из косячных книг в актуальные. Либо же можно отправить всем по почте мастер-файл, в котором будет кнопка выбора файла и кнопка "патч", которая заменит текст макроса на новый.

Так вот вопрос - можно ли провернуть второй вариант и как это сделать?

Спасибо!    
VBA: application.vlookup - error 91, Есть 2 макроса, в одном нет ошибки, в другом - есть
 
Добрый день, уважаемые!

Собственно, проблема описана в названии темы.
Я написал два макроса с vlookup'ом (практически идентичных), однако в одном случае макрос выкидывает ошибку 91, а в другом - работает отлично.
Подскажите, пожалуйста, где косяк.

Спасибо!
VBA: обновление столбцов таблицы по строке-условию
 
Добрый день!

Подскажите, пожалуйста, каким образом реализуются  задачи подобного рода?

В таблице А4:Е8 необходимо обновить значения ячеек в столбцах (В:Е) в случае, если соответствующее конкретному столбцу значение условия в диапазоне В1:Е1 равно 1. В данном примере макрос должен обновить столбцы таблицы С и D, т.к. С1 и D1 = 1
Замена числовых делений осей на текстовые (точечная диаграмма)
 
Доброго дня!

Возникла необходимость построения подобного графика (прикреплен). Не могу понять, каким образом произвести замену числовых значений оси Х (1, 2, 3) на текстовые (Африка, Азия, Европа).

Подобной темы на форуме не обнаружил.

Буду рад подсказкам. Спасибо!
 
VBA| Замена фрагмента формул активного диапазона
 
Доброго дня, уважаемые!

Я только-только начинаю постигать таинства ВБА, поэтому выполнение любой команды представляется архисложной задачей. Так что если вопрос ниже - идиотский и сто раз поднимался, прошу сильно не ругаться, т.к. найти ничего не получилось (хотя скорее всего просто криво формулировал).
-----
Записываемый макрос должен заменять во всех формулах определенного диапазона ячеек на всех листах книги определенный фрагмент данных на другой фрагмент (в данном случае имя листа, на который ссылается формула).

Макрос прекрасно справляется со своей задачей за исключением двух моментов:

1. В случае, если первоначальные формулы ссылаются на разные книги, то после запуска макроса все формулы ссылаются на тот адрес книги, на который ссылается формула верхней левой ячейки заданного диапазона
Нутром я понимаю, что все дело в конструкции:
Код
Range("a4:c6").FormulaLocal = Replace(ActiveCell.FormulaLocal, ThisWorkbook.Sheets(1).Cells(2, 2).Formula, ThisWorkbook.Sheets(1).Cells(1, 2).Formula) 
а именно в части:
Код
Replace(ActiveCell.FormulaLocal
однако никак не пойму, как задать замену не активной ячейки, а активного диапазона (надеюсь, сформулировал корректно).
Естественно, необходимо, чтобы после запуска макроса формулы всего диапазона оставались прежними, за исключением заменяемого фрагмента.

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

-------------------------------

Буду благодарен за любой совет!
Изменено: cray - 02.04.2015 13:01:51
Изменение структуры сводной таблицы
 
Здравствуйте, уважаемые!

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

Спасибо!
Протягивание формулы со ссылкой на отфильтрованные значения
 
Здравствуйте, уважаемые!
Сегодня довелось столкнуться с такой задачей: было необходимо собрать таблицу по заданным критериям из другой таблицы-базы данных. Данные собираются фильтрацией БД по заданным критериям с последующим копированием в собираемую таблицу со вставкой как значения. Однако некоторые столбцы данных изменяются в БД, и, соответственно, необходимо, чтобы они менялись и в собираемой таблице. В связи с тем, что простое протягивание ссылки на отфильтрованные ячейки в этой жизни не работает, а постоянно ставить "=" и лезть в другую книгу - не по-джигитски, приходится использовать впр, причем связи со спецификой работы, с впр по трем критериям (http://www.planetaexcel.ru/techniques/2/77/) из-за чего уже после первых 100 строк начинаются жесткие лаги.
И хотя это не совсем по правилам, все же, надеюсь, Вы поможете прояснить ряд вопросов:
1) можно ли заполнить значения в одной таблице отфильтрованными значениями другой простым протягиванием ссылки? (макрос, специальная функция), если нет, то
2) можно ли модифицировать ту формулу таким образом, чтобы если встречаются несколько строчек с одинаковыми критериями, вставлялось следующее за ним значение (сейчас ситуация такая - если идут три одинаковые строки подряд, с различием только в какой-нибудь переменной, то формула возвращает три одинаковых значения)  
3) можно ли каким-нибудь образом оптимизировать эту формулу из техник или заменить ее на что-нибудь более подходящее для снижения загрузки процессора?
4) можно ли решить проблему как-то иначе?

Большое спасибо за помощь.
PS: клянусь, что свято соблюдал 1 пункт правил!
Получить все возможные не повторяющиеся комбинации
 
Здравствуйте, уважаемые!

Тут попалась задачка, не могу сообразить как решить:
Имеется таблица, где левый столбец и верхняя строка - значения. Необходимо получить в отдельную строку все возможные не повторяющиеся комбинации этих строки и столбца.
К примеру, значения столбца - 1, 2, 3, значения строки - а, б, в. Необходимо получить
а) а1, а2, а3, б1, б2  и т.д.
б) а1, 1а, а2, 2а и т.д.
Для пущей наглядности прилепил пример.

Спасибо!
Вытаскивание базы данных из сводной таблицы/добавление данных в "отсутствующую" БД,
 
Здравствуйте, уважаемые!
Дан файл со сводной таблицей, при этом доступ к базе данных этой таблицы отсутствует.
Необходимо добавить в существующую сводную таблицу новые поля для сортировки, т.е. добавить в "отсутствующую" базу данных несколько новых столбцов.
Возможно ли это в принципе - добавление новых данных в сводную таблицу?
Иначе каким образом можно вытащить БД из сводной таблицы?

Огромная благодарность за любую помощь!
Перераспределение данных массива с сохранением тенденции
 
Здравствуйте, уважаемые!

Сегодня на работе поставили задачу, повергнувшую меня в смущение
Собственно, условия: дан массив данных, в котором встречаются пустые значения. По этим данным построена определенная тенденция.
Необходимо перераспределить значения массива таким образом, чтобы не было пустых мест.

Существуют три ограничения:
1. Итоговый результат не должен изменяться
2. Количество строк данных должно оставаться неизменным.
3. Распределение данных должно сохранить имеющуюся тенденцию

Благодарю за любую помощь!
Изменено: cray - 27.09.2013 20:06:35
Суммирование по нескольким текстовым критериям
 
Здравствуйте, уважаемые!
Кажется, что простейшая задача, но никак не получается решить в одну, не громоздкую, формулу

Даны два массива - текст и значения, необходимо суммировать значения по нескольким текстовым критериям.
С помощью ввода отдельного столбца с критериями и гпр-ом или при расписывании огромной формулы типа суммесли(...;1критерий;...)+суммесли(...;2 критерий;...) - все работает, но это выглядит настолько не эстетично, что аж жуть берет.
Подскажите, пожалуйста, в чем дело.
Спасибо!
Цикл движения поезда
 
Здравствуйте, уважаемые!
Встала проблема, и не знаю, как подойти к решению
Дело вот в чем - необходимо рассчитать цикл движения поезда: от станции до пункта назначения, затем простОй, затем движение в обратном направлении, и снова простой до отправления
Схематически это изображено на рисунке справа
Проблема:
Не могу понять, как экселем найти время простоя, т.е. разницу времени,
у меня получаются решетки\либо что-то некорректное
Спасибо большое!

Upd: прикрепил пример
Изменено: cray - 09.07.2013 22:47:39
Аппроскимация
 
Здравствуйте, уважаемые!

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

Заранее возношу хвалебные гимны за любую помощь!
Обратное индексирование
 
Здравствуйте!

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

Спасибо!
Индексирование цены с несколькими построчными условиями
 
Здравствуйте!

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

Буду рад любой наводке!
Попарный поиск значений в диапазоне с условиями, минимальных, средних и максимальных значений
 
Здравствуйте, уважаемые!

В очередной раз встала задача, над решением которой уже не первый час кипит мой мозг:
Вкратце, задача выглядит так: есть исходная таблица со значениями, и из нее нужно выбрать по два минимальных, средних и максимальных значения, но с условиями:
1) Эти парные значения не должны быть в одном и том же столбце и строке
2) Разница между парными значениями не должна превышать модуля какого-то определенного числа (в этом задании это 20)
Прилагаю пример и заранее благодарю за любую помощь!
Изменено: cray - 15.03.2013 04:30:53
Разбивка дат на интервалы по условию
 
Здравствуйте, уважаемые!
Ничего похожего в поиске не нашел.
Тут такое дело, опишу вкратце: имеются две таблицы,
1) годы и затраты по этим годам
2) интервалы времени и затраты по этим интервалам
Необходимо разбить годы на интервалы по заданным условиям и соответственно посчитать суммы затрат по этим интервалам
Я просто не знаю, с какого бока подойти к решению, поэтому могу лишь заранее горячо благодарить за любую наводку!
Суммирование стоимости с выборкой по годам
 
Здравствуйте!

Возникла проблема, не знаю как к ней подойти.
В примере все подробно описано, а вкратце:
В одной таблице есть массив дат и массив стоимостей, а в другой - года и сумма по ним

Проблема же кроется в автоматизации процесса, ибо размеры таблиц такие, что раньше птицы заведутся в моей отросшей к тому моменту бороде, чем я сделаю это вручную)
Сложное индексирование, Вывод данных в календарный график
 
Здравствуйте, уважаемые!

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

Большое предварительное спасибо)
Расписывание формулы в ячейку, Чуть доработать в VBA
 
Здравствуйте! Наткнулся на функцию, которая расписывает формулу в ячейку, в виде 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
Конечно, можно каждое значение предварительно прогонять через ОКРУГЛВВЕРХ, но это муторно, да и не всегда это получается

И еще ерундовый вопрос, но ставит в тупик все поисковики - как внедрить эту функцию в эксель таким образом, чтобы ее можно было сразу вводить через равно, а не через "вставка функции" - "определенные пользователем"?

Спасибо!
Изменено: cray - 04.03.2013 20:42:04
Страницы: 1
Наверх