Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перенос данных из нескольких файлов в один. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Перенос данных из нескольких файлов в один.
Logist Дата: Вторник, 06.08.2013, 17:54 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 1 ±
Замечаний: 0% ±

Добрый день форумчане!

Суть вопроса.

Есть табеля работы персонала по разным магазинам. Мне нужно сделать общий табель в который добавятся данные по каждому продавцу
из каждого файла. Грубо говоря перенос данных построчно. Необходимо переносить данные только тех строк где есть ИНН. (ФИО, ИНН, раб дни, итого з/и т.д.)

- название файлов может меняться.
- количество файлов может меняться.
- все лежат всегда в одной папке.
Прилагаю файлы и в файле "Итоговая" сделал пример Лист 1 - пустой график, Лист 2 - заполненный.

Пробовал через ИНДЕКС + ПОИСКПОЗ понял что будут очень большие формулы да и названия должны быть одинаковые.
Видимо выход макрос а я в нем не силён.

Заранее благодарю.
Эксель 2007
Решение - макрос.
К сообщению приложен файл: 8475754.rar (58.4 Kb)
 
Ответить
СообщениеДобрый день форумчане!

Суть вопроса.

Есть табеля работы персонала по разным магазинам. Мне нужно сделать общий табель в который добавятся данные по каждому продавцу
из каждого файла. Грубо говоря перенос данных построчно. Необходимо переносить данные только тех строк где есть ИНН. (ФИО, ИНН, раб дни, итого з/и т.д.)

- название файлов может меняться.
- количество файлов может меняться.
- все лежат всегда в одной папке.
Прилагаю файлы и в файле "Итоговая" сделал пример Лист 1 - пустой график, Лист 2 - заполненный.

Пробовал через ИНДЕКС + ПОИСКПОЗ понял что будут очень большие формулы да и названия должны быть одинаковые.
Видимо выход макрос а я в нем не силён.

Заранее благодарю.
Эксель 2007
Решение - макрос.

Автор - Logist
Дата добавления - 06.08.2013 в 17:54
SkyPro Дата: Вторник, 06.08.2013, 19:18 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Ну начать можно с такого:
[vba]
Код
Sub Кнопка1_Щелчок()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sPath$, sXLS$
sPath = "Z:\Documents\Табеля" & Application.PathSeparator ' указать директорию с файлами

     sXLS = Dir(sPath & "*.xls*")
     Do While sXLS <> ""
         Workbooks.Open sPath & sXLS
          
          
         'Тут процедура копирования. Еще нужно подумать, но мне пока некогда. Можно поискать готовое решение
          
          
         Workbooks(2).Close False
         sXLS = Dir
     Loop
      
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
[/vba]


skypro1111@gmail.com
 
Ответить
СообщениеНу начать можно с такого:
[vba]
Код
Sub Кнопка1_Щелчок()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sPath$, sXLS$
sPath = "Z:\Documents\Табеля" & Application.PathSeparator ' указать директорию с файлами

     sXLS = Dir(sPath & "*.xls*")
     Do While sXLS <> ""
         Workbooks.Open sPath & sXLS
          
          
         'Тут процедура копирования. Еще нужно подумать, но мне пока некогда. Можно поискать готовое решение
          
          
         Workbooks(2).Close False
         sXLS = Dir
     Loop
      
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 06.08.2013 в 19:18
Hugo Дата: Вторник, 06.08.2013, 20:36 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
С Workbooks(2).Close False я бы не спешил - у меня например их всегда открыто 4.
Лучше так:
[vba]
Код
    Dim wb As Workbook
     '...
     Set wb = Workbooks.Open(sPath & sXLS)
     'Тут процедура копирования. Еще нужно подумать, но мне пока некогда. Можно поискать готовое решение
     wb.Close False
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеС Workbooks(2).Close False я бы не спешил - у меня например их всегда открыто 4.
Лучше так:
[vba]
Код
    Dim wb As Workbook
     '...
     Set wb = Workbooks.Open(sPath & sXLS)
     'Тут процедура копирования. Еще нужно подумать, но мне пока некогда. Можно поискать готовое решение
     wb.Close False
[/vba]

Автор - Hugo
Дата добавления - 06.08.2013 в 20:36
SkyPro Дата: Вторник, 06.08.2013, 20:49 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Тяжелый день. Как только не пробовал прописать закрытие только что открытой книги, даже не подумал о таком варианте )
Спасибо , Hugo )


skypro1111@gmail.com
 
Ответить
СообщениеТяжелый день. Как только не пробовал прописать закрытие только что открытой книги, даже не подумал о таком варианте )
Спасибо , Hugo )

