Cách sử dụng hàm SUMIF trong VBA

Liên hệ QC

Thong Hoang Tien 250691

Thành viên hoạt động
Tham gia
14/5/17
Bài viết
141
Được thích
125
Giới tính
Nam
Em đang gặp một vấn đề: Em viết hàm SUMIF trong VBA với đoạn mã như sau:
Mã:
Sub GPE_HELP()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lRw1, lRw2 As Integer
Set ws1 = ThisWorkbook.Sheets(1)
Set ws2 = ThisWorkbook.Sheets(2)
    lRw1 = ws1.Range("A" & Rows.Count).End(xlUp).Row
    lRw2 = ws2.Range("A" & Rows.Count).End(xlUp).Row
        ws2.Range("C2:C" & lRw2).Value = Application.WorksheetFunction.SumIf(ws1.Range("A2:A" & lRw1), ws2.Range("A2:A" & lRw2), ws1.Range("B2:B" & lRw1))
End Sub
Thì bị lỗi ở dòng cuối cùng. trong excel em viết hàm tương tự trong cells thì trả về kết quả bình thường.
Em không muốn dùng for-next vì dữ liệu là khá lớn
Anh/Chị kiểm tra em đã viết sai ở đâu và cách sửa ạ ?
 

File đính kèm

  • GPE_HELP.xlsm
    22.4 KB · Đọc: 55
Em đang gặp một vấn đề: Em viết hàm SUMIF trong VBA với đoạn mã như sau:
Mã:
Sub GPE_HELP()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lRw1, lRw2 As Integer
Set ws1 = ThisWorkbook.Sheets(1)
Set ws2 = ThisWorkbook.Sheets(2)
    lRw1 = ws1.Range("A" & Rows.Count).End(xlUp).Row
    lRw2 = ws2.Range("A" & Rows.Count).End(xlUp).Row
        ws2.Range("C2:C" & lRw2).Value = Application.WorksheetFunction.SumIf(ws1.Range("A2:A" & lRw1), ws2.Range("A2:A" & lRw2), ws1.Range("B2:B" & lRw1))
End Sub
Thì bị lỗi ở dòng cuối cùng. trong excel em viết hàm tương tự trong cells thì trả về kết quả bình thường.
Em không muốn dùng for-next vì dữ liệu là khá lớn
Anh/Chị kiểm tra em đã viết sai ở đâu và cách sửa ạ ?
Thử sửa thành
Mã:
ws2.Range("C2:C" & lRw2).Value = Application.SumIf(ws1.Range("A2:A" & lRw1), ws2.Range("A2:A" & lRw2), ws1.Range("B2:B" & lRw1))

Hoặc như sau cũng được
Mã:
ws2.Range("C2:C" & lRw2).Value = Application.SumIf(ws1.Range("A2:A" & lRw1), ws2.Range("A2:A" & lRw2), ws1.Range("B2"))
 
Upvote 0
Thử sửa thành
Mã:
ws2.Range("C2:C" & lRw2).Value = Application.SumIf(ws1.Range("A2:A" & lRw1), ws2.Range("A2:A" & lRw2), ws1.Range("B2:B" & lRw1))

Hoặc như sau cũng được
Mã:
ws2.Range("C2:C" & lRw2).Value = Application.SumIf(ws1.Range("A2:A" & lRw1), ws2.Range("A2:A" & lRw2), ws1.Range("B2"))

Cám ơn Anh, Em đã thực hiện được. Nhân tiện em gặp vấn đề tương tự, nhưng với hàm điều kiện IF (không liên quan đến chủ đề lắm). nhưng mong Anh và mọi người kiểm tra và giải thích giúp em ạ. Em cám ơn !
 

File đính kèm

  • GPE_HELP.xlsm
    22.4 KB · Đọc: 30
Upvote 0
Cám ơn Anh, Em đã thực hiện được. Nhân tiện em gặp vấn đề tương tự, nhưng với hàm điều kiện IF (không liên quan đến chủ đề lắm). nhưng mong Anh và mọi người kiểm tra và giải thích giúp em ạ. Em cám ơn !
Bạn thử:
PHP:
Sub abc()
Range("D2:D" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "=IF($A$2:$A$5=$B$2:$B$5,""Ok"",""NG"")"
End Sub

Hoặc:

PHP:
Sub test()
    Dim lastRow As Long
    Range("D2").Formula = "=IF($A$2:$A$5=$B$2:$B$5,""Ok"",""NG"")"
    lastRow = Range("a" & Rows.Count).End(xlUp).Row
    Range("D2").AutoFill Destination:=Range("D2:D" & lastRow)
End Sub
 
Upvote 0
Bạn thử:
PHP:
Sub abc()
Range("D2:D" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "=IF($A$2:$A$5=$B$2:$B$5,""Ok"",""NG"")"
End Sub

Hoặc:

PHP:
Sub test()
    Dim lastRow As Long
    Range("D2").Formula = "=IF($A$2:$A$5=$B$2:$B$5,""Ok"",""NG"")"
    lastRow = Range("a" & Rows.Count).End(xlUp).Row
    Range("D2").AutoFill Destination:=Range("D2:D" & lastRow)
End Sub
Cám ơn Anh đã quan tâm. Ở đây dữ liệu khá lớn và em không muốn sử dụng công thức trong cell (code trả về giá trị, không gắn công thức vào cells) thì có cách nào khác không ạ?
 
Upvote 0
Cám ơn Anh đã quan tâm. Ở đây dữ liệu khá lớn và em không muốn sử dụng công thức trong cell (code trả về giá trị, không gắn công thức vào cells) thì có cách nào khác không ạ?
Không muốn VBA-hóa công thức, không muốn fornext ... vậy thì có cách thuê người viết ngôn ngữ lập trình mới thôi,
Tôi nghi rằng for next còn nhanh hơn VBA-hóa công thức nữa.
 
Upvote 0
Không muốn VBA-hóa công thức, không muốn fornext ... vậy thì có cách thuê người viết ngôn ngữ lập trình mới thôi,
Tôi nghi rằng for next còn nhanh hơn VBA-hóa công thức nữa.
ForNext hoặc formular với dữ liệu khoảng 1k dòng đổ lại thì ok. Dữ liệu của em khoảng hơn 50k dòng và vẫn tiếp tục tăng. E rằng for next hiệu năng không đáp ứng được.
 
Upvote 0
700K người ta còn dùng VBA bình thường , có chi phải lo
Vậy anh có thể viết theo ý anh đang diễn đạt vào file ở bài #3 được không? Sau đó em sẽ thử chạy với dữ liệu khoảng 50 nghìn dòng. Xem có thể đáp ứng được không? Cám ơn Anh trước.
 
Upvote 0
Web KT
Back
Top Bottom