Cho tôi hỏi viết hàm sumifs trong vba

Liên hệ QC

nvk_hy

Thành viên mới
Tham gia
24/9/09
Bài viết
21
Được thích
0
cho tôi hỏi viết hàm sumifs trong vba như câu lệnh dưới đây viết trong sheet như viết như thế nao?
Tôi xin cảm ơn!

=SUMIFS('LSGD-NEW'!$H$2:$H$60,'LSGD-NEW'!$E$2:$E$60,MAIN!$B$12,'LSGD-NEW'!$B$2:$B$60,">="&DATE(YEAR(B11),MONTH(B11),DAY(B11)),'LSGD-NEW'!$B$2:$B$60,"<"&DATE(YEAR(B12),MONTH(B12),DAY(B12)))
 
cho tôi hỏi viết hàm sumifs trong vba như câu lệnh dưới đây viết trong sheet như viết như thế nao?
Tôi xin cảm ơn!

=SUMIFS('LSGD-NEW'!$H$2:$H$60,'LSGD-NEW'!$E$2:$E$60,MAIN!$B$12,'LSGD-NEW'!$B$2:$B$60,">="&DATE(YEAR(B11),MONTH(B11),DAY(B11)),'LSGD-NEW'!$B$2:$B$60,"<"&DATE(YEAR(B12),MONTH(B12),DAY(B12)))

bạn có thể Up file lên, để mọi người còn đối chiếu lại kết quả sau khi làm có đúng hay ko nữa chứ? :-=
 
Upvote 0
Ít nhất bạn cũng phải giải thích lý do và trình bày cặn kẽ quy luật đổi chứ!

Nếu chỉ có công việc đổi thì dịch thẳng từng phần một:

Hàm SUMIFS sửa lại thành Worksheetfunction.SUMIFS
Các hàm Date, Month, ... cũng vậy
Tất cả các range(s) thì đóng chúng bên trong hàm Range
vd 'LSGD-NEW'!$H$2:$H$60 ---> Range("'LSGD-NEW'!$H$2:$H$60")
 
Upvote 0
Ít nhất bạn cũng phải giải thích lý do và trình bày cặn kẽ quy luật đổi chứ!

Nếu chỉ có công việc đổi thì dịch thẳng từng phần một:

Hàm SUMIFS sửa lại thành Worksheetfunction.SUMIFS
Các hàm Date, Month, ... cũng vậy
Tất cả các range(s) thì đóng chúng bên trong hàm Range
vd 'LSGD-NEW'!$H$2:$H$60 ---> Range("'LSGD-NEW'!$H$2:$H$60")

làm vậy cũng chưa đảm bảo bác ah,

nếu đặt Name ở bên ngoài sheet và đưa vào đây thì được, còn ko thì các vùng trong này phải là "động". --> Set nhiều thứ.
 
Upvote 0
làm vậy cũng chưa đảm bảo bác ah,

nếu đặt Name ở bên ngoài sheet và đưa vào đây thì được, còn ko thì các vùng trong này phải là "động". --> Set nhiều thứ.

Tại sao lại phải "đảm bảo"?
Tôi đã đưa điều kiện trước là "phải giải thích lý do và trình bày cặn kẽ quy luật đổi" rồi mà!
Không có điều kiện gì cả thì bắt buộc phải giải quyết bằng cách gần nhất.

Đùa chơi cho vui và để chứng tỏ cho chủ thớt là câu hỏi không trình bày đủ chi tiết như trên sẽ không nhận được giải pháp thoả đáng nào cả.
 
Upvote 0
Tại sao lại phải "đảm bảo"?
Tôi đã đưa điều kiện trước là "phải giải thích lý do và trình bày cặn kẽ quy luật đổi" rồi mà!
Không có điều kiện gì cả thì bắt buộc phải giải quyết bằng cách gần nhất.

Đùa chơi cho vui và để chứng tỏ cho chủ thớt là câu hỏi không trình bày đủ chi tiết như trên sẽ không nhận được giải pháp thoả đáng nào cả.

