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

Страницы: 1
Подтягивание данных с другой книги макросом, проба переделать макрос под работу со словаре (dictionary)
 
Добрый день!
Пытаюсь как-то оптимизировать свою работу.
Есть две книги (упрощенные версии вложил)  rab, baza.
В книгу rab с помощью  ВПР (вставляю макросом)  подтягиваются данные из книги baza.
Все работает, но  когда в книге rab много  строк (несколько тысяч), то работа заметно замедляется.
Как-то  мне помогли  на планете в подобной ситуации через словари (scripting.dictionary).
Пробовал по аналогии, не получается, нашел  на дружественном  ресурсе  описание  Dictionary и Collection, но пока не получается разобраться.
Код по которому получаю данные:
Код
Sub Primer()

Dim rab, baza As Workbook
Dim sht As Worksheet
Dim rRange, rCell As Range
        Set rab = ActiveWorkbook
    LastOSNOVA = Cells(Rows.Count, 1).End(xlUp).Row

        Set baza = Workbooks.Open("baza.xlsm")

    For Each sht In baza.Worksheets

     If sht.Range("A1").Value = rab.Sheets("OSNOVA").Range("I1").Value Then
        sht.Activate
        NewName = sht.Name
        BookName = ActiveWorkbook.Name
            Lastbaza = Cells(Rows.Count, 1).End(xlUp).Row
                rab.Sheets("OSNOVA").Range("G2").FormulaLocal = _
        "=ВПР(СЦЕПИТЬ(B2;F2);" & Workbooks(BookName).Sheets(NewName).Range("A:G").Address(External:=True) & ";4;0)"
                rab.Sheets("OSNOVA").Range("H2").FormulaLocal = _
        "=ВПР(СЦЕПИТЬ(B2;F2);" & Workbooks(BookName).Sheets(NewName).Range("A:G").Address(External:=True) & ";5;0)"
    
        rab.Activate
                Sheets("OSNOVA").Range("G2:H2").AutoFill Destination:=Range(Cells(2, 7), Cells(LastOSNOVA, 8))

        End If
    Next

End Sub
Прошу помочь разобраться.
Спасибо!
Формула с переменными адресами ячеек через VBA, Проблема с синтаксисом при создании формулы через VBA
 
Добрый день!

