Hợp nhất nhiều File vào 1 file

Ðề: Hợp nhất nhiều File vào 1 file

Cảm ơn bác win, em gà mờ ko hiểu được Macro ạ. Bác hướng dẫn chi tiết hơn giúp em k?
 
Dear Anh/ Chị
Em đang cần gom KPI của phòng từ đầu năm đến giờ, hiên nay KPI mọi người đang để mỗi ngày một file excel giờ em muốn gom các file chứa sheet đó thành một. Em đã tải file này về và làm theo hướng dẫn bên dưới nhưng vẫn chưa hiểu lắm ạ. Nhờ anh giải đáp giúp em vì em cũng ko biết gì về marco đâu ạ, đang làm máy móc theo hướng dẫn của mọi người
Trên file tải về của Anh Beo09 em đã làm theo chú ý phía dưới nhưng vẫn ko được. File em tải lên đây thì bị lỗi ko được. Cám ơn Anh/ Chị
https://app.box.com/s/5s4gswnwwetojab7gbqy
 
Hợp nhất nhiều File vào 1 file và tự động tổng hợp

Hôm nay nay tôi đưa ra ý tưởng làm thế nào để hợp nhất dữ liệu nhiều File vào 1 file trong Excel.
Giả sử bạn theo dõi công việc trong nhiều năm, mỗi năm chứa dữ liệu trong 1 File hoặc bạn theo dõi công việc của 1 năm với mỗi File là 1 tháng, vậy làm sao để gộp dữ liệu của nhiều File vào 1 File tổng.

Ý tưởng của tôi là viết 1 Macro và gán macro này cho 1 nút lệnh, khi nhấn vào nút này nó sẽ hiện ra hộp thoại Open Files, chọn ổ dĩa và chọn mở thư mục, tiếp theo chọn tất cả các File cần hợp nhất và nhấn nút Open, macro sẽ chạy và gán tất các các sheet chứa trong các File vừa chọn và File tổng.

Tiếp theo là nhấn vào nút lệnh hợp nhất các sheet, macro sẽ chạy và gộp dữ liệu của các sheet vừa gán vào File tổng vào sheet tổng, tiếp theo nhấn vào nút lệnh tổng hợp macro sẽ chạy tự lấy dữ liệu từ sheet tổng và tạo ra Pivottable với kết quả mình cần tổng hợp báo cáo.

Đây là 1 vấn đề mới mà trên diễn đàn giải pháp Excel chưa có ai đưa ra ý tưởng này vì nó thuộc đề tài khó, tôi đưa ra ý tưởng này để cùng để cùng nhau tháo gỡ mọi khó khăn vướng mắc trong việc tổng hợp và báo cáo hàng quý, hàng năm hoặc tổng hợp kết quả cho 1 giai đoạn (5 năm), nếu thực hiện tốt ý tưởng này tôi dám cam đoan với các bạn chỉ trong vòng 5 đến 10 phút bạn sẽ có ngay kết quả mình cần.

Nếu các bạn nào quan tâm đến vấn đề này thì hãy tham gia và cùng nhau thảo luận, đóng góp hoặc trong công việc gặp vấn đề như tôi vừa nêu do sếp hay lãnh đạo bắt phải theo dõi từng File 1 cách rời rạc nên việc theo dõi, tổng hợp báo cáo quá khó khăn, bây giờ các bạn cần 1 ứng dụng để tháo gỡ mọi khó khăn như vấn đề nêu trên, thì các bạn cần nêu các vấn đề khó khăn và nêu yêu cầu cần giúp, xong tải File lên tôi sẽ nghiên cứu và sẽ giúp đỡ theo yêu cầu của các bạn.