cũng dễ hiểu thôi, là vì ... khà khà,
19-03-14 9-38-18 AM.jpg
@nvk_hy
19-03-14 9-42-47 AM.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
bác xem giùm nhé
bác xem giùm nhé
bác xem giùm nhé
 

File đính kèm

  • CODE.zip
    382.3 KB · Đọc: 176
Upvote 0
bạn test thử hàm sau:
Mã:
Function MySumifs(dk1 As String, dk2 As Variant, dk3 As Variant) As Variant
Dim Svung As Range, Cvung1 As Range, Cvung2 As Range
Dim ws As Worksheet: Set ws = Sheets("LSGD-NEW")
Application.Volatile (True)
    Set Svung = ws.Range("H2:H6000")
    Set Cvung1 = ws.Range("E2:E6000")
    Set Cvung2 = ws.Range("B2:B6000")
    
    MySumifs = Application.WorksheetFunction.SumIfs(Svung, Cvung1, dk1, Cvung2, dk2, Cvung2, dk3)
End Function

công thức cho ô G13 sheet BANGKEPHI
Mã:
=MySumifs(MAIN!$B$12;">="&B12;"<"&B13)
kéo công thức xuống
 
Lần chỉnh sửa cuối:
Upvote 0
bạn test thử hàm sau:
Mã:
Function MySumifs(dk1 As String, dk2 As Variant, dk3 As Variant) As Variant
Dim Svung As Range, Cvung1 As Range, Cvung2 As Range
Dim ws As Worksheet: Set ws = Sheets("LSGD-NEW")
Application.Volatile (True)
    Set Svung = ws.Range("H2:H6000")
    Set Cvung1 = ws.Range("E2:E6000")
    Set Cvung2 = ws.Range("B2:B6000")
    
    MySumifs = Application.WorksheetFunction.SumIfs(Svung, Cvung1, dk1, Cvung2, dk2, Cvung2, dk3)
End Function

công thức cho ô G13 sheet BANGKEPHI
Mã:
=MySumifs(MAIN!$B$12;">="&B12;"<"&B13)
kéo công thức xuống

Tự nhiên SUMIFS có sẵn không xài lại đi viết thành VBA
Mà cứ cho là vì lý do gì đó phải viết VBA đi thì lý nào lại viết thành 1 Function? Muốn rút gọn chăng? Thế sao không đặt thành name? Muốn gọn bao nhiêu cũng được
 
Upvote 0
Bác ndu96081631 ơi, bác chỉ rõ hơn được không ạ. Em cũng đang cần viết cái này. Vì tháng nào cũng làm, công thức giống nhau chỉ có file nguồn là thay đổi.
 
Upvote 0
em có file này nhờ ace giúp e viết dc code cho các dòng của 2 cột màu vàng để tính tổng theo điều kiện trong hàm e đã đặt công thực ạ,em cảm ơn
 

File đính kèm

  • Book1.xlsx
    9.1 KB · Đọc: 27
Upvote 0
em có file này nhờ ace giúp e viết dc code cho các dòng của 2 cột màu vàng để tính tổng theo điều kiện trong hàm e đã đặt công thực ạ,em cảm ơn
Bạn xem code
Mã:
Sub tinhtong()
Dim arr, i As Long, dic As Object, dk As String, j As Integer
Set dic = CreateObject("scripting.dictionary")
With Sheets("sheet1")
     arr = .Range("E3:N14").Value
     For i = 2 To UBound(arr, 1)
         For j = 3 To UBound(arr, 2)
             dk = arr(1, j) & "#" & i
             If Not dic.exists(dk) Then
                dic.Add dk, arr(i, j)
             Else
                dic.Item(dk) = dic.Item(dk) + arr(i, j)
             End If
         Next j
     Next i
     For i = 2 To UBound(arr, 1)
         For j = 1 To 2
             dk = arr(1, j) & "#" & i
             If dic.exists(dk) Then
                 arr(i, j) = dic.Item(dk)
             End If
         Next j
    Next i
    .Range("E3:N14").Value = arr