Не могу разобраться с правильным синтаксисом при вводе формулы в ячейку с помощью VBA.
Есть строка кода
Код
Cells(PRow,LastCol)=Cells(PRow,KodColumn)&Cells(PRow,StranaColumn)&Cells(PRow,FCColumn

В определенную ячейку вводятся данные по сцепке.
А как вместо данных вставить формулу (=СЦЕПИТЬ())?  
Когда известны ячейки, то у меня получается, а вот когда переменные – нет.
Вроде бы и тема  часто встречается, но пока никак не получается решить вопрос.
Прошу помочь разобраться.
Спасибо!
Минимальное значение по нескольким критериям с помощью VBA
 
Здравствуйте!
Прошу помочь разобраться с кодом.В каждой ячейке столбца "Результат" (файл "Проба" ) стояла формула  массива, которая брала минимальное значение  из файла "Итог" , соответствующее  определенным критериям.
'{=МИН(ЕСЛИ(($A2=Итог.xls!$A$2:$A$23)*($B2=Итог.xls!$B$2:$B$23)*($C2=Итог.xls!$C$2:$C$23)*(Итог.xls!$D$2:$D$23);Итог.xls!$D$2:$D$23))}
Записал формулу макрорекодером  и добавил прохождение циклом по всем ячейкам столбца "Результат".

Код
 Sub proba()
Dim Str, i As Integer
    StrokaLast = Cells(Rows.Count, 1).End(xlUp).Row
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With
    i = 2
  For i = 2 To StrokaLast
        Cells(i, 4).FormulaArray = _
        "=MIN(IF((RC1=Итог.xls!R2C1:R23C1)*(RC2=Итог.xls!R2C2:R23C2)*(RC3=Итог.xls!R2C3:R23C3)*(Итог.xls!R2C4:R23C4),Итог.xls!R2C4:R23C4))"
        Cells(i, 4).Value = Cells(i, 4).Value
  Next
With Application: .ScreenUpdating = True: .DisplayAlerts = True: .EnableEvents = True: End With
End Sub


Макрос работает, но когда много строк (в книге "Проба"  несколько тысяч, а в книге "Итог" несколько десятков тысяч), то сильно тормозит.
Подскажите, пожалуйста, как можно усовершенствовать (или изменить) код, что бы быстрее работал, как  можно изменить саму формулу, если заранее не известно количество строк в файле "Итог" (я понимаю, что необходимо найти последнюю заполненную ячейку, но не знаю как корректно записать формулу)?
Спасибо!
ПС Файлы-примеры вложил.
Проблема с корректным вводом формулы ч/з VBA, Синтаксис формулы вводимой ч/з код VBA
 
Здравствуйте!
Прошу помочь разобраться с синтаксисом формулы, которую хочу вставить в ячейку с помощью кода VBA.

TD, AN  - имена книги и листа, в которую вставляю формулу
Raz, sht - имена книги и листа, с которых берутся данные (книга в сетевом доступе, на момент вставки формулы будет открыта)
Пытаюсь прописать формулу ВПР в ячейку  W2

TD.Sheets("AN").Range("W2").FormulaLocal = "=ВПР(С2, Raz.sht!AA:FF,3,0)"
Пробовал через макрорекодер, но и в том виде не знаю как записывать корректно присвоенные имена листов и книг.
Спасибо!
Еще раз о сборе листов с разных книг
 
Здравствуйте.  
Понимаю,  что тема « с оскоминой». Поиском пользовался, похожие темы читал. Сильно не ругайте.  
Из огромного множества решений данного вопроса на этом (и не только) форуме наиболее подходящее для себя нашел в приемах.  Вот только в том коде файлы, из которых копируются листы,  выбираются через диалоговое окно, в моем  случае листы должны копироваться из открытых в данный момент книг.  
Слабая попытка реализовать решение через код:  
Sub CopList()  
   Dim WB  As Workbook  
   Application.ScreenUpdating = False  
For Each WB In Workbooks  
If WB.Name <> ThisWorkbook.Name Then  
           WB.Sheets(1).Copy After:=ThisWorkbook.Sheets  (ThisWorkbook.Sheets.Count)  
                           ActiveSheet.Name = WB.Name    
End If  
Next WB  
   Application.ScreenUpdating = True  
End Sub  
 
Выдает ошибку: «1004» «Не удается вставить листы в конечную книгу, так как она содержит меньшее число строк и столбцов, чем исходная книга.»  
Прошу помочь разобраться.  
Спасибо.  
 
ПС Очень близкую к вопросу тему на ветке http://www.planetaexcel.ru/forum.php?thread_id=28763 тоже смотрел. Но там данные со всех листов копируются на один лист, а хотелось-бы как в приемах.
Поиск по листам
 
Добрый вечер.  
В свое время, на данном форуме,  мне здорово помогли с одной задачей.  Суть задачи – поиск в столбце А  листа «Основа» (см. прилагаемый файл) значения, которое задается из формы.  Если значение есть и подходит условию, то на лист «Итог» копируются определенные диапазоны.    
Все отлично работает на примере и в рабочем файле, но со временем  данных стало больше и добавились листы, подобные листу  «Основа».  
Как сделать поиск на каждом листе,  и что-бы  результат ы добавлялись  на лист «Итог»?  
Пробовал  конструкцию For  Each, но знаний как ее правильно применить не хватило.  
Пример прилагается.
Множественное сравнение функцией ЕСЛИ()
 
Здравствуйте.  
Вопросов по данной функции было много, но по поиску не нашел решения.  
Посмотрите, пожалуйста, имеет ли шанс на жизнь такая формула:  
=ЕСЛИ(НАЙТИ("Динамо";$A3);"Динамо";ЕСЛИ(НАЙТИ("Спартак";$A3);"Спартак";ЕСЛИ(НАЙТИ("Зенит";$A3);"Зенит";"Локомотив")))  
У меня в столбце А при значении, отличном от "Динамо" выдает ошибку. Цель формулы: в столбец В вставлялось название команды из текста в столбце А.
Изменения в таблице
 
Здравствуйте.  
 
Имеется таблица (инвойс от поставщика), с которой хотелось-бы сделать следующее:  
- заменить артикулы отправителя на артикулы получателя (пробовал макросом через «найти-заменить», но артикулов очень много большой код выходит, возможно есть другой вариант?)  
- вставить значения, выделенные цветом в соответствующие поля на листе2    
- просуммировать по определенным столбцам товары с одинаковым кодом.  
На мой любительский взгляд некоторые моменты можно решить формулами, но, инвойсов много, приходят часто и вставлять формулы в каждый инвойс наверное будет  сложно. Поэтому, хочу попросить подсказку или решение через VBA.  
 
Пример прилагается.  
Заранее спасибо.
Добавление данных в таблицу
 
Здравствуйте.  
Подскажите решение вопроса.  
Есть таблица (см. пример), в которую вводятся некоторые данные по перевозкам.  
Хотел несколько облегчит ввод данных, в частности данные водителей.  На втором листе есть таблица, где введены необходимые данные и с помощью выпадающего списка и ф-ции ВПР вносятся необходимые значения.    
Проблема появляется с данными нового водителя, которых нет в таблице.    
Хотелось бы, что-бы выглядело примерно так:  
-если данные водителя есть в таблице (лист2), то они с помощью ф-ции вводятся в основную таблицу(лист1)  
-если данных водителя нет, то данные вводятся в ручную, а после окончания ввода автоматически добавлялись в таблицу на листе 2.  
Спасибо, заранее за советы.
Не получается сводная таблица
 
Здравствуйте.    
Обращаюсь к вам с помощью в создании сводной таблицы.    
Имеется таблица, отображающая поставки товара. Сокращенный вариант файла прилагается.  В одной поставке может быть несколько товаров, и могут быть однотипные товары.  
Для отчета была создана сводная таблица (лист "Таблица" в примере, количество полей в файле-примере, как и названия товаров очень сокращено). У меня проблема возникла с определением количества поставок того или иного товара, т.е. если отфильтровать по товару "вода", то видно, что поставок 2, а выдает - 0. Понятно, что это из-за объединенных ячеек, их можно разъединить, но всё равно это не помогает.  
Подскажите, пожалуйста, решение.  
Спасибо.
Удаление английского текста
 
Здравствуйте.  
Помогите разобраться.  
В ячейке - название товара на русском и английском языках. Как удалить из ячейки английский текст. Примечание: из всего множества наименований есть один товар с английским названием (для примера QQQ), который не хотелось бы удалять.  
Спасибо.  
 
Пример:
Копирование из одной книги в другую
 
Здравствуйте.  
Помогите решить проблему.  
Есть файл «Итоги», данные в который вставляются из файла, выгружаемого из другой программы в формате  Excel. В скопированный диапазон вставляются формулы и формат, как в диапазоне «выше» .  
Если бы книга, которая выгружается из другой программы имела постоянное название и одинаковое количество позиций, я бы еще смог написать макрос копирования, но в данном случае не получается, и название книг и количесвто строк для копирование каждый раз отличаются.  
Что-бы полностью представить вопрос, высылаю два файла.  
В первом файле книга, куда необходимо копировать данные
Выборка данных
 
Здравствуйте.  
Есть таблица с данными о приходе товаров ( см. вложение, лист "Основа").  
В одну поставку это могут быть товар A,B,C в другую - B,E, а дальше -  A,D и т.д.  
Как сделать, что-бы вывести данные о приходе только определенного товара (лист "Результат"), например товара "А".  
Спасибо заранее.
Перенос данных с одного листа на другой
 
Здравствуйте.  
В прилагаемом файле пример. На листе «Основа» имеются данные, которые постоянно пополняются. Цветным фоном выделил данные, которые нужны для дальнейшей работы.    
Хотелось бы создать макрос, с помощью которого данные с листа «Основа» скопировать на лист «Итог», но несколько в «другом» виде (см. пример) и назначить гиперссылку значениям в первом столбце на листе «Итог» (см. пример).  
Если бы необходимо было скопировать только значения, например «Линия» у меня еще есть представление, то в данном случае, к сожалению, я не знаю как реализовать задумку.  
Надеюсь на помощь.  
Спасибо.
Страницы: 1
Наверх