Nhờ anh chị giúp đỡ "rút gọn code"

hongphuong

Thành viên mới
Em có đoạn Code viết tham chiếu dưới dạng Cells() như bên dưới, nhưng em thấy hàm dài quá.
Vậy nhờ anh chị viết rút gọn tham chiếu (hoặc bằng cách nào đó để cho ngắn gọn)
Em xin trân trọng cảm ơn ạ.
Mã:
Sub Test_5()
Dim i As Integer
For i = 7 To 27 Step 5
    Cells(31, i).Value = WorksheetFunction.SumIfs(Range(Cells(27, i), Cells(29, i + 3)), Range(Cells(23, i), Cells(25, i + 3)), Range("D29"), Range(Cells(19, i), Cells(21, i + 3)), Range("D28"))
    Cells(32, i).Value = WorksheetFunction.SumIfs(Range(Cells(27, i), Cells(29, i + 3)), Range(Cells(23, i), Cells(25, i + 3)), Range("D29"), Range(Cells(19, i), Cells(21, i + 3)), Range("D28"), Range(Cells(15, i), Cells(17, i + 3)), Range("D27"))
Next i
End Sub
 

hongphuong

Thành viên mới
Rút gọn để lm gì vậy bạn?
Rút gọn để dễ làm, dễ nhớ và không bị nhầm lẫn
Em đã làm như này mà không được,
Chán quá
Mã:
Sub Test_6() 'sua mai không duoc
Dim i As Integer, kq, v1, v2, v3, dk1, dk2, dk3
Set kq = "Range(Cells(27, i), Cells(29, i + 3)"
Set v1 = "Range(Cells(23, i), Cells(25, i + 3)"
Set v2 = "Range(Cells(19, i), Cells(21, i + 3)"
Set v3 = "Range(Cells(15, i), Cells(17, i + 3)"
dk1 = Range("D29")
dk1 = Range("D28")
dk1 = Range("D27")

For i = 7 To 27 Step 5
    Cells(31, i).Value = WorksheetFunction.SumIfs(kq, v1, dk1, v2, dk2)
    Cells(32, i).Value = WorksheetFunction.SumIfs(kq, v1, dk1, v2, dk2, v3, dk3)
Next i
End Sub
 

bluestar

Thành viên mới
Rút gọn để dễ làm, dễ nhớ và không bị nhầm lẫn
Em đã làm như này mà không được,
Chán quá
Mã:
Sub Test_6() 'sua mai không duoc
Dim i As Integer, kq, v1, v2, v3, dk1, dk2, dk3
Set kq = "Range(Cells(27, i), Cells(29, i + 3)"
Set v1 = "Range(Cells(23, i), Cells(25, i + 3)"
Set v2 = "Range(Cells(19, i), Cells(21, i + 3)"
Set v3 = "Range(Cells(15, i), Cells(17, i + 3)"
dk1 = Range("D29")
dk1 = Range("D28")
dk1 = Range("D27")

For i = 7 To 27 Step 5
    Cells(31, i).Value = WorksheetFunction.SumIfs(kq, v1, dk1, v2, dk2)
    Cells(32, i).Value = WorksheetFunction.SumIfs(kq, v1, dk1, v2, dk2, v3, dk3)
Next i
End Sub
Tôi sửa lại thế này nhưng thấy nó dài hơn thì phải.
Mã:
Sub Test_5()
Dim i As Integer, D27 As Range, D28 As Range, D29 As Range, Rng As Range
Dim Sum_Rng As Range, Cri_Rng As Range, Cri_Rng2 As Range, Cri As Range
Dim WF As WorksheetFunction
    Set WF = WorksheetFunction
    Set D27 = Range("D27")
    Set D28 = Range("D28")
    Set D29 = Range("D29")
    For i = 7 To 27 Step 5
        Set Rng = Cells(19, i)
        Set Sum_Rng = Rng.Offset(8).Resize(3, 4)
        Set Cri_Rng = Rng.Offset(4).Resize(3, 4)
        Set Cri = Rng.Resize(3, 4)
        Set Sum_Rng2 = Rng.Offset(-4).Resize(3, 4)
        Rng.Offset(12) = WF.SumIfs(Sum_Rng, Cri_Rng, D29, Cri, D28)
        Rng.Offset(13) = WF.SumIfs(Sum_Rng, Cri_Rng, D29, Cri, D28, Sum_Rng2, D27)
    Next i
End Sub
 

hongphuong

Thành viên mới
Tôi sửa lại thế này nhưng thấy nó dài hơn thì phải.