End With
End Sub
 

File đính kèm

  • Book1.xlsm
    15.3 KB · Đọc: 102
Upvote 0
Bạn xem code
Mã:
Sub tinhtong()
Dim arr, i As Long, dic As Object, dk As String, j As Integer
Set dic = CreateObject("scripting.dictionary")
With Sheets("sheet1")
     arr = .Range("E3:N14").Value
     For i = 2 To UBound(arr, 1)
         For j = 3 To UBound(arr, 2)
             dk = arr(1, j) & "#" & i
             If Not dic.exists(dk) Then
                dic.Add dk, arr(i, j)
             Else
                dic.Item(dk) = dic.Item(dk) + arr(i, j)
             End If
         Next j
     Next i
     For i = 2 To UBound(arr, 1)
         For j = 1 To 2
             dk = arr(1, j) & "#" & i
             If dic.exists(dk) Then
                 arr(i, j) = dic.Item(dk)
             End If
         Next j
    Next i
    .Range("E3:N14").Value = arr
End With
End Sub
cảm ơn bạn nha
Bài đã được tự động gộp:

BẠN ƠI CHO mình hỏi hteem chút,trên file này thì mình muốn tính ô xanh đầu tiên bằng tổng các ô xanh còn lại,và ô màu vàng đầu tiên bằng tổng các ô vàng còn lại trong code của mình cần viết thêm thế nào ạ
 

File đính kèm

  • BẢNG THEO DÕI DỮ LIỆU KHO.xlsm
    458.4 KB · Đọc: 33
Lần chỉnh sửa cuối:
Upvote 0
cảm ơn bạn nha
Bài đã được tự động gộp:

BẠN ƠI CHO mình hỏi hteem chút,trên file này thì mình muốn tính ô xanh đầu tiên bằng tổng các ô xanh còn lại,và ô màu vàng đầu tiên bằng tổng các ô vàng còn lại trong code của mình cần viết thêm thế nào ạ
Ý bạn muốn tổng các ô phía dưới thôi hả?
 
Upvote 0
nhưng các cột còn lại nó chạy qua code nên cột đầu tiên mình dùng sum k dc bạn ạ
Vậy bạn sửa cái dòng này.
Mã:
For i = 2 To UBound(arr, 1)
thành
For i = 3 To UBound(arr, 1)
Mình chỉ đoán vậy thôi.Ví dụ có cả dữ liệu và ghi chú.
 
Upvote 0
Bạn xem code
Mã:
Sub tinhtong()
Dim arr, i As Long, dic As Object, dk As String, j As Integer
Set dic = CreateObject("scripting.dictionary")
With Sheets("sheet1")
     arr = .Range("E3:N14").Value
     For i = 2 To UBound(arr, 1)
         For j = 3 To UBound(arr, 2)
             dk = arr(1, j) & "#" & i
             If Not dic.exists(dk) Then
                dic.Add dk, arr(i, j)
             Else
                dic.Item(dk) = dic.Item(dk) + arr(i, j)
             End If
         Next j
     Next i
     For i = 2 To UBound(arr, 1)
         For j = 1 To 2
             dk = arr(1, j) & "#" & i
             If dic.exists(dk) Then
                 arr(i, j) = dic.Item(dk)
             End If
         Next j
    Next i
    .Range("E3:N14").Value = arr
End With
End Sub
Bạn ơi, bạn viết Cod giúp mình với, Ở sheet TỔNG HỢP mình đã dùng hàm sumifs để lọc ra kết quả. nhưng mình muốn thay vào đó là viết cod để kích nút tổng hợp thì sẽ ra kết quả, có thể thêm nhiều dữ liệu hơn mà vẫn tính tổng được.
 

File đính kèm

  • BCTC 2021 dùng Hàm.xlsm
    235.7 KB · Đọc: 3
Upvote 0
Web KT

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

Back
Top Bottom