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

Страницы: 1
Сбор данных из разных книг Excel
 
kavaka, РАБОТАЕТ! Вы мой спаситель!!! Огромное Вам спасибо!
Подскажите, а если название файлов совпадать не будет с именем заполненного столбца, могут быть проблемы с выводом информации? И если у кого то из магазинов будет шаблон без нового магазина и будет идти смещение столбцов, данные будут корректно заполняться?
И есть ли возможность сделать так, что бы добавляемые позиции считались? Проблема в том, что магазины не видят чужих доп потребностей и заполняют их с 1-ой строчки. Естественно все вперемешку и макрос не может это посчитать. Можно ли сделать, что бы видя новую заполненную строчку макрос вставлял ее ниже и данные по ней тоже ниже вставлял, а не на место заполненной другим магазином строчки? Это строчки ниже "Дополнительно".
Так же с удовольствием почитаю инфу про написание макросов, если кто-то посоветует хороший, а главное понятный источник)
Изменено: SimS-2007 - 18.12.2017 14:42:29
Сбор данных из разных книг Excel
 
Цитата
kavaka написал:
У вас названия файлов всегда совпадают с именами магазинов?
В идеале да, иначе будут ошибки даже в подставлении кописастом.
Сбор данных из разных книг Excel
 
kavaka, действительно прошло смещение. Я забыл про то, что могут новые магазины добавляться (((
Спасибо! Сейчас попробую.
Сбор данных из разных книг Excel
 
Цитата
Юрий М написал:
А в стартовом сообщении, значит можно? Там превышен максимально допустимый размер. Оба файла удалены.
В стартовом он не выдавал ограничений. Там не было превышений!
И как теперь?  
Сбор данных из разных книг Excel
 
Цитата
m.roman написал:
Можете  один из этих файлов выложить здесь
К сожалению, выложить оригинал файла не получается т.к. он весит больше допустимого. Сохранил его без формул и т.п. в цифровом режиме.
Но даже так из него не собираются данные. По результатам сбора в шаблоне много столбцов без нулей. С учетом того, что "0" должен проставляться по всем ячейкам где не обнаружено данных, я предположу, что макрос просто не проводит проверку в этих столбцах.
Сбор данных из разных книг Excel
 
Nordheim, я хочу сделать сетевую папку, где будут лежать поименованные файлы и каждый магазин будет заполнять свой файл.
Сейчас я собираю их из почты и даю имена файлом по названию магазина.
Сбор данных из разных книг Excel
 
Цитата
m.roman написал:
На скорую руку. Сделано исходя из того, что структуры файлов от магазинов будут без изменений, т.е один в один с шаблоном.
Огромное Вам спасибо!
Протестил. Запустил на 13 книгах. Почему то пропускает некоторые файлы =( Проверил книги, никаких изменений в структуре нет. все полностью идентичны. даже по условиям(ограничения, защита и т.п.) расхождений нет.
Из 13 подгрузил 7. Прикладываю результат. Пропустил столбцы с именами: А073, А076, А151, А199, А208
Сможете подсказать, что нужно доработать?
Сбор данных из разных книг Excel
 
Цитата
Nordheim написал:
вас непонятно как выглядит файл из которого тянутся данные, т.е. что является в файле источнике ориентиром, для определения столбца в который будут вставлятся данные.
Все файлы одинаковые и аналогичны шаблону. У каждого магазина свой столбец, в который он заносит цифровые значение (количество требуемого товара) напротив товара(строчки слева)
Единственные изменения, которые могут быть - это дополнительные товары, не указанные в списке. Их магазин вносит в конце списка товаров.
Сбор данных из разных книг Excel
 
Читал про эту надстройку и даже скачал, но на работе нет админских прав. А что бы установить доп. программы придется пройти целую кучу согласований. По этому софт и надстройки, к сожалению, рассматривать не могу(((((
Сбор данных из разных книг Excel
 

Вот такой еще нашел, но у него ограничение по столбцам до VI, а у меня их гораздо больше до UU

Код
Sub Собрать_данные_из_xls_файлов()    ' Макрос создает книгу и последовательно вставляет на одноименные листы    ' данные из всех xls файлов заданной директории начиная со строки FRow.    Const FRow& = 2                ' Номер строки начала сбора данных (ниже шапки)    Const Sborka$ = "Сборка.xls"   ' Имя сборочного файла    Dim FCol&, LCol&               ' Переменные номеров первого и последнего столбца для сбора данных    Dim LRow&, LRow_Cel&    Dim wb_Cel As Workbook, wb_Tek As Workbook    Dim Sh_Cel As Worksheet, Sh_Tek As Worksheet    Dim MyPath$, MyFileName$, MyFulName$    Dim Uslovie1 As Boolean    ' Выбор папки    With Application.FileDialog(msoFileDialogFolderPicker)        .Title = "Укажите рабочую папку": .Show        If .SelectedItems.Count = 0 Then Exit Sub        MyPath = .SelectedItems(1) & "\"    End With    'MyPath = "C:\inbox\Тест Макроса\Тест\"    ' MyPath = CurDir & "\"    MyFileName = Dir(MyPath & "*.xls*")    Uslovie1 = False    Do Until MyFileName = ""        If MyFileName <> Sborka Then            MyFulName = MyPath & MyFileName            Workbooks.Open Filename:=MyFulName, UpdateLinks:=0            If Not Uslovie1 Then                Set wb_Cel = ActiveWorkbook                ActiveWorkbook.SaveAs Filename:=MyPath & Sborka, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False                Uslovie1 = True            Else                Set wb_Tek = ActiveWorkbook                For Each Sh_Cel In wb_Cel.Sheets                    With Sh_Cel                        FCol = .UsedRange.Cells(1, 1).Column                        LCol = .UsedRange.Columns.Count + FCol - 1                        LRow_Cel = .Cells(.Rows.Count, FCol).End(xlUp).Row + 1                    End With                    For Each Sh_Tek In wb_Tek.Sheets                        If Sh_Tek.Name = Sh_Cel.Name Then                            With Sh_Tek                                LRow = .Cells(.Rows.Count, FCol).End(xlUp).Row                                If LRow >= FRow Then                                    .Range(.Cells(FRow, FCol), .Cells(LRow, LCol)).Copy Sh_Cel.Cells(LRow_Cel, 1)                                End If                            End With                            With Sh_Cel                                    Range(.Cells(LRow_Cel , 2+LCol-FCol), .Cells(LRow_Cel+LRow-FRow,  2+LCol-FCol))= MyFulName                            End With                        End If                    Next Sh_Tek                Next Sh_Cel                Workbooks(MyFileName).Close SaveChanges:=False            End If        End If        MyFileName = Dir    LoopEnd Sub

Изменено: SimS-2007 - 14.12.2017 18:44:22
Сбор данных из разных книг Excel
 
Прошу прощения. Не тот файл приложил.
Вот файл с макросом и код.
Код
Option Explicit

Sub Consolidated_Range_of_Books_and_Sheets()
    Dim iBeginRange As Object, lCalc As Long, lCol As Long
    Dim oAwb As String, sCopyAddress As String, sSheetName As String
    Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
    Dim wsSh As Object, wsDataSheet As Object, bPolyBooks As Boolean, avFiles
    Dim wbAct As Workbook
    Dim bPasteValues As Boolean
    
    On Error Resume Next
    'Выбираем диапазон выборки с книг
    Set iBeginRange = Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _
                                           "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _
                                           vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8)
    'для указания диапазона без диалогового окна:
    'Set iBeginRange = Range("A1:A10") 'диапазон указывается нужный
    'Если диапазон не выбран - завершаем процедуру
    If iBeginRange Is Nothing Then Exit Sub
    'Указываем имя листа
    'Допустимо указывать в имени листа символы подставки ? и *.
    'Если указать только * то данные будут собираться со всех листов
    sSheetName = InputBox("Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)", "Параметр")
    'Если имя листа не указано - данные будут собраны со вех листов
    If sSheetName = "" Then sSheetName = "*"
    On Error GoTo 0
    'Запрос - вставлять на результирующий лист все данные
    'или только значения ячеек (без формул и форматов)
    bPasteValues = (MsgBox("Вставлять только значения?", vbQuestion + vbYesNo, "Excel-VBA") = vbYes)
    'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги)
    If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "Excel-VBA") = vbYes Then
        avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    Else
        avFiles = Array(ThisWorkbook.FullName)
    End If
    'отключаем обновление экрана, автопересчет формул и отслеживание событий
    'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
    With Application
        lCalc = .Calculation
        .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
    End With
    'создаем новый лист в книге для сбора
    Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
    'если нужно сделать сбор данных на новый лист книги с кодом
    'Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    'цикл по книгам
    For li = LBound(avFiles) To UBound(avFiles)
        If bPolyBooks Then
            Set wbAct = Workbooks.Open(Filename:=avFiles(li))
        Else
            Set wbAct = ThisWorkbook
        End If
        oAwb = wbAct.Name
        'цикл по листам
        For Each wsSh In wbAct.Sheets
            If wsSh.Name Like sSheetName Then
                'Если имя листа совпадает с именем листа, в который собираем данные
                'и сбор идет только с активной книги - то переходим к следующему листу
                If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_
                With wsSh
                    Select Case iBeginRange.Count
                    Case 1 'собираем данные начиная с указанной ячейки и до конца данных
                        lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
                        iLastColumn = .Cells.SpecialCells(xlLastCell).Column
                        sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address
                    Case Else 'собираем данные с фиксированного диапазона
                        sCopyAddress = iBeginRange.Address
                    End Select
                    lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
                    'вставляем имя книги, с которой собраны данные
                    If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(Range(sCopyAddress).Rows.Count).Value = oAwb
                    If bPasteValues Then 'если вставляем только значения
                        .Range(sCopyAddress).Copy
                        wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues
                    Else
                        .Range(sCopyAddress).Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)
                    End If
                End With
            End If
NEXT_:
        Next wsSh
        If bPolyBooks Then wbAct.Close False
    Next li
    With Application
        .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
    End With
End Sub

Изменено: SimS-2007 - 15.12.2017 14:43:27
Сбор данных из разных книг Excel
 
Цитата
Z написал:
Если вам нужен не совет по самостоятельному решению задачи, а чтобы все сделали за вас
Так есть же макрос, я только прошу помочь его "заточить" под мою задачу. Если кто-то готов объяснить, как это сделать самостоятельно, я с удовольствием приму эту информацию!
Сбор данных из разных книг Excel
 
Добрый день.
Прошу Вашей помощи вот в чем. Каждый месяц мне приходят одинаковые файлы 450 штук. В каждом файле магазин заполняет один столбец со своими потребностями. Мне приходится вручную собирать все файлы в папку а потом копи-пастить 1 столбец из каждого файла в общий заказ.
Хотелось бы найти макрос, который будет забирать числа из ЗАПОЛНЕННОГО столбца и вставлять в единую таблицу.
Нашел макрос, который работает с моими книгами, но делает не то что мне надо. Он копирует и вставляет таблицы друг под другом, а мне нужно, что бы он в готовый шаблон подставлял заполненные столбцы из выбранных книг. По итогу должна получаться общая потребность всех магазинов в столбце "Итого" и потребность каждого - для поставщика.
Есть строчки(товары), которые не меняются. Есть столбцы(магазины), которые на против товара ставят потребность. Есть 450 файлов от магазинов. В каждом файле заполнен 1 или 2 столбца. Я хочу, что бы выбрав эти 450 файлов, макрос копировал и подставлял именно заполненный столбец в шаблон. И желательно как то упростить процедуру т.к. выбрав 20 файлов ноут завис совсем.
Прикладываю Файл шаблона. На 2-ом листе пример, как выглядит заполненный файл от магазина.
Так же прикладываю зам макрос.

Очень прошу о помощи! Без Вас с этим никак не справлюсь...
Изменено: SimS-2007 - 15.12.2017 14:02:56
Страницы: 1
Наверх