Cần cách tính hàm Sumifs với dữ liệu lớn ra kết quả nhanh

Liên hệ QC

Nguyễn Thành Châu

Thành viên mới
Tham gia
12/10/17
Bài viết
46
Được thích
6
Giới tính
Nam
Mình có file excel bên dưới tính tổng theo Sumifs nhưng gõ vào điều kiện thì khoảng 2-3 phút thì excel mới trả về kết quả. Bạn nào có cách nào hỗ trợ giúp mình có thể trả về kết quả nhanh được không? Do bảng data về sau sẽ thêm nhiều dữ liệu nữa. Mình thành thật cảm ơn các bạn nhiều lắm,mong sự giúp đỡ từ các bạn.
 

File đính kèm

  • TEST THƯỞNG 4014 DEMO.xlsb
    5.6 MB · Đọc: 30
Mình có file excel bên dưới tính tổng theo Sumifs nhưng gõ vào điều kiện thì khoảng 2-3 phút thì excel mới trả về kết quả. Bạn nào có cách nào hỗ trợ giúp mình có thể trả về kết quả nhanh được không? Do bảng data về sau sẽ thêm nhiều dữ liệu nữa. Mình thành thật cảm ơn các bạn nhiều lắm,mong sự giúp đỡ từ các bạn.
Bạn sửa lại hàm của bạn dùng đến đâu công thức đến vùng đó.Đừng lấy cả cột vào như thế nó tính chẳng lâu.
 
Bạn sửa lại hàm của bạn dùng đến đâu công thức đến vùng đó.Đừng lấy cả cột vào như thế nó tính chẳng lâu.
Khi có dữ liệu mới mình sẽ dán vào ô bên dưới luôn. File này tổng hợp 1 tháng nên mình mới chọn lấy cả chọn cột. Bạn có cách nào tính nhanh hơn không hỗ trợ mình với. Mình cảm ơn.
 
Bạn xem thử file này có khá hơn, với dữ liệu khủng thì mọi công thức đều khá vô ích, may ra có VBA làm trực tiếp thì ổn hơn.
Bạn chịu khó qua bên cột phụ ở sheet lấy dữ liệu kéo xuống nhé vì có thêm nó file nặng quá không tải lên đây được.
 

File đính kèm

  • TEST THƯỞNG 4014 DEMO.xlsb
    5.5 MB · Đọc: 38
Bạn xem thử file này có khá hơn, với dữ liệu khủng thì mọi công thức đều khá vô ích, may ra có VBA làm trực tiếp thì ổn hơn.
Bạn chịu khó qua bên cột phụ ở sheet lấy dữ liệu kéo xuống nhé vì có thêm nó file nặng quá không tải lên đây được.
Minh cảm ơn bạn nhiều nha, file nhanh hơn hẳn. Những đoạn code Vba trong file đó tác dụng như thế nào vậy bạn.












































/
 
Minh cảm ơn bạn nhiều nha, file nhanh hơn hẳn. Những đoạn code Vba trong file đó tác dụng như thế nào vậy bạn.


/
Cái này dùng dictionary chắc ổn. Đến khoảng trưa nay nếu chưa có ai giúp đỡ, mình sẽ viết code cho bạn, giờ mình hơi bận xíu, chưa viết đc
 