Автор - SkyPro
Дата добавления - 06.08.2013 в 20:49
Logist Дата: Среда, 07.08.2013, 17:15 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 1 ±
Замечаний: 0% ±

Здесь нашел макрос который собирает данные из выбранных Книг в один файл,
но копирует все данные файла.
[vba]
Код

Sub Собираем_диапазоны_выбранных_книг_и_всех_листов()
        
      Dim iRng As Range
      Dim iRngAddress As String, oAwb As String, oFile
      Dim lLastRow As Long, lLastRowMyBook As Long
      Dim iLastColumn As Integer
      Dim Str() As String
         
         
      With Application.FileDialog(msoFileDialogFilePicker)
          .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
          Sheet.Activate
          lLastRow = Cells(1, 1).SpecialCells(xlLastCell).Row
          iLastColumn = Cells(1, 1).SpecialCells(xlLastCell).Column
          lLastRowMyBook = ThisWorkbook.Worksheets(1).Cells(100, 1).SpecialCells(xlLastCell).Row
          iRngAddress = Range(Cells(lLastRowMyBook, 1), Cells(lLastRowMyBook + lLastRow, iLastColumn)).Address
          Sheet.Range(Cells(1, 1), Cells(lLastRow, iLastColumn)).Copy Destination:=ThisWorkbook.Worksheets(1).Range(iRngAddress)
             
      Next Sheet
          Workbooks(oAwb).Close False
      Next oFile
         
      End With
         
      Application.ScreenUpdating = True
End Sub

[/vba]

и вроде вот оно решение осталось только применить сортировку и удалить лишние строки по колонке с ИНН, но беда в том (как я понял) что есть объединенные ячейки и сортировка не может быть выполнена. Файл результат описанного макроса прилагаю.

Можно ли подправить макрос что б он сортировал таблицу к виду как в первом сообщении "в файле "Итоговая" сделал пример Лист 1 - пустой график, Лист 2 - заполненный."?
Или назначить второй макрос который будет сортировать результат данного макроса?

Заранее спасибо.
К сообщению приложен файл: 4062860.rar (40.7 Kb)


Сообщение отредактировал Logist - Среда, 07.08.2013, 17:17
 
Ответить
СообщениеЗдесь нашел макрос который собирает данные из выбранных Книг в один файл,
но копирует все данные файла.
[vba]
Код

Sub Собираем_диапазоны_выбранных_книг_и_всех_листов()
        
      Dim iRng As Range
      Dim iRngAddress As String, oAwb As String, oFile
      Dim lLastRow As Long, lLastRowMyBook As Long
      Dim iLastColumn As Integer
      Dim Str() As String
         
         
      With Application.FileDialog(msoFileDialogFilePicker)
          .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
          Sheet.Activate
          lLastRow = Cells(1, 1).SpecialCells(xlLastCell).Row
          iLastColumn = Cells(1, 1).SpecialCells(xlLastCell).Column
          lLastRowMyBook = ThisWorkbook.Worksheets(1).Cells(100, 1).SpecialCells(xlLastCell).Row
          iRngAddress = Range(Cells(lLastRowMyBook, 1), Cells(lLastRowMyBook + lLastRow, iLastColumn)).Address
          Sheet.Range(Cells(1, 1), Cells(lLastRow, iLastColumn)).Copy Destination:=ThisWorkbook.Worksheets(1).Range(iRngAddress)
             
      Next Sheet
          Workbooks(oAwb).Close False
      Next oFile
         
      End With
         
      Application.ScreenUpdating = True
End Sub

[/vba]

и вроде вот оно решение осталось только применить сортировку и удалить лишние строки по колонке с ИНН, но беда в том (как я понял) что есть объединенные ячейки и сортировка не может быть выполнена. Файл результат описанного макроса прилагаю.

Можно ли подправить макрос что б он сортировал таблицу к виду как в первом сообщении "в файле "Итоговая" сделал пример Лист 1 - пустой график, Лист 2 - заполненный."?
Или назначить второй макрос который будет сортировать результат данного макроса?

Заранее спасибо.

Автор - Logist
Дата добавления - 07.08.2013 в 17:15
KuklP Дата: Среда, 07.08.2013, 17:22 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Как только не пробовал прописать закрытие только что открытой книги

Еще после Workbooks.Open, открытая книга является активной. К этому свойству тоже можно привязаться.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Среда, 07.08.2013, 17:23
 
Ответить
Сообщение
Как только не пробовал прописать закрытие только что открытой книги

