Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 9
  • 8.8K

Co tydzień otrzymuję kilkanaście/kilkadziesiąt wypełnionych plików/skoroszytów Excela. Potrzebuję zautomatyzować proces kopiowania danych z tych arkuszy do pliku master.

Założenia:

- Nazwy plików (skoroszytów) Excela są różne (np. plik1, plik2, plik3, plik3 itp.) - zapisuję je w jednym katalogu.

- We wszystkich skoroszytach dane znajdują się w "Arkusz 1".

- Wszystkie dane mają te same nagłówki, które znajdują się w zakresie "$B$4:$G$4".

- Liczba wierszy z danymi jest zmienna.

- W pliku master Excela w "Arkusz 1" powinny zostać przekopiowane dane z wszystkich skoroszytów (w pliku master znajdują się już nagłówki w tym samym zakresie: $B$4:$G$4, chodzi tylko o przekopiowanie danych bez nagłówków).

- Kolejność plików, z których mają być kopiowanie dane nie ma znaczenie (później mogę posortować).

 Proszę o pomoc lub chociaż podpowiedź, jak mogę to zrobić. Obawiam się, że bez VBA się nie obejdzie.

 

Przemo
  • Zapytał
  • @ Przemo | 30.04.2014
    • laureat
    • 59
    • 24
    • 71
Komentarze (4)
Tutaj znowu widzę rozwiązanie za pomocą dodatku Power Query (bez VBA). Tylko czy to wchodzi w grę?
Skomentował : @ TRENER ALTKOM AKADEMII ,30.04.2014
Niestety nie mam tego dodatku na firmowym komputerze.
Skomentował : @ Przemo ,05.05.2014
  • 59
  • 24
  • 71

Odpowiedzi (3)

  • 11

Jedynym rozwiązaniem bez narzędzi dodatkowych jest, jak Pan sam zauważył, VBA. Makro może wyglądać następująco:

Sub Scalanie()

folder = "C:\Pliki\"

Set master = ActiveSheet

plik = Dir(folder & "*.xlsx")

wiersz = 5

Do While plik <> ""

   set scalany = Workbooks.Open(folder & plik).Worksheets("Arkusz1")

   set zakres = scalany.Range(Range("B5:G5"),Range("B5:G5").End(xlDown))

   zakres.Copy master.Cells(wiersz,2)

   wiersz = wiersz + zakres.Rows.Count

   scalany.Parent.Close

Loop

End Sub

 

 

  • Odpowiedział
  • @ | 05.05.2014
  • TRENER ALTKOM AKADEMII
Komentarze
Dziękuję za pomoc. Właśnie o to mi chodziło.
Skomentował : @ Przemo ,05.05.2014
  • 59
  • 24
  • 71
  • 0

Wszędzie na forach widzę podobne makra, które kopiują, scalają dane z wielu plików do jednego. Zawsze jest jeden warunek, że pliki do scalenia są w jednym folderze. Jak wzbogacić powyższy kod VBA, aby przeszukiwał każdy podfolder w folderze głównym, w poszukiwaniu pliku do skopiowania danych?

Łukasz_Moliński
  • Odpowiedział
  • @ Łukasz_Moliński | 04.11.2016
    • 2
    • 0
    • 1
  • 2

Można wykorzystać poniższy kod, wystarczy w pętli gdzie wypisywana jest ścieżka plików w podfolderach dodać instrukcję do wykonania pożądanych czynności na plikach:

Private Sub PrintFolders()
    Dim sciezkaFolderu As String
    Dim objFSO As Object
    Dim objFolder As Object
    Dim objSubFolder As Object
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ' Folder do przeglądania
    Set objFolder = objFSO.GetFolder("C:\Users\Przykład")
    Dim i As Long
    Dim j As Long
    i = 1
    j = 1
    ' Przegląd folderów we wskazanym folderze głównym
    Application.EnableCancelKey = xlErrorHandler
    For Each objSubFolder In objFolder.subfolders
    Application.StatusBar = objSubFolder.Path & " " & objSubFolder.Name
        ' Nazwa folderu
        Cells(i + 1, 1) = objSubFolder.Name
        ' Ścieżka folderu
        sciezkaFolderu = objSubFolder.Path
        Cells(i + 1, 2) = sciezkaFolderu
        ' Przegląd plików w folderze
        ChDir sciezkaFolderu
        j = i + 1
        Dim sciezka As String
        sciezka = Dir("")
        Do Until sciezka = ""
            j = j + 1
            Cells(j, 1).Value = sciezka
            Cells(j, 2).Value = sciezkaFolderu & "\" & sciezka
            sciezka = Dir
        Loop
        i = j - 1
        i = i + 1
    Next objSubFolder
End Sub

 

Karol_Pisarek
  • Odpowiedział
  • @ Karol_Pisarek | 10.01.2017
    • lider
    • 5
    • 1
    • 13