Lưu ý: để có kết quả đúng thì cần các tiêu chí sau đây:
- Tiêu đề của các sheet chứa trong File phải hoàn toàn giống nhau (tiêu đề không được Merge and center (nhập ô).
- Tên từng sheet phải cụ thể rõ ràng để dễ dàng kiểm tra lại kết quả (nếu tên sheet trùng thì nó tự động đặt 1 và 2).
- Để được kết quả đúng thì cần đề ra nội dung cần tổng hợp báo cáo (vì Macro dùng chạy Pivottable được viết dựa trên tiêu đề cột).



Mình cũng đang cần tìm về vấn đề này, mình có 1 file với macro như trên tuy nhiên VBA project của nó có mật khẩu nên mình chưa mở ra được, anh e nào hack được pass VBA mình gửi lên để anh e lấy ra cùng nghiên cứu
 
Hợp nhất nhiều File vào 1 file và tự động tổng hợp

Hôm nay nay tôi đưa ra ý tưởng làm thế nào để hợp nhất dữ liệu nhiều File vào 1 file trong Excel.
Giả sử bạn theo dõi công việc trong nhiều năm, mỗi năm chứa dữ liệu trong 1 File hoặc bạn theo dõi công việc của 1 năm với mỗi File là 1 tháng, vậy làm sao để gộp dữ liệu của nhiều File vào 1 File tổng.

Ý tưởng của tôi là viết 1 Macro và gán macro này cho 1 nút lệnh, khi nhấn vào nút này nó sẽ hiện ra hộp thoại Open Files, chọn ổ dĩa và chọn mở thư mục, tiếp theo chọn tất cả các File cần hợp nhất và nhấn nút Open, macro sẽ chạy và gán tất các các sheet chứa trong các File vừa chọn và File tổng.

Tiếp theo là nhấn vào nút lệnh hợp nhất các sheet, macro sẽ chạy và gộp dữ liệu của các sheet vừa gán vào File tổng vào sheet tổng, tiếp theo nhấn vào nút lệnh tổng hợp macro sẽ chạy tự lấy dữ liệu từ sheet tổng và tạo ra Pivottable với kết quả mình cần tổng hợp báo cáo.

Đây là 1 vấn đề mới mà trên diễn đàn giải pháp Excel chưa có ai đưa ra ý tưởng này vì nó thuộc đề tài khó, tôi đưa ra ý tưởng này để cùng để cùng nhau tháo gỡ mọi khó khăn vướng mắc trong việc tổng hợp và báo cáo hàng quý, hàng năm hoặc tổng hợp kết quả cho 1 giai đoạn (5 năm), nếu thực hiện tốt ý tưởng này tôi dám cam đoan với các bạn chỉ trong vòng 5 đến 10 phút bạn sẽ có ngay kết quả mình cần.

Nếu các bạn nào quan tâm đến vấn đề này thì hãy tham gia và cùng nhau thảo luận, đóng góp hoặc trong công việc gặp vấn đề như tôi vừa nêu do sếp hay lãnh đạo bắt phải theo dõi từng File 1 cách rời rạc nên việc theo dõi, tổng hợp báo cáo quá khó khăn, bây giờ các bạn cần 1 ứng dụng để tháo gỡ mọi khó khăn như vấn đề nêu trên, thì các bạn cần nêu các vấn đề khó khăn và nêu yêu cầu cần giúp, xong tải File lên tôi sẽ nghiên cứu và sẽ giúp đỡ theo yêu cầu của các bạn.

Lưu ý: để có kết quả đúng thì cần các tiêu chí sau đây:
- Tiêu đề của các sheet chứa trong File phải hoàn toàn giống nhau (tiêu đề không được Merge and center (nhập ô).
- Tên từng sheet phải cụ thể rõ ràng để dễ dàng kiểm tra lại kết quả (nếu tên sheet trùng thì nó tự động đặt 1 và 2).
- Để được kết quả đúng thì cần đề ra nội dung cần tổng hợp báo cáo (vì Macro dùng chạy Pivottable được viết dựa trên tiêu đề cột).





tạo 2 module:
#1: Module CommonFunctions
(code)
===========================

Function GetInfoFromClosedFile(ByVal wbPath As String, _
wbName As String, wsName As String, cellRef As String) As Variant
Dim arg As String
GetInfoFromClosedFile = ""
If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\"
' If Dir(wbPath & "\" & wbName) = "" Then Exit Function
arg = "'" & wbPath & "[" & wbName & "]" & _
wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
On Error Resume Next
GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
End Function

Sub CopyValuesFromAClosedWorkbook(fPath As String, _
fName As String, srcSheet As String, srcRange As String, desSheet As String, desRange As String)
With Worksheets(desSheet).Range(desRange)
.FormulaArray = "='" & fPath & "\[" & fName & "]" _
& srcSheet & "'!" & srcRange
.Value = .Value
End With
End Sub

Public Function ColumnNumberToLetter(ByVal lngNumber As Long) As String
ColumnNumberToLetter = Split(ThisWorkbook.Worksheets(1).Columns(lngNumber).Address, ":")(0)
End Function

Public Function ColumnLetterToNumber(ByVal strLetter As String) As Long
ColumnLetterToNumber = ThisWorkbook.Worksheets(1).Columns(strLetter).Column
End Function

Function GetFolder(strPath As String) As String
Dim fldr As FileDialog
Dim sItem As String
sItem = ""
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Chon thu muc chua file du lieu cac Phong"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Function

Sub ProcessRange(sPath As String, sFile As String, sSheet As String, _
minCol As String, minRow As String, _
maxCol As String, maxRow As String, tempCol As String)
Dim col As Integer
Dim row As Integer
Dim sRange As String
Dim tRange As String
Dim tempRange As String

sRange = minCol & minRow & ":" & maxCol & maxRow
tRange = tempCol & minRow & ":" & _
ColumnNumberToLetter(ColumnLetterToNumber(maxCol) - ColumnLetterToNumber(minCol) + ColumnLetterToNumber(tempCol)) & _
maxRow
Call CopyValuesFromAClosedWorkbook(sPath, sFile, sSheet, sRange, sSheet, tRange)

For col = ColumnLetterToNumber(minCol) To ColumnLetterToNumber(maxCol)
For row = minRow To maxRow
sRange = ColumnNumberToLetter(col) & row
tempRange = ColumnNumberToLetter(ColumnLetterToNumber(tempCol) + col - ColumnLetterToNumber(minCol)) & row
iTemp = ThisWorkbook.Worksheets(sSheet).Range(sRange).Value
iTemp = iTemp + ThisWorkbook.Worksheets(sSheet).Range(tempRange).Value
ThisWorkbook.Worksheets(sSheet).Range(sRange).Value = iTemp
Next
Next

ThisWorkbook.Worksheets(sSheet).Range(tRange).ClearContents
End Sub

===============================================================
#2: Main
(code)
===========================
Sub RealCapNhat(sPath As String, sheetName As String, colMax As String, cellMonth As String, cellYear As String, _
Optional cnKQ As Boolean)
Dim iCount As Integer
Dim sFile As String
Dim sRange As String
Dim i As Integer

Dim bOthersUpdated As Boolean

Password = "0986886338"
ThisWorkbook.Worksheets(sheetName).Unprotect Password

iCount = 0
If sPath <> "" Then
'Xoa het cac dong cu
'Clear 10 dong dau
ThisWorkbook.Worksheets(sheetName).Range("A8:" & colMax & "17").ClearContents
'Xoa cac dong tiep theo
Do While ThisWorkbook.Worksheets(sheetName).Range("A18").Value <> "END"
ThisWorkbook.Worksheets(sheetName).Rows(18).EntireRow.Delete
Loop
ThisWorkbook.Worksheets(sheetName).Range("G2").ClearContents

sMask = sPath & "\*.xls"
sFile = Dir(sMask)
bOthersUpdated = False
Do While Len(sFile) > 0
'==============================================================================
'Xu ly doi voi tung file du lieu Xa
iTemp = ThisWorkbook.Worksheets(sheetName).Range("G2").Value
iTemp = iTemp + GetInfoFromClosedFile(sPath, sFile, sheetName, "B18")
ThisWorkbook.Worksheets(sheetName).Range("G2").Value = iTemp

If bOthersUpdated <> True Then
'Tinh, Huyen
ThisWorkbook.Worksheets(sheetName).Range("C1").Value = GetInfoFromClosedFile(sPath, sFile, sheetName, "C1")
ThisWorkbook.Worksheets(sheetName).Range("C2").Value = GetInfoFromClosedFile(sPath, sFile, sheetName, "C2")
'Thoi diem
ThisWorkbook.Worksheets(sheetName).Range(cellYear).Value = GetInfoFromClosedFile(sPath, sFile, sheetName, cellYear)
ThisWorkbook.Worksheets(sheetName).Range(cellMonth).Value = GetInfoFromClosedFile(sPath, sFile, sheetName, cellMonth)

bOthersUpdated = True
End If
'Insert them dong neu can thiet
If iCount >= 10 Then
ThisWorkbook.Worksheets(sheetName).Rows(iCount + 7).EntireRow.Insert
ThisWorkbook.Worksheets(sheetName).Range("A" & (iCount + 7) & ":" & colMax & (iCount + 7)).Value = _
ThisWorkbook.Worksheets(sheetName).Range("A" & (iCount + 8) & ":" & colMax & (iCount + 8)).Value
End If
'STT
sRange = "A" & (8 + iCount)
ThisWorkbook.Worksheets(sheetName).Range(sRange).Value = iCount + 1
'Ten xa
sRange = "B" & (8 + iCount)
ThisWorkbook.Worksheets(sheetName).Range(sRange).Value = GetInfoFromClosedFile(sPath, sFile, sheetName, "C3")
'Du lieu
sRange = "C" & (8 + iCount) & ":" & colMax & (8 + iCount)
Call CopyValuesFromAClosedWorkbook(sPath, sFile, sheetName, "C18:" & colMax & "18", sheetName, sRange)
'Ket qua
If cnKQ Then
sRange = "AC" & (8 + iCount)
ThisWorkbook.Worksheets(sheetName).Range(sRange).Value = GetInfoFromClosedFile(sPath, sFile, sheetName, "C23")
End If
'==============================================================================
iCount = iCount + 1
sFile = Dir()
Loop
End If
If cnKQ Then
If iCount > 10 Then
iCountR = iCount
Else
iCountR = 10
End If
sRange = "D" & (17 + iCountR)
ThisWorkbook.Worksheets(sheetName).Range(sRange).Value = _
ThisWorkbook.Worksheets("CSVC").Range("G2").Value
End If
ThisWorkbook.Worksheets(sheetName).Protect Password, True, True, True
End Sub
Sub CapNhatDoTuoi(sPath As String)
Dim iCount As Integer
Dim iTemp As Integer
Dim sFile As String
Dim i As Integer

Dim sheetName As String
sheetName = "DoTuoi"

Password = "0986886338"
ThisWorkbook.Worksheets(sheetName).Unprotect Password

iCount = 0
If sPath <> "" Then
'Clear data
ThisWorkbook.Worksheets(sheetName).Range("F6:Q59").ClearContents

sMask = sPath & "\*.xls"
sFile = Dir(sMask)

Do While Len(sFile) > 0
'Xu ly doi voi tung file du lieu Phong
Call ProcessRange(sPath, sFile, sheetName, "F", "6", "Q", "59", "R")

iCount = iCount + 1
sFile = Dir()
Loop
End If

ThisWorkbook.Worksheets(sheetName).Protect Password, True, True, True
End Sub
Sub CapNhatKhac(sPath As String)
Dim iCountT(1 To 4) As Integer
Dim i As Integer
Dim sFile As String
Dim sRange As String
Dim iCount As Integer
Dim sheetName As String
sheetName = "GV"

For i = 1 To 4
iCountT(i) = 0
Next i

Password = "0986886338"
ThisWorkbook.Worksheets(sheetName).Unprotect Password

iCount = 0
If sPath <> "" Then
sMask = sPath & "\*.xls"
sFile = Dir(sMask)

Do While Len(sFile) > 0
'Xu ly doi voi tung file du lieu Phong
sTemp = GetInfoFromClosedFile(sPath, sFile, sheetName, "C24")
Select Case sTemp
Case "PC"
iCountT(1) = iCountT(1) + 1
Case "M1"
iCountT(2) = iCountT(2) + 1
Case "M2"
iCountT(3) = iCountT(3) + 1
Case "KO"
iCountT(4) = iCountT(4) + 1
End Select
sFile = Dir()
iCount = iCount + 1
Loop
End If

'Clear data
ThisWorkbook.Worksheets(sheetName).Range("D" & (iCount + 13) & ":D" & (iCount + 16)).ClearContents
'Set data
ThisWorkbook.Worksheets(sheetName).Range("D" & (iCount + 13)).Value = iCountT(1)
ThisWorkbook.Worksheets(sheetName).Range("D" & (iCount + 14)).Value = iCountT(2)
ThisWorkbook.Worksheets(sheetName).Range("D" & (iCount + 15)).Value = iCountT(3)
ThisWorkbook.Worksheets(sheetName).Range("D" & (iCount + 16)).Value = iCountT(4)

ThisWorkbook.Worksheets(sheetName).Protect Password, True, True, True
End Sub
Sub CapNhat()
Dim sPath As String
sPath = GetFolder(ThisWorkbook.Path)
If sPath <> "" Then
Call RealCapNhat(sPath, "CSVC", "AI", "T2", "W2")
Call RealCapNhat(sPath, "GV", "AC", "R2", "T2", True)
Call CapNhatDoTuoi(sPath)
MsgBox ("Da cap nhat xong")
End If
End Sub
 
Tổng hợp các file excel qua mạng nội bộ hàng tháng
em muốn tổng hợp các sheet của nhieu excel (sheet1 của worksheet1, sheet1 của worksheet2,...) qua mạng nội bộ hàng tháng, sau đó em sẽ tổng hợp lại thành 01 sheetsum từ nhiều sheet (sheet1, sheet2,...) đã tổng hợp)
cụ thể: bộ phận có 1 file excel gồm nhiều tháng (mỗi tháng là một sheet)
vd: máy 1 có file TCHC (trong file TCHC có các sheet: T01, T02,…), máy 2 có file TCKT (trong file TCKT có các sheet: T01, T02,…), máy 3 có file KHTH (trong file KHTH có các sheet: T01, T02,..)

hàng tháng em sẽ tổng hợp tất các các sheet của tháng đó ở tất cả các bộ phận vào 01 file chung (file này gồm 01 sheet tổng hợp và sheet1 của tất cả các bộ phận) chỉ bằng 01 click vào nút tổng hợp.
đồng thời không cho xoá, chỉnh sửa sau khi em đã tổng hợp. ví dụ đến 5 giờ chiều ngày cuối tháng em sẽ tổng hợp, và sẽ khoa lại sau khi tổng hợp, khoa nào muốn chỉnh sửa thì liên hệ em mở ra cho chỉnh sửa.
anh chị giúp dùm em, em cảm ơn nhiều!!!
ví dụ:
 

Đính kèm

  • Tong hop excel qua mang noi bo.rar
    76.8 KB · Lượt xem: 334
Mọi người ơi nếu sheet của em chứa cả mục gộp ô và tách ô thì macro tổng hợp được khôngna vậy?? có cách nào tổng hợp dữ liêu từ nhiều sheet giông nhau(có mục gộp tách ô) ko ạ
 
Em chào mọi người!
Tiếp theo chủ đề hấp dẫn này em có một tình huống xuất phát từ công việc cần xử lý như sau, mong mọi người giúp đỡ.
Em làm ở kho sách, hiện tại em có một file tổng hợp về số tồn kho gọi là TONKHO (tính đến 1/1/2016). Hàng ngày kho em sẽ làm các phiếu xuất hàng gọi là PX1, PX2, PX3..., và đồng thời là nhập những đầu sách mới vào là các PN1, PN2, PN3... Số PN và PX có thể lên vài chục file excel, mỗi file chỉ có một sheet thôi, các danh mục sách cũng khác nhau. Nhiệm vụ của em là cập nhật số liệu tồn kho hiện tại sau mỗi ngày để làm báo cáo theo cái lựa chọn như: tủ sách, tựa sách, giá thành, khách hàng.... Mong mọi người giúp đỡ.
Ps: PN và PX có cấu trúc giống nhau ạ
 
Em chào mọi người!
Tiếp theo chủ đề hấp dẫn này em có một tình huống xuất phát từ công việc cần xử lý như sau, mong mọi người giúp đỡ.
Em làm ở kho sách, hiện tại em có một file tổng hợp về số tồn kho gọi là TONKHO (tính đến 1/1/2016). Hàng ngày kho em sẽ làm các phiếu xuất hàng gọi là PX1, PX2, PX3..., và đồng thời là nhập những đầu sách mới vào là các PN1, PN2, PN3... Số PN và PX có thể lên vài chục file excel, mỗi file chỉ có một sheet thôi, các danh mục sách cũng khác nhau. Nhiệm vụ của em là cập nhật số liệu tồn kho hiện tại sau mỗi ngày để làm báo cáo theo cái lựa chọn như: tủ sách, tựa sách, giá thành, khách hàng.... Mong mọi người giúp đỡ.
Ps: PN và PX có cấu trúc giống nhau ạ

Bạn nên có 1 File với mỗi sheet khoảng vài chục dòng dữ liệu để biết cấu trúc tiêu đề mà có giải pháp cho phù hợp, theo tôi thì làm thế này:

1/ 1 Sheet theo dõi nhập kho (dùng sheet này tra cứu với Sheet xuất kho để biết loại sách còn tồn kho).
2/ 1 Sheet theo dõi xuất kho.
3/ 1 Sheet vừa làm phiếu nhập, phiếu xuất (chỉ 1 phiếu, dùng Validation để thay đổi loại phiếu), mỗi loại phiếu có 1 cái nút, nếu in phiếu xong tùy loại mà nhấn nút nhập (lưu dữ liệu vào Sheet nhập kho)hoặc nhấn nút xuất (lưu dữ liệu vào Sheet xuất kho).
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top