Mình có file excel bên dưới tính tổng theo Sumifs nhưng gõ vào điều kiện thì khoảng 2-3 phút thì excel mới trả về kết quả. Bạn nào có cách nào hỗ trợ giúp mình có thể trả về kết quả nhanh được không? Do bảng data về sau sẽ thêm nhiều dữ liệu nữa. Mình thành thật cảm ơn các bạn nhiều lắm,mong sự giúp đỡ từ các bạn.
Dùng VBA cho nhẹ File
Mã:
Option Explicit
Sub Tong()
  Dim i&, j&, sR&, iR&, jC&, Nv As String
  Dim Price(), Data(), tArr(), Res(), Dic As Object

  With Sheets("RESULT")
    tArr = .Range("E6:G6").Value
    Nv = .Range("B7").Value2
  End With
  ReDim Res(1 To 1, 1 To 3)
  With Sheets("Price")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    Price = .Range("A3:E" & i).Value2
  End With
  With Sheets("DATA 1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 2 Then MsgBox ("Khong co du lieu"): Exit Sub
    Data = .Range("A2:M" & i).Value2
  End With
  Set Dic = CreateObject("scripting.dictionary")
  sR = UBound(Price)
  For i = 1 To sR
    Dic.Item(Application.Trim(Price(i, 1))) = i
  Next i
  For j = 1 To 3
    Dic.Item(UCase(tArr(1, j))) = j
  Next j
  sR = UBound(Data)
  For i = 1 To sR
    If Data(i, 13) = Nv Then
      iR = Dic.Item(Data(i, 4))
      If iR > 0 Then
        jC = Dic.Item(UCase(Data(i, 1)))
        If jC > 0 Then
          Res(1, jC) = Res(1, jC) + Data(i, 7) * Price(iR, jC + 2)
        End If
      End If
    End If
  Next i
  With Sheets("RESULT")
    .Range("E7:G7").Value2 = Res
  End With
  Set Dic = Nothing
End Sub
 
Thầy ơi. dùng value với value2 có khác nhau gì không ạ
Chắc bạn ít đọc các bài "vui" trên GPE.
Đọc bài này "vui" nè:
 
Chắc bạn ít đọc các bài "vui" trên GPE.
Đọc bài này "vui" nè:
Hihi. Cám ơn Thầy ạ
 
Dùng VBA cho nhẹ File
Mã:
Option Explicit
Sub Tong()
  Dim i&, j&, sR&, iR&, jC&, Nv As String
  Dim Price(), Data(), tArr(), Res(), Dic As Object

  With Sheets("RESULT")
    tArr = .Range("E6:G6").Value
    Nv = .Range("B7").Value2
  End With
  ReDim Res(1 To 1, 1 To 3)
  With Sheets("Price")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    Price = .Range("A3:E" & i).Value2
  End With
  With Sheets("DATA 1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 2 Then MsgBox ("Khong co du lieu"): Exit Sub
    Data = .Range("A2:M" & i).Value2
  End With
  Set Dic = CreateObject("scripting.dictionary")
  sR = UBound(Price)
  For i = 1 To sR
    Dic.Item(Application.Trim(Price(i, 1))) = i
  Next i
  For j = 1 To 3
    Dic.Item(UCase(tArr(1, j))) = j
  Next j
  sR = UBound(Data)
  For i = 1 To sR
    If Data(i, 13) = Nv Then
      iR = Dic.Item(Data(i, 4))
      If iR > 0 Then
        jC = Dic.Item(UCase(Data(i, 1)))
        If jC > 0 Then
          Res(1, jC) = Res(1, jC) + Data(i, 7) * Price(iR, jC + 2)
        End If
      End If
    End If
  Next i
  With Sheets("RESULT")
    .Range("E7:G7").Value2 = Res
  End With
  Set Dic = Nothing
End Sub
MÌnh cảm ơn bạn nhiều lắm.
 
Dùng VBA cho nhẹ File
Mã:
Option Explicit
Sub Tong()
  Dim i&, j&, sR&, iR&, jC&, Nv As String
  Dim Price(), Data(), tArr(), Res(), Dic As Object

  With Sheets("RESULT")
    tArr = .Range("E6:G6").Value
    Nv = .Range("B7").Value2
  End With
  ReDim Res(1 To 1, 1 To 3)
  With Sheets("Price")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    Price = .Range("A3:E" & i).Value2
  End With
  With Sheets("DATA 1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 2 Then MsgBox ("Khong co du lieu"): Exit Sub
    Data = .Range("A2:M" & i).Value2
  End With
  Set Dic = CreateObject("scripting.dictionary")
  sR = UBound(Price)
  For i = 1 To sR
    Dic.Item(Application.Trim(Price(i, 1))) = i
  Next i
  For j = 1 To 3
    Dic.Item(UCase(tArr(1, j))) = j
  Next j
  sR = UBound(Data)
  For i = 1 To sR
    If Data(i, 13) = Nv Then
      iR = Dic.Item(Data(i, 4))
      If iR > 0 Then
        jC = Dic.Item(UCase(Data(i, 1)))
        If jC > 0 Then
          Res(1, jC) = Res(1, jC) + Data(i, 7) * Price(iR, jC + 2)
        End If
      End If
    End If
  Next i
  With Sheets("RESULT")
    .Range("E7:G7").Value2 = Res
  End With
  Set Dic = Nothing
End Sub
Bạn cho mình hỏi ngu cái nha, Sau dán code vào thì làm như thế nào nữa bạn. Mình không biết gì về VBA luôn.
 
Không xét gì nhanh/ chậm, với dữ liệu DateTime có sự khác nhau rõ ràng.
...
Thiệt ra cái vụ "va lu tu" này ở GPE đã từng nói qua cách đây mấy năm.
Theo tiếng Tây thì nó là "Old news".

Chỉ là lần này, người khơi chuyện có cái danh bự quá cho nên nhiều người chú ý. :p:p:p
 
Web KT
Back
Top Bottom