Bagaimana cara menggabungkan data dari beberapa lembar kerja di makro excel?

Misalnya Anda memiliki 100 lembar data dan semua lembar kerja memiliki struktur yang sama. Yang kami inginkan adalah mendapatkan semua data beberapa lembar kerja dikonsolidasikan ke dalam satu lembar kerja. Lakukan dalam hitungan detik dengan kode berikut

Catatan. Kode ini mengasumsikan bahwa SEMUA lembar kerja memiliki struktur bidang yang sama; . Kode menyalin semua baris menjadi satu lembar kerja baru yang disebut Master.  

Sub CopyFromWorksheets() 
    Dim wrk As Workbook 'Workbook object - Always good to work with object variables
    Dim sht As Worksheet 'Object for handling worksheets in loop
    Dim trg As Worksheet 'Master Worksheet
    Dim rng As Range 'Range object
    Dim colCount As Integer 'Column count in tables in the worksheets
     
    Set wrk = ActiveWorkbook 'Working in active workbook
     
    For Each sht In wrk.Worksheets 
        If sht.Name = "Master" Then 
            MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _ 
            "Please remove or rename this worksheet since 'Master' would be" & _ 
            "the name of the result worksheet of this process.", vbOKOnly + vbExclamation, "Error" 
            Exit Sub 
        End If 
    Next sht 
     
     'We don't want screen updating
    Application.ScreenUpdating = False 
     
     'Add new worksheet as the last worksheet
    Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count)) 
     'Rename the new worksheet
    trg.Name = "Master" 
     'Get column headers from the first worksheet
     'Column count first
    Set sht = wrk.Worksheets(1) 
    colCount = sht.Cells(1, 255).End(xlToLeft).Column 
     'Now retrieve headers, no copy&paste needed
    With trg.Cells(1, 1).Resize(1, colCount) 
        .Value = sht.Cells(1, 1).Resize(1, colCount).Value 
         'Set font as bold
        .Font.Bold = True 
    End With 
     
     'We can start loop
    For Each sht In wrk.Worksheets 
         'If worksheet in loop is the last one, stop execution (it is Master worksheet)
        If sht.Index = wrk.Worksheets.Count Then 
            Exit For 
        End If 
         'Data range in worksheet - starts from second row as first rows are the header rows in all worksheets
        Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536, 1).End(xlUp).Resize(, colCount)) 
         'Put data into the Master worksheet
        trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value 
    Next sht 
     'Fit the columns in Master worksheet
    trg.Columns.AutoFit 
     
     'Screen updating should be activated
    Application.ScreenUpdating = True 
End Sub

Cara Penggunaan

  • Buka buku kerja yang berisi lembar kerja yang ingin Anda gabungkan
  • Tekan Alt+F11 untuk membuka Visual Basic Editor (VBE)
  • Dari menu, pilih Insert-Module
  • Salin & Tempel kode di atas ke jendela kode di sebelah kanan
  • Simpan file dan tutup VBE

Unduh File Contoh. Konsolidasikan Beberapa Lembar Kerja. xls

Baca juga

  • Cara Membuka Proteksi Lembar Excel Tanpa Kata Sandi
  • Menggabungkan beberapa file excel menjadi satu spreadsheet – VBA
  • PivotTable Tingkat Lanjut. Menggabungkan Data dari Beberapa Lembar
  • Cara Menggabungkan Teks dari Banyak Sel
  • Lebih Banyak Alat & Tip VBA

Bagikan ini

  • Facebook
  • Twitter
  • LinkedIn
  • Surel
  • Telegram

Terkait

Gunakan VBA untuk menggabungkan data dari beberapa sheet menjadi satu spreadsheet. Ini adalah panduan langkah demi langkah tentang bagaimana saya mencapai ini

Saya melakukan hari terakhir kursus pelatihan VBA 3 hari dan pada hari ini saya mengambil kesempatan untuk menjawab masalah tertentu dari klien. (Yang notabene adalah SMC Pneumatics yang berbasis di Milton Keynes)

Masalah Konsolidasi Data

Pertanyaan mereka adalah. "Bagaimana kita, menggunakan VBA, menggabungkan data dari banyak spreadsheet?". Ketika saya menanyai mereka tentang persyaratan mereka untuk prosedur VBA mereka, itu melibatkan hal-hal berikut

  • Pengguna akan mengklik tombol form yang akan membuka kotak dialog browse
  • Mereka kemudian akan memilih folder di mana akan ada excel dan sejumlah file lainnya
  • Kemudian, setelah memilih folder, VBA akan mengulang dan memilih dan membuka hanya file. xlsx. xls. file xlsm. (Itu. xls untuk buku kerja Excel yang dibuat dalam versi yang lebih lama)
  • Skrip kemudian akan memilih rentang dalam file dan menyalin dan menempelkannya kembali ke file utama

