Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2012, 12:19   #11
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Добрый день! Вынужден еще раз потревожить. Столкнулся с тем что макрос производит расчет очень долго при большом количестве показателей. Скажите, может быть, есть макрос который сделает то же самое, но не через ВПР, а методом простого копирования диапазона? Т.е. так же по имени файла, листа и показателя вставить данные, но из указанного диапазона (например со столбца D по I).
MaxxVer вне форума Ответить с цитированием
Старый 27.08.2012, 23:09   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Если можно сгруппировать эти файлы/листы, чтобы обрабатывать сразу весь лист одним куском одним заходом - тогда можно сделать быстро на массивах/словаре.
"Показатели" могут быть и вразброс, как в примере.
Ну а если так, как сейчас - то с большим расходом памяти может быть тоже можно сделать: при первом обращении к файлу все данные запоминать в массив и всё помнить до конца работы. Т.е. все книги и все листы... а не поочерёдно.
"может быть, есть макрос" - может быть где-то и есть, такую вероятность исключать нельзя Но "методом простого копирования диапазона" быстрее не будет - его ведь сперва нужно найти
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2012, 09:57   #13
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Уважаемый Hugo, если Вас не затруднит, помогите пожалуйста с макросом. Я пробовал дописать, но полностью готового решения не нашел, а у самого не получается (знания VBA практически нет)...
Принцип действия макроса: в Лист2 свода копируются данные с Книг (папка Данные) друг под друга, только те листы, которые указаны в таблице свода. В стобец A свода проставляется имя соответсвующего файла (во все ячейки), в столбец B - имя листа, соответственно данные вставляются начиная со столбца C.
MaxxVer вне форума Ответить с цитированием
Старый 28.08.2012, 11:14   #14
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Нашел макрос который делает почти то что надо. Но требуется доработка:
- макрос вставляет название книги в столбец А, надо чтобы еще название листа вставлял в столбец B.
- макрос собирает данные с указанной ячейки до конца данных. Надо чтобы начальная ячейка была прописана (C11), конец диапазона определялся поиском слова "" в столбце B.

Option Explicit

Sub Consolidated_Range_of_Books_and_She ets()
Dim iPivotRange As Range, iDestinationRange As Range, iBeginRange As Range, Sheet
Dim iRngAddress As String, oAwb As String, DataSheet As String, _
iCopyAddress As String, sSheetName As String, oFile
Dim lLastrow As Long, lLastRowMyBook As Long
Dim iLastColumn As Integer
Dim Str() As String

ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
DataSheet = ThisWorkbook.ActiveSheet.Name
On Error Resume Next
Set iBeginRange = Application.InputBox("Âûáåðèòå äèàïàçîí ñáîðà äàííûõ." & vbCrLf & _
"1. Ïðè âûáîðå òîëüêî îäíîé ÿ÷åéêè äàííûå áóäóò ñîáðàíû ñî âñåõ ëèñòîâ íà÷èíàÿ ñ ýòîé ÿ÷åéêè. " & _
vbCrLf & "2. Ïðè âûäåëåíèè íåñêîëüêèõ ÿ÷ååê äàííûå áóäóò ñîáðàíû òîëüêî ñ óêàçàííîãî äèàïàçîíà âñåõ ëèñòîâ.", Type:=8)
If iBeginRange Is Nothing Then Exit Sub
sSheetName = InputBox("Ââåäèòå èìÿ ëèñòà, ñ êîòîðîãî ñîáèðàòü äàííûå(åñëè íå óêàçàí, òî äàííûå ñîáèðàþòñÿ ñî âñåõ ëèñòîâ)", "Ïàðàìåòð")
If sSheetName = "" Then sSheetName = "*"
On Error GoTo 0
With Application.FileDialog(msoFileDialo gFilePicker)
.AllowMultiSelect = True
.InitialFileName = "*.*"
.Title = "Âûáåðèòå ôàéëû"
If .Show = False Then Exit Sub
For Each oFile In .SelectedItems
Workbooks.OpenText Filename:=oFile
oAwb = Dir(oFile, vbDirectory)

Application.ScreenUpdating = False
Workbooks(oAwb).Activate
For Each Sheet In Sheets
If Sheet.Name Like sSheetName Then
Sheet.Activate
Select Case iBeginRange.Count
Case 1
lLastrow = Cells(1, 1).SpecialCells(xlLastCell).Row
iLastColumn = Cells.SpecialCells(xlLastCell).Colu mn
iCopyAddress = Range(Cells(iBeginRange.Row, iBeginRange.Column), Cells(lLastrow, iLastColumn)).Address
Case Else
iCopyAddress = iBeginRange.Address
lLastrow = iBeginRange.Rows.Count
iLastColumn = iBeginRange.Columns.Count
End Select
lLastRowMyBook = ThisWorkbook.Sheets(DataSheet).Cell s.SpecialCells(xlLastCell).Row + 1
iRngAddress = Range(Cells(lLastRowMyBook, 1), Cells(lLastRowMyBook + lLastrow, iLastColumn)).Address
Sheet.Range(iCopyAddress).Copy Destination:=ThisWorkbook.Sheets(Da taSheet).Range(iRngAddress)
End If
Next Sheet
Workbooks(oAwb).Close False
Next oFile
End With
Application.ScreenUpdating = True
End Sub
MaxxVer вне форума Ответить с цитированием
Старый 28.08.2012, 11:36   #15
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Я пока пас, занят.
Так что никому не возбраняется поучаствовать
Одно скажу - открывать на каждую строку книгу бестолково, нужно кодом определить, какие книги нужны, какие листы в них нужны, затем сразу группами брать данные, чтоб лишний раз книги не трогать.
Код будет непростой.
Но пока его писать не на чем - где пример с указанием листов (так ведь изменилось задание)?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2012, 12:02   #16
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Я пока пас, занят.
Так что никому не возбраняется поучаствовать
Одно скажу - открывать на каждую строку книгу бестолково, нужно кодом определить, какие книги нужны, какие листы в них нужны, затем сразу группами брать данные, чтоб лишний раз книги не трогать.
Код будет непростой.
Но пока его писать не на чем - где пример с указанием листов (так ведь изменилось задание)?
Жаль. Тогда обращаюсь к другим экспертам.
Пример во вложениии: Данные с Книг 1-3.
На счет указания листов согласен, давайте пропишем в макросе, для данного примера Лист1, Лист4.
Файлы прописывать не надо, меня усвтраивает так как сделано (выбор файлов из конкретного места).
Заране премного благодарен.
Вложения
Тип файла: rar Excel.rar (27.0 Кб, 17 просмотров)
MaxxVer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для формирования таблицы Wind-up Bird Microsoft Office Excel 0 12.11.2011 23:51
Получение данных из множества закрытых книг книг hardkain Microsoft Office Excel 1 27.09.2011 20:18
Макрос для формирования прайса Петро1 Microsoft Office Excel 3 01.08.2011 20:42
Макрос для формирования списка OscarWilde Microsoft Office Excel 5 26.12.2010 15:27
копирование листов из закрытых книг mephist Microsoft Office Excel 4 10.07.2009 17:18