Tổng hợp dữ liệu từ nhiều sheet thành 1 sheet công nợ chi tiết (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

okmansetup

Thành viên mới
Tham gia
28/4/09
Bài viết
3
Được thích
1
Các bác xem hộ em bài này nên giải quyết thế nào a?, em đang cần gấp quá!
Em có một list các sheet khác nhau, (bao gồm các ngày trong tháng, từ 1 - 30, tương ứng từ sheet 1 đến sheet 30), trong mỗi sheet thì có số lượng khách hàng (có cả khác và giống nhau nữa),
em muốn từ các sheet nguồn đấy, tổng hợp ra một sheet tổng hợp, mà ở đó cũng có những cột như ở sheet nguồn, nhưng tại đây, được tổng hợp thành từng tên khách hàng, cuối mỗi khách hàng đó thì tính tổng tiền, số lượng hàng, sau đó lại đến tên khách hàng khác, lần lượt cho đến hết.
Em có up bài ví dụ lên, các bác xem thử giúp em với.
em mới học excel nên không biết bài này phải làm thế nào. Mong bác nào làm xong, hướng dẫn tận tình lại cho em với, (các bác để lại công thức cho em xem với, em xem nhiều bài trên GPX, thấy các bác chỉ đưa đáp số, mà chẳng thấy công thức đâu cả, em đành chịu, không hiểu bài làm thế nào ạ.
 

File đính kèm

Bạn xem thêm trong file đính kèm

PHP:
Option Explicit
Sub TongHop()
 Dim Sh As Worksheet, Sh0 As Worksheet
 Dim Rng As Range, sRng As Range, Clls As Range
 Dim MyAdd As String:                  Dim Rw As Long, MyColor As Byte
1 '*'
 Set Sh0 = Sheets("THop"):             Sh0.Columns("iU").Clear
 Sh0.[iU1].Value = "KhHang"
 For Each Sh In Worksheets
   If Sh.Name <> Sh0.Name Then
      Sh.Range(Sh.[B4], Sh.[B4].End(xlDown)).Copy _
            Destination:=[Sh0].[iU65500].End(xlUp).Offset(1)
   End If
 Next Sh
2 '*'
 Sh0.Range("A4:G" & Sh0.[iU65500].End(xlUp).Row + 9).Clear
 MyColor = Sh0.[b3].Interior.ColorIndex + 1
 If MyColor > 42 Then MyColor = 34
 Sh0.[b3].Resize(, 5).Interior.ColorIndex = MyColor
3 '*'
 Sh0.Columns("IU:IU").AdvancedFilter Action:=xlFilterCopy, _
        CopyToRange:=Sh0.[IV1], Unique:=True
4 '*'
 For Each Clls In Sh0.Range(Sh0.[iv2], Sh0.[iv2].End(xlDown))
   For Each Sh In Worksheets
      If Sh.Name <> Sh0.Name Then
         Set Rng = Sh.Range(Sh.[b3], Sh.[b3].End(xlDown))
         Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
         If Not sRng Is Nothing Then
            MyAdd = sRng.Address
            Do
               Sh0.[b65500].End(xlUp).Offset(1).Resize(, 5).Value = _
                  sRng.Offset(, -1).Resize(, 5).Value
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
         End If
      End If
   Next Sh
   Set Rng = Sh0.[b65500].End(xlUp).Offset(1)
5 '*'
   With Rng
      .Value = "ToTal":                .Resize(, 5).Font.Bold = True
      Set sRng = Rng.Offset(-1, 1)
      Rw = 1
      If sRng.Offset(-1, -1).Value <> "ToTal" Then _
         Rw = Range(sRng, sRng.End(xlUp)).Rows.Count
      .Offset(, 2).FormulaR1C1 = "=SUM(R[-" & Rw & "]C:R[-1]C)"
      With .Offset(, 2)
         .AutoFill Destination:=.Resize(, 3), Type:=xlFillDefault
      End With
   End With
   Set sRng = Nothing
 Next Clls
End Sub
 

File đính kèm

Có cách nào sử dụng công thức mà không cần đến VBA không hả bác?
Em mới học thành ra chẳng hiểu VBA này chút gì cả!! :(
 
Dùng Subtotal

Bạn xem có đúng ý bạn muốn làm không? Nhưng mình thắc mắc sao bạn không có Nhật ký bán hàng mà lại phải tách ra từng đấy sheet?
 

File đính kèm

em chẳng hiểu gì mấy? code đó làm thế nào để tổng hợp được?
 
Theo cách làm của bác mailanvd thì hình như em phải copy toàn bộ dữ liệu ở các sheet khác vào sheet tổng hợp rồi mới dùng subtotal phải không ạ?
Có cách nào mà em không cần phải copy dữ liệu ở sheet khác sang mà vẫn có thể liệt kê và tính được không hả bác?
 
Theo cách làm của bác mailanvd thì hình như em phải copy toàn bộ dữ liệu ở các sheet khác vào sheet tổng hợp rồi mới dùng subtotal phải không ạ?
Có cách nào mà em không cần phải copy dữ liệu ở sheet khác sang mà vẫn có thể liệt kê và tính được không hả bác?
Đương nhiên có cách ---> Bạn dùng code VBA để làm điều này
Với yêu cầu của bạn tôi nghĩ chẳng công thức nào làm được đâu!
Code copy tất cả các sheet về 1 sheet cũng khá dể dàng, trên GPE cũng đã có... Còn không bạn có thể tự record lấy macro
 
Tổng hợp dữ liệu từ nhiều sheet thành 1 sheet

Chao cac anh chi,
Mình cũng có một bảng tổng hợp từ nhiều sheet về 1 sheet:nhưng khác nhau ở chỗ:
- Số liệu mình nhập 1 khách hàng: có 2 dòng: dòng trên là đếm SL trưng bày,dòng dưới là số lượng hàng bán.
- Công việc của mình là nhập sl vào 31 sheet này và tổng hợp từ 31 sheet (ứng vớ 31 ngày) về 1 sheet "tháng".
Các bạn có thể giúp mình công thức để tổng số lượng đếm và số lượng bán không?(điều kiện là nếu tình tổng trả về theo mã KH và Tên sản phẩm.
Minh gởi file dính kèm các anh chị xem giùm em nhé(mình rút gọn thành 3 ngày cho nhẹ file)
Cám ơn anh chị nhiều.
 

File đính kèm

Chao cac anh chi,
Mình cũng có một bảng tổng hợp từ nhiều sheet về 1 sheet:nhưng khác nhau ở chỗ:
- Số liệu mình nhập 1 khách hàng: có 2 dòng: dòng trên là đếm SL trưng bày,dòng dưới là số lượng hàng bán.
- Công việc của mình là nhập sl vào 31 sheet này và tổng hợp từ 31 sheet (ứng vớ 31 ngày) về 1 sheet "tháng".
Các bạn có thể giúp mình công thức để tổng số lượng đếm và số lượng bán không?(điều kiện là nếu tình tổng trả về theo mã KH và Tên sản phẩm.
Minh gởi file dính kèm các anh chị xem giùm em nhé(mình rút gọn thành 3 ngày cho nhẹ file)
Cám ơn anh chị nhiều.
------
Bạn ơi cũng muốn xem cho biết, bạn chuyển về .xls được không ?
 
Em mới tham ra diễn đàn. Cám ơn các bạn đã post bài lên nhé. Diễn đàn giải pháp excel thật là hữu ích.
 
Trông thấy bác SA-DQ cung cấp phương pháp mà sướng phát mê, nhưng chả có dòng chú giải nào cả chả biết đường nào mà lần. Ngâm cứu xong của bác chắc em biết thế nào là VBA. Cảm ởn bác nhiều.
 
bác ơi e cũng có bài tương tự,cho em xem công thức với
 
Sử dụng code trong diễn đàn

PHP:
Option Explicit
Sub TongHop()
 Dim Sh As Worksheet, Sh0 As Worksheet
 Dim Rng As Range, sRng As Range, Clls As Range
 Dim MyAdd As String:                  Dim Rw As Long, MyColor As Byte
1 '*'
 Set Sh0 = Sheets("THop"):             Sh0.Columns("iU").Clear
 Sh0.[iU1].Value = "KhHang"
 For Each Sh In Worksheets
   If Sh.Name <> Sh0.Name Then
      Sh.Range(Sh.[B4], Sh.[B4].End(xlDown)).Copy _
            Destination:=[Sh0].[iU65500].End(xlUp).Offset(1)
   End If
 Next Sh
2 '*'
 Sh0.Range("A4:G" & Sh0.[iU65500].End(xlUp).Row + 9).Clear
 MyColor = Sh0.[b3].Interior.ColorIndex + 1
 If MyColor > 42 Then MyColor = 34
 Sh0.[b3].Resize(, 5).Interior.ColorIndex = MyColor
3 '*'
 Sh0.Columns("IU:IU").AdvancedFilter Action:=xlFilterCopy, _
        CopyToRange:=Sh0.[IV1], Unique:=True
4 '*'
 For Each Clls In Sh0.Range(Sh0.[iv2], Sh0.[iv2].End(xlDown))
   For Each Sh In Worksheets
      If Sh.Name <> Sh0.Name Then
         Set Rng = Sh.Range(Sh.[b3], Sh.[b3].End(xlDown))
         Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
         If Not sRng Is Nothing Then
            MyAdd = sRng.Address
            Do
               Sh0.[b65500].End(xlUp).Offset(1).Resize(, 5).Value = _
                  sRng.Offset(, -1).Resize(, 5).Value
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
         End If
      End If
   Next Sh
   Set Rng = Sh0.[b65500].End(xlUp).Offset(1)
5 '*'
   With Rng
      .Value = "ToTal":                .Resize(, 5).Font.Bold = True
      Set sRng = Rng.Offset(-1, 1)
      Rw = 1
      If sRng.Offset(-1, -1).Value <> "ToTal" Then _
         Rw = Range(sRng, sRng.End(xlUp)).Rows.Count
      .Offset(, 2).FormulaR1C1 = "=SUM(R[-" & Rw & "]C:R[-1]C)"
      With .Offset(, 2)
         .AutoFill Destination:=.Resize(, 3), Type:=xlFillDefault
      End With
   End With
   Set sRng = Nothing
 Next Clls
End Sub

Em đã sử dụng code này nhưng sau khi run thì lại gặp error 6 và dùng debug thì chỉ vào dòng my color, các anh chị giúp em với ạ. Em cũng cần làm tính tổng của mỗi một khách hàng trong 30 sheet khác nhau. Mỗi sheet đều có định dạng giống nhau, nhưng vị trí khách hàng khác nhau và tên của từng khách hàng thì có thể có tên mới. Em mong được sự giúp đỡ của mọi người ạ
 
[thongbao]
(1) Em đã sử dụng code này nhưng sau khi run thì lại gặp error 6 và dùng debug thì chỉ vào dòng my color, các anh chị giúp em với ạ.

(2) Em cũng cần làm tính tổng của mỗi một khách hàng trong 30 sheet khác nhau. Mỗi sheet đều có định dạng giống nhau, nhưng vị trí khách hàng khác nhau và tên của từng khách hàng thì có thể có tên mới.[/thongbao]

(1) Chắc tại ô [B3] của trang 'THop' của bạn chưa có màu nền; Bạn thử bôi màu xanh lơ ơ này trước & cho chạy lại xem sao.

(2). Bạn nên đưa file mẫu lên, mỗi trang 1 ít records nhưng đại diện được hầu hết CSDL của bạn.
 
(1) Chắc tại ô [B3] của trang 'THop' của bạn chưa có màu nền; Bạn thử bôi màu xanh lơ ơ này trước & cho chạy lại xem sao.

(2). Bạn nên đưa file mẫu lên, mỗi trang 1 ít records nhưng đại diện được hầu hết CSDL của bạn.[/QUOTE]

Em cảm ơn anh rất nhiều vì may mắn đã nhận được câu trả lời ngay.

Em đã thử bôi màu vào dòng titile và đã run được code trên nhưng. Em thấy kết quả lại không đúng vì em đã thử thay đổi thông tin trong sheet N11 ở dòng số 10 nhưng kết quả ở sheet Thop lại không đúng ạ. Anh xem file giúp em nhé!

Thực ra em đang cần làm 1 file như file: du lieu can tinh toan em up ở dưới đây. Em có tên công nhân theo cột A nhưng thứ tự sắp xếp không giống nhau, và cột thông tin số công và lương ở cột khác nhưng khi tính tập hợp lại em cần giống sheet tổng hợp. Em đã tham khảo code vba của diễn đàn, nhưng khi test dùng thử thì phát sinh các vấn đề trên. Em mong mọi người giúp đỡ!
 

File đính kèm

Lần chỉnh sửa cuối:
Em cảm ơn anh rất nhiều vì may mắn đã nhận được câu trả lời ngay.

Em đã thử bôi màu vào dòng titile và đã run được code trên nhưng. Em thấy kết quả lại không đúng vì em đã thử thay đổi thông tin trong sheet N11 ở dòng số 10 nhưng kết quả ở sheet Thop lại không đúng ạ. Anh xem file giúp em nhé!

Thực ra em đang cần làm 1 file như file: du lieu can tinh toan em up ở dưới đây. Em có tên công nhân theo cột A nhưng thứ tự sắp xếp không giống nhau, và cột thông tin số công và lương ở cột khác nhưng khi tính tập hợp lại em cần giống sheet tổng hợp. Em đã tham khảo code vba của diễn đàn, nhưng khi test dùng thử thì phát sinh các vấn đề trên. Em mong mọi người giúp đỡ!

Bạn gửi 2 file đính kèm? Ý bạn là tổng hợp dữ liệu của tất cả các sheet về 1 sheet như file 2 bạn gửi? Còn file 1 thì sao?
 
Dạ. File 1 tên THop file thực ra là em đã tải về từ diễn đàn để tự nghiên cứu và áp dụng. Nhưng em có cái khó là chưa quen dùng VBA. Nên khi mắc lỗi em không biết kiểm tra và khắc phục
 
Dạ. File 1 tên THop file thực ra là em đã tải về từ diễn đàn để tự nghiên cứu và áp dụng. Nhưng em có cái khó là chưa quen dùng VBA. Nên khi mắc lỗi em không biết kiểm tra và khắc phục
Với dữ liệu này bạn dùng công cụ sẵn có là consolidate là ok

[video=youtube;qogfK3FiM4M]http://www.youtube.com/watch?v=qogfK3FiM4M&amp;feature=youtu.be[/video]
 
Với dữ liệu này bạn dùng công cụ sẵn có là consolidate là ok

[video=youtube;qogfK3FiM4M]http://www.youtube.com/watch?v=qogfK3FiM4M&amp;feature=youtu.be[/video]

Anh chị có thể hướng dẫn em dùng consolidate với file trên không ạ? Em rất mong được hỗ trợ của mọi người!
 
Anh cho em xin cái file hướng dẫn bằng file ảnh hướng dẫn (printscreen ) không ạ, em gửi lại trả lời cho anh có đoạn ảnh chắc đó là do máy em bị chặn các media nên em ko xem file clip được anh ạ. Ở công ty em bị chặn các file này ạ
 
Còn nếu như muốn dùng code thì sử dụng code sau:

[GPECODE=sql]Sub GopSheet_HLMT()
Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
Set cn = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
Set rst = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
.Open
End With
cat.ActiveConnection = cn
For Each tbl In cat.Tables
If Right(Replace(tbl.Name, "'", ""), 1) = "$" And tbl.Name <> "'Tong hop$'" Then
str = str & " union all select f1,f8,f9 from [" & _
Replace(Replace(Replace(tbl.Name, "$", ""), "'", ""), "#", ".") & "$A3:I200] "
str1 = Right(str, Len(str) - 10)
End If
Next
With rst
.ActiveConnection = cn
.Open "select f1,sum(f8),sum(f9) from (" & str1 & ") group by f1"
End With
With Sheets("Tong hop")
.[A2:IV65000].ClearContents
.[A2].CopyFromRecordset rst
End With
rst.Close: Set rst = Nothing
cn.Close: Set cn = Nothing
Set cat = Nothing: Set tbl = Nothing

End Sub

[/GPECODE]
 
Mn giúp em với, em mới tìm hiểu mà chỉ biết cách chạy code macro +-+-+-+
Em muốn tổng hợp tổng số hàng trong kho theo mã mặt hàng, số chúng từ theo từng mặt hàng.
Em xem qua mà không áp dụng code được, nhấn chạy thì bị lỗi color ...
Có bác nào giúp em với, trong code đó cần chỉnh sửa ntn để phù hợp vs file của em ạ.
Em cảm ơn
(@$%@(@$%@
 

File đính kèm

Mn giúp em với, em mới tìm hiểu mà chỉ biết cách chạy code macro +-+-+-+
Em muốn tổng hợp tổng số hàng trong kho theo mã mặt hàng, số chúng từ theo từng mặt hàng.
Em xem qua mà không áp dụng code được, nhấn chạy thì bị lỗi color ...
Có bác nào giúp em với, trong code đó cần chỉnh sửa ntn để phù hợp vs file của em ạ.
Em cảm ơn
(@$%@(@$%@
Chạy thử code sau:

[GPECODE=sql]Sub TongHop()
Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
Set cn = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
Set rst = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
.Open
End With
cat.ActiveConnection = cn
For Each tbl In cat.Tables
If Right(Replace(tbl.Name, "'", ""), 1) = "$" And tbl.Name <> "PXK$" And tbl.Name <> "TONG$" Then
str = str & " union all select F1,F2,F3,F4,F5,F6,F7,F8,F9 from [" & _
Replace(Replace(tbl.Name, "$", ""), "'", "") & "$A15:I200] WHERE F7 IS NOT NULL "
str1 = Right(str, Len(str) - 10)
End If
Next
With rst
.ActiveConnection = cn
.Open "select F2,F3,F4,sum(F6),sum(F7),VAL(F8),sum(F9) from (" & str1 & ") group by F2,F3,F4,F8"
End With
With Sheets("TONG")
.[A3:G65000].ClearContents
.[A3].CopyFromRecordset rst
End With
rst.Close: Set rst = Nothing
cn.Close: Set cn = Nothing
Set cat = Nothing: Set tbl = Nothing
End Sub

[/GPECODE]
 

File đính kèm

Chạy thử code sau:

[GPECODE=sql]Sub TongHop()
Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
Set cn = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
Set rst = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
.Open
End With
cat.ActiveConnection = cn
For Each tbl In cat.Tables
If Right(Replace(tbl.Name, "'", ""), 1) = "$" And tbl.Name <> "PXK$" And tbl.Name <> "TONG$" Then
str = str & " union all select F1,F2,F3,F4,F5,F6,F7,F8,F9 from [" & _
Replace(Replace(tbl.Name, "$", ""), "'", "") & "$A15:I200] WHERE F7 IS NOT NULL "
str1 = Right(str, Len(str) - 10)
End If
Next
With rst
.ActiveConnection = cn
.Open "select F2,F3,F4,sum(F6),sum(F7),VAL(F8),sum(F9) from (" & str1 & ") group by F2,F3,F4,F8"
End With
With Sheets("TONG")
.[A3:G65000].ClearContents
.[A3].CopyFromRecordset rst
End With
rst.Close: Set rst = Nothing
cn.Close: Set cn = Nothing
Set cat = Nothing: Set tbl = Nothing
End Sub

[/GPECODE]

Không được bác ợ, hiện ra bảng lỗi Run-time error 3706: Provider can not be found
 
Các bác xem hộ em bài này nên giải quyết thế nào a?, em đang cần gấp quá!
Em có một list các sheet khác nhau, (bao gồm các ngày trong tháng, từ 1 - 30, tương ứng từ sheet 1 đến sheet 30), trong mỗi sheet thì có số lượng khách hàng (có cả khác và giống nhau nữa),
em muốn từ các sheet nguồn đấy, tổng hợp ra một sheet tổng hợp, mà ở đó cũng có những cột như ở sheet nguồn, nhưng tại đây, được tổng hợp thành từng tên khách hàng, cuối mỗi khách hàng đó thì tính tổng tiền, số lượng hàng, sau đó lại đến tên khách hàng khác, lần lượt cho đến hết.
Em có up bài ví dụ lên, các bác xem thử giúp em với.
em mới học excel nên không biết bài này phải làm thế nào. Mong bác nào làm xong, hướng dẫn tận tình lại cho em với, (các bác để lại công thức cho em xem với, em xem nhiều bài trên GPX, thấy các bác chỉ đưa đáp số, mà chẳng thấy công thức đâu cả, em đành chịu, không hiểu bài làm thế nào ạ.
Bạn chỉ cần copy danh sách các ngày trong tháng rồi dán vào sheet tổng hợp rồi chọn data/sort/ chọn danh sách khách hàng từ "A" đến "Z" là đã tổng hợp được khách hàng rồi. Để lấy khối lượng và thành tiền thì bạn dùng hàm "if" lồng hàm "sumif" để lấy về.
 

File đính kèm

Bài viết mới nhất

Back
Top Bottom