Em Cảm ơn anh @bluestar
Anh oi tuy code của anh dài nhưng em thấy dễ sử dụng và không bị nhầm lẫn các vùng tham chiếu
Anh có thể nghiên cứu viết giúp em kiểu khác được không ạ?
(Vì em không hiểu mấy cái "offset" nên rất khó sử dụng"
Em cảm ơn anh nhiều nhé
 

bluestar

Thành viên mới
Tôi sửa lại thế này nhưng thấy nó dài hơn thì phải.

Em Cảm ơn anh @bluestar
Anh oi tuy code của anh dài nhưng em thấy dễ sử dụng và không bị nhầm lẫn các vùng tham chiếu
Anh có thể nghiên cứu viết giúp em kiểu khác được không ạ?
(Vì em không hiểu mấy cái "offset" nên rất khó sử dụng"
Em cảm ơn anh nhiều nhé
Thì trở lại nguyên bản của bạn vậy.
Mã:
Sub Test_5()
Dim i As Integer, D27 As Range, D28 As Range, D29 As Range
Dim Sum_Rng As Range, Cri_Rng As Range, Cri_Rng2 As Range, Cri As Range, Sum_Rng2 As Range
Dim WF As WorksheetFunction
    Set WF = WorksheetFunction
    Set D27 = Range("D27")
    Set D28 = Range("D28")
    Set D29 = Range("D29")
    For i = 7 To 27 Step 5
        Set Sum_Rng = Range(Cells(27, i), Cells(29, i + 3))
        Set Cri_Rng = Range(Cells(23, i), Cells(25, i + 3))
        Set Cri = Range(Cells(19, i), Cells(21, i + 3))
        Set Sum_Rng2 = Range(Cells(15, i), Cells(17, i + 3))
        Cells(31, i) = WF.SumIfs(Sum_Rng, Cri_Rng, D29, Cri, D28)
        Cells(32, i) = WF.SumIfs(Sum_Rng, Cri_Rng, D29, Cri, D28, Sum_Rng2, D27)
    Next i
End Sub
 

bluestar

Thành viên mới
Ối trời, anh @bluestar em nhờ anh viết giúp bằng cách khác
Thế mà anh lại ngĩ đi đâu ấy
Bài của em có làm được đâu
Tôi có biết bạn muốn chỉnh nhế thế nào đâu? Bạn hỏi rút gọn thì tôi rút gọn, còn việc code đúng hay sai tôi chẳng quan tâm vì đâu biết mục đích của bạn thế nào. Tôi chẳng tải file do bạn không chia sẻ.
 

hongphuong

Thành viên mới
Tôi có biết bạn muốn chỉnh nhế thế nào đâu? Bạn hỏi rút gọn thì tôi rút gọn, còn việc code đúng hay sai tôi chẳng quan tâm vì đâu biết mục đích của bạn thế nào. Tôi chẳng tải file do bạn không chia sẻ.
Hi hi
em chia se rùi mà anh oi
để em xem lại anh nhé
 

Ngày Mới

Thành viên tích cực
hongphuong Bạn viết Code kiểu gì mà không được, chỉ cần nó đáp ứng đúng yêu cầu của bạn và không lỗi lầm gì là OK rồi, ngắn hay dài có quan trọng gì đâu?, quan trọng là công việc được giải quyết hiệu quả.
 

hongphuong

Thành viên mới
@Ngày Mới anh oi, cái code của anh @bluestar em nghĩ là rất tốt
Nhưng thật sự vấn đề là em không biết sử dụng như nào (Nếu khi các vùng dữ liệu bị thay đổi)
 

Ngày Mới

Thành viên tích cực
@hongphuong Bạn nên tập cách xác định các vùng dữ liệu và cho chúng vào một biến cụ thể, các code bên dưới chỉ xử lý biến đó mà thôi. Khi sau này bạn muốn sửa đổi dữ liệu, bạn chỉ cần thay đổi biến đó là xong, như cách mà bluestar đã làm. Hạn chế lặp lại liên tục một giá trị dữ liệu trong code, việc này sẽ làm cho việc sửa đổi code sau này trờ nên cực kì khó khăn.

Bạn cần nhiều cách viết Code, nhưng tôi không rõ cách khác bạn cần có lợi ích gì trong khi Code cũ đã OK trong trường hợp này của bạn?, và tôi cũng không biết cách nào mới là cách bạn cần. Nếu là bạn muốn học hỏi thêm kiến thức mới, hãy lên đọc các bài viết trên diễn đàn sẽ giúp ích được cho bạn.

Câu hỏi của bạn rất chung chung nên tôi trả lời cũng chung chung cho bạn.
 

hongphuong

Thành viên mới
Em cảm ơn anh @bluestar và anh @Ngày Mới
Em đac nghiên cứu và hiểu được code của anh @bluestar rùi ạ.
Anh oi cho em hỏi thêm như này các anh nhé.
Nếu như số dòng của vùng điều kiện và vùng dữ liệu tăng lên hoặc giảm xuống bất kỳ.
Thì trường hợp này viết code như thế nào ạ.
Em cảm ơn các anh ạ,
 
Sửa lần cuối:
Top