truonggiang73
Thành viên hoạt động



- Tham gia
- 27/6/09
- Bài viết
- 113
- Được thích
- 35




Tôi muốn tổng hợp số liệu từ các danh sách không sắp xếp theo một trật tự nào cả. Tôi đã tham khảo trên diễn đàn nhưng vẫn chưa làm được. Mong mọi người giúp đỡ cho.
TG73 chân thành cảm ơn.
Tôi làm cho bạn = ADO: Gom nhóm dữ liệu 3 sheet = Union Query. Sau đó cộng gộp theo tên như sau:Tôi muốn tổng hợp số liệu từ các danh sách không sắp xếp theo một trật tự nào cả. Tôi đã tham khảo trên diễn đàn nhưng vẫn chưa làm được. Mong mọi người giúp đỡ cho.
TG73 chân thành cảm ơn.
Sub TongHop()
Dim lsSQL As String, r As Integer
Dim cnn As New ADODB.Connection
Dim lrs As New ADODB.Recordset
With cnn
.ConnectionString = "Provider= Microsoft.Jet.OLEDB.4.0; data source=" & ThisWorkbook.FullName & _
";Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
lsSQL = "select [Ho Va Ten],sum([Thu Nhap 1]) as [Tong TN 1], sum([Thu Nhap 2]) as [Tong TN 2], sum([Thu Nhap 3]) as [Tong TN 3] From " & _
"(select [ho va ten], [Thu Nhap 1], 0 AS [Thu Nhap 2], 0 AS [Thu Nhap 3] From [TNhap1$] " & _
"Union all " & _
"select [ho va ten], 0 as [Thu Nhap 1], [Thu Nhap 2], 0 AS [Thu Nhap 3] From [TNhap2$] " & _
"Union all " & _
"select [ho va ten], 0 as [Thu Nhap 1], 0 AS [Thu Nhap 2], [Thu Nhap 3] From [TNhap3$]) " & _
"Group by [ho va ten] "
lrs.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
With Sheet1
.Cells.ClearContents
For i = 0 To (lrs.Fields.Count - 1)
.Cells(1, i + 1) = lrs.Fields(i).Name
Next
.Range("A2").CopyFromRecordset lrs
r = .Range("A65000").End(xlUp).Row + 2
.Range("A" & r) = "T" & ChrW(7893) & "ng C" & ChrW(7897) & "ng:"
.Range("B" & r).FormulaR1C1 = "=SUM(R[-" & r - 2 & "]C:R[-1]C)"
.Range("C" & r).FormulaR1C1 = "=SUM(R[-" & r - 2 & "]C:R[-1]C)"
.Range("D" & r).FormulaR1C1 = "=SUM(R[-" & r - 2 & "]C:R[-1]C)"
End With
lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing
End Sub




Tôi muốn tổng hợp số liệu từ các danh sách không sắp xếp theo một trật tự nào cả. Tôi đã tham khảo trên diễn đàn nhưng vẫn chưa làm được. Mong mọi người giúp đỡ cho.
TG73 chân thành cảm ơn.
Sub tonghop()
Dim kqua(), i, j, dl, sh, tim
sh = Array("TNhap1", "TNhap2", "TNhap3")
With Sheet1
.Range(.[c4], .[e65536].End(3)).ClearContents
kqua = .Range(.[a4], .[a65536].End(3)).Resize(, 5).Value
End With
For i = 0 To UBound(sh)
With Sheets(sh(i))
Set dl = .Range(.[b4], .[b65536].End(3))
End With
For j = 1 To UBound(kqua)
Set tim = dl.Find(kqua(j, 2),,,XlWhole)
If Not tim Is Nothing Then
kqua(j, i + 3) = tim.Offset(, 1)
End If
Next
Next
Sheet1.[a4].Resize(j - 1, 5) = kqua
End Sub
File của bạn chắc dữ liệu cũng không nhiều nên dùng công thức cho khỏe
Nếu muốn code thì tham khảo code này xem sao
PHP:Sub tonghop() Dim kqua(), i, j, dl, sh, tim sh = Array("TNhap1", "TNhap2", "TNhap3") With Sheet1 .Range(.[c4], .[e65536].End(3)).ClearContents kqua = .Range(.[a4], .[a65536].End(3)).Resize(, 5).Value End With For i = 0 To UBound(sh) With Sheets(sh(i)) Set dl = .Range(.[b4], .[b65536].End(3)) End With For j = 1 To UBound(kqua) Set tim = dl.Find(kqua(j, 2)) If Not tim Is Nothing Then kqua(j, i + 3) = tim.Offset(, 1) End If Next Next Sheet1.[a4].Resize(j - 1, 5) = kqua End Sub




Anh lưu ý rằng code trên chỉ tổng hợp được những tên không trùng.
Nếu mã trùng thì sao anh , dữ liệu phát sinh chắc chắn sẽ có trùng (Có thể 1 mã PS 2 hay nhiều lần), kết quả ra sẽ không chính xác.Mình biết chứ, nhưng cứ để cho tác giả phát hiện ra vấn đề. Không ai lại đi sử dụng tên để làm tiêu chuẩn tính toán.
Nếu để quản lý thông tin dữ liệu thì cách đúng là phải quản lý bằng mã thôi
Bài này dùng Pivot Table là khỏe nhất, khỏi code, khỏi công thức... nhanh gọn và chính xác
Nhưng mà nó không tự cập nhật khi dữ liệu thay đổiDùng Consolidate cũng rất tiện lợi và nhanh gọn Thầy à.
Nhưng mà nó không tự cập nhật khi dữ liệu thay đổi
Ẹc... Ẹc...



Dùng hàm sumif kết hợp với hàm indirect. Bạn xem file đính kèm nhé.Tôi xin lỗi do câu hỏi ở #1 chưa hết ý cần hỏi nên đã làm mất thời gian của mọi người.
Vì còn hạn chế về EX và VBA nên chưa thể vận dụng các giúp đỡ của các anh vào công việc được.
Tôi vẫn thường dùng cách như ở FILE đính kèm vẫn cho ra kết quả nhưng vì vừa thủ công và anh em trong phòng không hiểu được công thức nên mỗi lần TH số liệu lại phải nhờ tôi sửa lại công thức. Nhờ các anh chị giúp cho giải pháp gọn nhẹ hơn được không.
TG73 thân chào.
