Áp dụng code ADO (tác giả Hai Lúa Miền Tây), bạn tham khảo:Em cần tính tổng các giá trị giống nhau trong sheet1 rồi chuyển qua sheet "Process" kiểu như file đính kèm. Làm bằng VBA nhé
Em cần tính tổng các giá trị giống nhau trong sheet1 rồi chuyển qua sheet "Process" kiểu như file đính kèm. Làm bằng VBA nhé
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, Tem As Variant
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1")
sArr = .Range(.[A2], .[A1048576].End(xlUp)).Resize(, 8).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 8)
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1)
If Not Dic.Exists(Tem) Then
K = K + 1
Dic.Add Tem, K
For J = 1 To 8
dArr(K, J) = sArr(I, J)
Next J
Else
For J = 3 To 8
dArr(Dic.Item(Tem), J) = dArr(Dic.Item(Tem), J) + sArr(I, J)
Next J
End If
Next I
With Sheets("Process")
.[A2:H10000].ClearContents
If K Then .[A2].Resize(K, 8).Value = dArr
End With
Set Dic = Nothing
End Sub
Hình như bác vẫn xài Excel 2003Muốn VBA thì tặng bạn Sub này tuỳ nghi sử dụng.
...
Ố là la
Là đụng hàng!
Leo giờ xài ADO,
Chạy tẹt pô !
Ủa! Mà file .xlsb code nó chạy ở đâu ta?
Em xin cảm ơn các anh. Giờ em xin thêm 1 yêu cầu nữa, là file của em có thêm cột ngày tháng. Em muốn tính tổng dữ liệu trùng nhau theo ngày tháng nào đó đuwocj không ạ?
Em xin gửi lại file đính kèm có bổ xung
Không hiểu ý bạn lắm.
Xin hỏi bạn là: Tổng dữ liệu trùng nhau là tổng ở cột nào ? Và cho kết quả tính đc đó vào đâu ?
Hay bạn muốn đếm số ngày trùng nhau trong cột ngày tháng ?
Em cần tính tổng các giá trị giống nhau trong sheet1 rồi chuyển qua sheet "Process" kiểu như file đính kèm. Làm bằng VBA nhé
Sử dụng Dic thì chờ bác Ba Tê thôi.
Em đã làm theo cách của Ba Tê và ok được 1 vấn đề rồi, còn "yêu cầu" thứ 2 như em đã trình bày, thêm cái ngày tháng nữa. Hix
Em đã làm theo cách của Ba Tê và ok được 1 vấn đề rồi, còn "yêu cầu" thứ 2 như em đã trình bày, thêm cái ngày tháng nữa. Hix
Sử dụng Dic thì chờ bác Ba Tê thôi.
Sử dụng ADO thì ...
Hỏi kiểu "nhấp nhá nhấp nhữ" như vầy không biết đã đủ chưa.
Thêm cái ngày là 1 ngày, hay là lại muốn từ ngày này đến ngày kia?
Tôi làm cho bạn từ ngày đến ngày luôn nè, nếu muốn lọc ra 1 ngày thì từ ngày và đến ngày gõ giống nhau.
Sử dụng Dic thì chờ bác Ba Tê thôi.
Sử dụng ADO thì bạn sửa chút xíu trong code:
[gpecode=vb]
Sub TongHop()
Dim lsSQL As String, cnn As Object, lrs As Object, i As Long
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
With cnn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
.Open
End With
lsSQL = "select F1, F2, sum(F3), sum(F4), sum(F5), sum(F6), sum(F7), sum(F8), F9 from " & _
"(SELECT F1, F2, F3, F4, F5, F6, F7, F8, F9 FROM [Sheet1$A2:I100]) " & _
"group by F1, F2, F9"
lrs.Open lsSQL, cnn
With Sheet2
.[A2:I100].ClearContents
.[A2].CopyFromRecordset lrs
End With
lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing
End Sub
[/gpecode]
Sử dụng cái có sẳn là PivotTable của bác Bill vừa nhanh lẹ, chính xác với dữ liệu lớn thì nhanh hơn VBA.Em cần tính tổng các giá trị giống nhau trong sheet1 rồi chuyển qua sheet "Process" kiểu như file đính kèm. Làm bằng VBA nhé
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2