Еще после Workbooks.Open, открытая книга является активной. К этому свойству тоже можно привязаться.

Автор - KuklP
Дата добавления - 07.08.2013 в 17:22
SergeyKorotun Дата: Среда, 07.08.2013, 23:38 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Есть много книг, расположенных по одной в папке. Путь к книгам имеет структуру:
disk:\...\GOD\KVARTAL\DDMMYY
где GOD ={2000...2013}
KVARTAL={I_KV, II_KV, III_KV, IV_KV}
DDMMYY без коментариев понятно что значит.
В каждой папке имя книги разное, зависит от дня и месяца.
В некоторых папках книги отсутствуют.
Нужно обойти все папки, начиная с начальной даты и по конечную, и что-то сделать с книгами. Поскольку все пути к книге можно перебрать в тройном вложенном цикле и имя файла также рассчитать по обрабатываемой дате, перебрать все книги - не проблема. А как пропустить те дни, где книги нет?
 
Ответить
СообщениеЕсть много книг, расположенных по одной в папке. Путь к книгам имеет структуру:
disk:\...\GOD\KVARTAL\DDMMYY
где GOD ={2000...2013}
KVARTAL={I_KV, II_KV, III_KV, IV_KV}
DDMMYY без коментариев понятно что значит.
В каждой папке имя книги разное, зависит от дня и месяца.
В некоторых папках книги отсутствуют.
Нужно обойти все папки, начиная с начальной даты и по конечную, и что-то сделать с книгами. Поскольку все пути к книге можно перебрать в тройном вложенном цикле и имя файла также рассчитать по обрабатываемой дате, перебрать все книги - не проблема. А как пропустить те дни, где книги нет?

Автор - SergeyKorotun
Дата добавления - 07.08.2013 в 23:38
RAN Дата: Среда, 07.08.2013, 23:57 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Например так
[vba]
Код
On Error Resume Next
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНапример так
[vba]
Код
On Error Resume Next
[/vba]

Автор - RAN
Дата добавления - 07.08.2013 в 23:57
SergeyKorotun Дата: Четверг, 08.08.2013, 00:30 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Почитал за On Error Resume Next. Больше подойдет On Error GoTo
Но все книги находятся на сетевом диске и если он будет недоступен, никто и не узнает, что макрос ничего не обработал.
Тогда предварительно нужно проверить, существует ли disk:\...\GOD\KVARTAL\DDMMYY Как?

Нашел: if dir( "Определённая папка\1.xls") <>"" then msgbox "Файл 1.xls существует"
Или: If Dir("filename") <> vbNullString Then MsgBox "Файл существует" End If


Сообщение отредактировал SergeyKorotun - Четверг, 08.08.2013, 00:42
 
Ответить
СообщениеПочитал за On Error Resume Next. Больше подойдет On Error GoTo
Но все книги находятся на сетевом диске и если он будет недоступен, никто и не узнает, что макрос ничего не обработал.
Тогда предварительно нужно проверить, существует ли disk:\...\GOD\KVARTAL\DDMMYY Как?

Нашел: if dir( "Определённая папка\1.xls") <>"" then msgbox "Файл 1.xls существует"
Или: If Dir("filename") <> vbNullString Then MsgBox "Файл существует" End If

Автор - SergeyKorotun
Дата добавления - 08.08.2013 в 00:30
RAN Дата: Четверг, 08.08.2013, 00:59 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Создайте несколько книг (не все) и запустите
[vba]
Код
Sub qq()
     On Error Resume Next
     For i = 1 To 6
         Set wb = Workbooks.Open("D:\" & i & ".xlsx")
         If Err Then
             strk = strk & " " & i
         End If
         wb.Close
         Err.Clear
     Next
     MsgBox (strk)
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеСоздайте несколько книг (не все) и запустите
[vba]
Код
Sub qq()
     On Error Resume Next
     For i = 1 To 6
         Set wb = Workbooks.Open("D:\" & i & ".xlsx")
         If Err Then
             strk = strk & " " & i
         End If
         wb.Close
         Err.Clear
     Next
     MsgBox (strk)
End Sub
[/vba]

Автор - RAN
Дата добавления - 08.08.2013 в 00:59
SergeyKorotun Дата: Пятница, 09.08.2013, 22:58 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
А как сделать то же самое для Workbooks.OpenText?


Сообщение отредактировал SergeyKorotun - Пятница, 09.08.2013, 23:43
 
Ответить
СообщениеА как сделать то же самое для Workbooks.OpenText?

Автор - SergeyKorotun
Дата добавления - 09.08.2013 в 22:58
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!