Code hàm Sumifs

Liên hệ QC

hongphuong1997

Thành viên tiêu biểu
Tham gia
12/11/17
Bài viết
771
Được thích
321
Giới tính
Nữ
Nhờ thầy cô và các anh chị giúp đỡ "Viết code nhưng vẫn giữ nguyên hàm Sumifs() của Excel"
Em xin cảm ơn!
 

File đính kèm

Hơi khó hiểu nhỉ, nếu vậy thì Record Macro thôi
Em ghi được Macro như này rùi chị ui.
Chị xem có cách nào viết thành code giúp em với nhé.
Sub Macro1()

Range("E31").FormulaR1C1 = "=SUMIFS(R26C5:R28C7,R21C5:R23C7,R20C3)"

Range("E32").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R15C5:R17C7,R14C3,R21C5:R23C7,R20C3)"
Range("E33").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R9C5:R11C7,R8C3,R15C5:R17C7,R14C3,R21C5:R23C7,R20C3)"
Range("E34").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R3C5:R5C7,R2C3,R9C5:R11C7,R8C3,R15C5:R17C7,R14C3,R21C5:R23C7,R20C3)"
Range("E36").FormulaR1C1 = "=SUMIFS(R26C5:R28C7,R21C5:R23C7,R21C3)"

Range("E37").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R15C5:R17C7,R15C3,R21C5:R23C7,R21C3)"

Range("E38").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R9C5:R11C7,R9C3,R15C5:R17C7,R15C3,R21C5:R23C7,R21C3)"

Range("E39").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R3C5:R5C7,R3C3,R9C5:R11C7,R9C3,R15C5:R17C7,R15C3,R21C5:R23C7,R21C3)"

End Sub
 
Muốn Sub thì tặng bạn cái này.
PHP:Sao chép.
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range([B5], [B5].End(xlDown)).Resize(, 5).Value2
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1)
If Not Dic.Exists(Tem) Then
Dic.Add Tem, sArr(I, 5)
Else
Dic.Item(Tem) = Dic.Item(Tem) + sArr(I, 5)
End If
Next I
For I = 1 To UBound(sArr, 1)
dArr(I, 1) = Dic.Item(sArr(I, 1))
Next I
[H5].Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Bài đã được tự động gộp:

 
Muốn Sub thì tặng bạn cái này.
PHP:Sao chép.
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range([B5], [B5].End(xlDown)).Resize(, 5).Value2
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1)
If Not Dic.Exists(Tem) Then
Dic.Add Tem, sArr(I, 5)
Else
Dic.Item(Tem) = Dic.Item(Tem) + sArr(I, 5)
End If
Next I
For I = 1 To UBound(sArr, 1)
dArr(I, 1) = Dic.Item(sArr(I, 1))
Next I
[H5].Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Bài đã được tự động gộp:
Em cảm ơn anh
visatantam
Nhưng anh ơi, em muốn là vẫn dũng công thức Sumifs() của Excel ở trong code cơ anh à, Anh có sửa được không giúp em với.
 
Nhờ thầy cô và các anh chị giúp đỡ "Viết code nhưng vẫn giữ nguyên hàm Sumifs() của Excel"
Em xin cảm ơn!
Không hiểu bạn làm gì nhưng đại khái như thế này cho dễ hiểu
Mã:
Sub aa()
    Range("E31") = "=SUMIFS($E$26:$G$28,$E$21:$G$23,$C$20)"
End Sub
 
Bạn cũng có thể dùng for - next với Worksheetfunction, cấu trúc của nó sẽ giống như khi bạn dùng hàm ngoài cell.
Mã:
vSum = Application.WorksheetFunction.SumIfs(RngSum, Rng1, vData1, Rng2, vData2, Rng3, vData3)
 
Em ghi được Macro như này rùi chị ui.
Chị xem có cách nào viết thành code giúp em với nhé.
Sub Macro1()

Range("E31").FormulaR1C1 = "=SUMIFS(R26C5:R28C7,R21C5:R23C7,R20C3)"

Range("E32").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R15C5:R17C7,R14C3,R21C5:R23C7,R20C3)"
Range("E33").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R9C5:R11C7,R8C3,R15C5:R17C7,R14C3,R21C5:R23C7,R20C3)"
Range("E34").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R3C5:R5C7,R2C3,R9C5:R11C7,R8C3,R15C5:R17C7,R14C3,R21C5:R23C7,R20C3)"
Range("E36").FormulaR1C1 = "=SUMIFS(R26C5:R28C7,R21C5:R23C7,R21C3)"

Range("E37").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R15C5:R17C7,R15C3,R21C5:R23C7,R21C3)"

Range("E38").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R9C5:R11C7,R9C3,R15C5:R17C7,R15C3,R21C5:R23C7,R21C3)"

Range("E39").FormulaR1C1 = _
"=SUMIFS(R26C5:R28C7,R3C5:R5C7,R3C3,R9C5:R11C7,R9C3,R15C5:R17C7,R15C3,R21C5:R23C7,R21C3)"

End Sub
Bạn viết theo dạng này
Sub ChayDuLieu()
With Sheet1.Range("E31")
.Formula = "=SUMIFS(R26C5:R28C7,R21C5:R23C7,R20C3)"
End With
End Sub
 
Bạn viết theo dạng này
Sub ChayDuLieu()
With Sheet1.Range("E31")
.Formula = "=SUMIFS(R26C5:R28C7,R21C5:R23C7,R20C3)"
End With
End Sub
Cảm ơn chị!
Nhưng chị ui thế làm sao để lấy được công thức của ô "E32;E33;E34" Mà không phải nhập bằng tay.
Có khả năng phải thêm vòng lặp vào mới được chị à.
Bài đã được tự động gộp:

Bạn cũng có thể dùng for - next với Worksheetfunction, cấu trúc của nó sẽ giống như khi bạn dùng hàm ngoài cell.
Mã:
vSum = Application.WorksheetFunction.SumIfs(RngSum, Rng1, vData1, Rng2, vData2, Rng3, vData3)
Em cảm ơn anh!
Ý của em là làm sao để không phải nhập công thức vào từng ô từ "E31:E34" như công thức trong ví dụ anh à.
Mà làm cách nào đó nó tự động lấy được kết quả như các công thức trong ví dụ.
 
Cảm ơn chị!
Nhưng chị ui thế làm sao để lấy được công thức của ô "E32;E33;E34" Mà không phải nhập bằng tay.
Có khả năng phải thêm vòng lặp vào mới được chị à.
Bài đã được tự động gộp:


Em cảm ơn anh!
Ý của em là làm sao để không phải nhập công thức vào từng ô từ "E31:E34" như công thức trong ví dụ anh à.
Mà làm cách nào đó nó tự động lấy được kết quả như các công thức trong ví dụ.
Sửa lại công thức trên sao cho là 1 rồi dùng thêm Resize nữa là được
 
Web KT

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

Back
Top Bottom