Jadi kami mengatasi masalah ini selama jam makan siang dan meskipun ini mungkin bukan cara yang paling efisien untuk menyelesaikannya, terutama dengan ribuan dokumen, tentu saja lebih baik daripada harus melakukannya secara manual.

Fungsi openMyFiles()

Dua fungsi, saya gunakan, untuk mengatasi masalah ini. Sebenarnya satu fungsi dan satu sub-prosedur. Fungsi openMyFiles() dirancang untuk mengulang berbagai file Excel di folder yang dipilih, yang lainnya hanya untuk mendapatkan folder yang dipilih. Sebelum memulai, Anda perlu mengunduh file latihan. Berisi 4 file data sampel, mana yang harus Anda gunakan untuk latihan ini

  1. Buka file Excel Baru dan simpan file sebagai sebagai konsolidasi_laporan. xlsm
    (Ingatlah untuk menyimpannya sebagai buku kerja berkemampuan makro. Kalau tidak, kode VBA tidak akan berjalan)
  2. Tampilkan Tab Pengembang. (File - Opsi - Sesuaikan Pita dan periksa Tab Pengembang)
  3. Pada Tab Pengembang klik Ikon Visual Basic di sebelah kiri untuk membuka Editor Visual Basic
  4. Pastikan Anda dapat melihat jendela Project Explorer di sebelah kiri. (Lihat - Project Explorer) Jika tidak bisa
  5. Di Project Explorer klik kanan pada VBAProject(consolidate_reports. xlsm) dan pilih Sisipkan - Modul. (Modul adalah tempat Anda akan menempatkan kode VBA untuk pelajaran ini. Modul juga dibuat saat Anda menggunakan tombol rekam Makro. )

    Bagaimana cara menggabungkan data dari beberapa lembar kerja di makro excel?

  6. Klik di bagian atas modul kosong baru dan ketik. Opsi Eksplisit
    (Baris ini memudahkan untuk melacak variabel Anda jika terjadi kesalahan. Tidak tahu apa yang saya bicarakan?
  7. Sekarang saatnya untuk memulai Sub Prosedur. Jenis

    Sub bukaMyFiles()

    Akhir Sub

  8. Kami akan mengetikkan kode VBA yang diperlukan di dalam Sub/Sub Akhir
    (Semua kode baru akan dicetak tebal, jadi Anda tahu kode mana yang perlu Anda tambahkan. )
  9. Selanjutnya kita perlu Dimensi atau mendeklarasikan variabel yang akan menampung nama folder, nama file, dan ekstensi file. Ketik teks tebal berikut

    Sub bukaMyFiles()
    Sumber Redup Sebagai String
    Redupkan strFile Sebagai String
    Redupkan fileExt Sebagai String

    Akhir

  10. Sekarang untuk menambahkan kode untuk menghapus sembulan yang tidak diinginkan yang datang dengan menyalin dan menempelkan kode
    Sub bukaMyFiles()
    Sumber Redup Sebagai String
    Redupkan strFile Sebagai String
    Redupkan fileExt Sebagai String
    Aplikasi. Peringatan Tampilan = Salah
    Akhir Sub
  11. Pada baris berikutnya, kita akan menambahkan baris yang akan memanggil fungsi GetFolder() yang belum kita buat. Hasil dari fungsi ditempatkan ke dalam variabel Sumber yang kita buat sebelumnya
    Sumber = GetFolder() & "\"
  12. Selanjutnya, kita akan menggunakan metode Dir() untuk mendapatkan semua file di folder yang dipilih. (Ingat variabel Sumber akan menyimpan folder yang dipilih oleh pengguna). Nilai itu kemudian ditempatkan ke dalam variabel strFile
    strFile = Dir(Sumber)
  13. Jadi sekarang saatnya untuk membangun pernyataan perulangan kita. Pada dasarnya, saya harus mengulang semua file di folder yang dipilih hanya membuka file Excel. Ketik berikut untuk memulai Do Loop

    Lakukan Sementara Len(strFile) > 0

    Lingkaran

  14. Di dalam tempat Do loop atur variabel fileExt ke nilai ekstensi file dari file yang saat ini dilingkarkan

    Lakukan Sementara Len(strFile) > 0
    fileExt = Kanan(strFile, Len(strFile) - InStr(strFile, ". "))
    Lingkaran

  15. Sekarang kita perlu menggunakan pernyataan IF sehingga satu-satunya file yang dibuka adalah file Excel. Tambahkan berikut ini
    (Perhatikan garis bawah memungkinkan Anda untuk melanjutkan kode Anda pada baris terpisah, pastikan Anda mengetik spasi sebelum garis bawah "kelanjutan garis". )
    Lakukan Sementara Len(strFile) > 0
    fileExt = Kanan(strFile, Len(strFile) - InStr(strFile, ". "))
    Jika fileExt = "xlsx" Atau fileExt = "xls" Atau fileExt = "xlsm" _
    Dan strFile <>"consolidate_reports. xlsm" Lalu
    Berakhir jika
    Lingkaran
  16. Pada baris berikutnya kita akan membuka buku kerja. Menggunakan variabel Sumber dan strFile yang kita atur sebelumnya. Juga sebelum kita akan menambahkan penangan kesalahan hanya jika pengguna mengklik tombol batal
    Lakukan Sementara Len(strFile) > 0
    fileExt = Kanan(strFile, Len(strFile) - InStr(strFile, ". "))
    Jika fileExt = "xlsx" Atau fileExt = "xls" Atau fileExt = "xlsm" _
    Atau strFile <>"consolidate_reports. xlsm" Lalu
    Saat Kesalahan Pergi Ke ErrHandler
    Buku kerja. Buka Nama File. =Sumber & strFile
    Berakhir jika
    Lingkaran
  17. Hanya untuk memastikan kami akan mengaktifkan lembar kerja
    Lembar kerja(1). Mengaktifkan
  18. Sekarang mari kita pilih wilayah saat ini
    Rentang("A1"). Wilayah Saat Ini. Pilih
  19. Lalu Salin
    Pilihan. Salinan
  20. Kemudian kami akan beralih kembali ke laporan_konsolidasi. buku kerja xlsm
    Buku kerja("consolidate_reports. xlsm"). Mengaktifkan
  21. Selanjutnya kita perlu memeriksa apakah ini informasi pertama yang disalin. Jika ya, kami akan menempatkan data di Range("A2") jika tidak, kami akan menempatkan data di bawah data lain yang kami salin

    Jika Rentang("A1"). Offset(1). Nilai <> "" Kemudian
    Rentang("A1"). Akhir(xlDown). Offset(1). Pilih
    Kalau tidak
    Rentang("A2"). Pilih
    Berakhir jika
  22. Besar. Sekarang kami telah memilih lokasi yang benar, mari tempelkan datanya. Ketik berikut ini setelah End If
    Lembar aktif. Tempel
  23. Sekarang kita akan menutup buku kerja yang baru saja kita salin datanya
    Buku kerja(strFile). Menutup
  24. Sekarang di luar pernyataan If tetapi di dalam loop kita akan pindah ke file berikutnya di folder. Kami juga akan keluar dari Sub yang merupakan hasil dari penangan kesalahan. Pada dasarnya, jika seseorang mengklik tombol Cancel, prosedur tidak akan dilanjutkan. Saya telah menyertakan seluruh teks untuk Sub Prosedur openMyFiles Anda harus menambahkan teks tebal
    Sub bukaMyFiles()
    Sumber Redup Sebagai String
    Redupkan strFile Sebagai String
    Redupkan fileExt Sebagai String
    Aplikasi. Peringatan Tampilan = Salah
    Sumber = GetFolder() & "\"
    strFile = Dir(Sumber)
    Lakukan Sementara Len(strFile) > 0
    fileExt = Kanan(strFile, Len(strFile) - InStr(strFile, ". "))
    Jika fileExt = "xlsx" Atau fileExt = "xls" Atau fileExt = "xlsm" _
    Atau strFile <> "consolidate_reports. xlsm" Lalu
    Buku kerja. Buka Nama File. =Sumber & strFile
    Lembar kerja(1). Mengaktifkan
    Rentang("A1"). Wilayah Saat Ini. Pilih
    Pilihan. Salinan
    Buku kerja("consolidate_reports. xlsm"). Mengaktifkan
    Jika Rentang("A1"). Offset(1). Nilai <> "" Kemudian
    Rentang("A1"). Akhir(xlDown). Offset(1). Pilih
    Rentang Lainnya("A2"). Pilih
    Berakhir jika
    Lembar aktif. Tempel
    Buku kerja(strFile). Menutup
    Berakhir jika
    strFile = Dir()
    Lingkaran
    ErrHandler
    Keluar Sub
    Akhir Sub
  25. Sekarang kita perlu membuat fungsi GetFolder() sehingga variabel Sumber di atas mengetahui folder apa yang dilihatnya;
    Fungsi GetFolder() Sebagai String

    Fungsi Akhir

  26. Di dalam fungsi baik Dimensi variabel kami
    Fungsi GetFolder() Sebagai String
    Dim fldr Sebagai FileDialog
    Dim sItem Sebagai String
    Fungsi Akhir
  27. Sekarang kita bisa mengatur nilai fldr dengan folderpicker
    Fungsi GetFolder() Sebagai String
    Dim fldr Sebagai FileDialog
    Dim sItem Sebagai String
    Atur fldr = Aplikasi. FileDialog(msoFileDialogFolderPicker)
    Fungsi Akhir
  28. Sekarang kita dapat mengatur properti dari kotak dialog msoFileDialogFolderPIcker. Pernyataan Jika dengan kode selanjutnya adalah untuk menangkap nilai kembalian dari kotak Dialog saat pengguna mengklik OK
    Fungsi GetFolder() Sebagai String
    Dim fldr Sebagai FileDialog
    Dim sItem Sebagai String
    Atur fldr = Aplikasi. FileDialog(msoFileDialogFolderPicker)
    Dengan fldr
    Judul = "Pilih folder"
    AllowMultiSelect = Salah
    InitialFileName = Aplikasi. DefaultFilePath
    Jika. Show <> -1 Lalu Ke NextCode
    barang =. Item yang Dipilih(1)
    Berakhir dengan
    Kode Berikutnya
    GetFolder = sItem
    Atur fldr = Tidak ada
    Fungsi Akhir
  29. Hampir sampai. Sekarang kita akan melampirkan sub prosedur openMyFiles() ke toolbar akses cepat. Beralih kembali ke Excel
  30. Klik pada menu tarik-turun Bilah Alat Akses Cepat dan klik lebih banyak perintah

    Bagaimana cara menggabungkan data dari beberapa lembar kerja di makro excel?

  31. Dari menu bilah alat Kustomisasi Akses Cepat, pilih Untuk laporan_konsolidasi. xlsm
    Bagaimana cara menggabungkan data dari beberapa lembar kerja di makro excel?
  32. Dari Pilih Perintah dari menu pilih Makro
    Bagaimana cara menggabungkan data dari beberapa lembar kerja di makro excel?
  33. Dalam daftar makro, klik makro openMyFiles, lalu klik tombol Tambah
  34. Klik Ubah di bagian bawah. (Ini akan memungkinkan Anda untuk mengubah ikon tombol)
  35. Pilih ikon untuk sub prosedur openMyFiles
    Bagaimana cara menggabungkan data dari beberapa lembar kerja di makro excel?
  36. Klik Oke
  37. Klik Oke lagi
  38. Sekarang Anda dapat mengklik tombol baru Anda di bilah alat akses cepat. Pilih folder dengan semua file Excel di dalamnya dan Bob adalah paman Anda. Semua rentang disalin ke dalam laporan_konsolidasi. lembar xlsm

Sekarang jika Anda ingin melihat file yang sudah selesai maka Anda dipersilakan untuk mengunduhnya. Juga jika Anda ingin mendapatkan pemahaman yang komprehensif tentang VBA maka pesan sendiri kursus pelatihan VBA 3 Hari

Bagaimana cara menggabungkan data di Excel menggunakan makro?

Menulis Kode Konsolidasi VBA .
Buka file Excel Baru dan simpan file sebagai sebagai konsolidasi_laporan. .
Tampilkan Tab Pengembang. .
Pada Tab Pengembang klik Ikon Visual Basic di sebelah kiri untuk membuka Editor Visual Basic
Pastikan Anda dapat melihat jendela Project Explorer di sebelah kiri

Bagaimana cara menggabungkan beberapa lembar kerja menjadi satu di VBA?

Menggabungkan semua lembar buku kerja aktif menjadi satu lembar dengan VBA .
Aktifkan buku kerja yang ingin Anda gabungkan semua lembarnya, lalu tekan tombol Alt + F11 untuk membuka jendela Microsoft Visual Basic for Applications
Di jendela popping, klik Sisipkan > Modul untuk membuat skrip Modul baru
Salin kode di bawah ini dan tempelkan ke skrip

Bisakah konsolidasi data diterapkan pada banyak lembar?

Untuk meringkas dan melaporkan hasil dari lembar kerja terpisah, Anda dapat menggabungkan data dari setiap lembar ke dalam lembar kerja master . Lembar dapat berada di buku kerja yang sama dengan lembar kerja utama, atau di buku kerja lainnya.

Bagaimana cara mengotomatiskan konsolidasi di Excel?

Langkah-Langkah Mengotomatiskan Konsolidasi Data di Excel .
📌 Langkah 1. Siapkan Sumber Data
📌 Langkah 2. Gunakan Fitur Konsolidasi
📌 Langkah 3. Pilih Fungsi & Tambahkan Referensi
📌 Langkah 4. Konsolidasi Otomatis
📌 Langkah 5. Amati Hasilnya