Cách Tính Trung Bình Số Lượng Giữa Hai Lần Kiểm Tra Gần Nhất Trong Excel

Mình đang có một bảng tổng hợp với các cột như sau:
• Cột A: Tên (lặp lại nhiều lần tương ứng với số lần kiểm tra ở các khoảng thời gian khác nhau).
• Cột B: Ngày kiểm tra (dạng ngày tháng).
• Cột C: Số lượng (tăng dần theo thời gian kiểm tra).

Mình muốn tính trung bình số lượng giữa hai lần kiểm tra gần nhau nhất. Ví dụ, đối với Tên A, trong bảng mẫu có 3 lần kiểm tra, nhưng mình cần lấy số lượng trung bình của ngày mới nhất là 6/10/2023 và ngày trước đó là 7/5/2023. Ai biết cách làm, chỉ giúp mình với!

Cách Tính Sản Lượng Giữa Hai Ngày Gần Nhất Trong Excel

Tham khảo cách làm dưới đây:

[ATTACH type="full" alt="Cách Tính Trung Bình Số Lượng Giữa Hai Lần Kiểm Tra Gần Nhất.png"]17732

• Ý tưởng: Lấy tổng sản lượng của 2 ngày gần nhất chia cho tổng số ngày trong khoảng 2 ngày gần nhất. Của bạn là lấy sản lượng ngày gần nhất trừ sản lượng ngày kế tiếp gần nhất (ví dụ: ngày gần nhất là 6/12/2023, ngày kế tiếp gần nhất là 4/12/2023).

• Khi dùng hàm UDF: Dữ liệu trong file sau khi nhấn Enter sẽ được sắp xếp theo ngày.

• Khi dùng sub: Dữ liệu sau khi chạy code sẽ được trả lại nguyên dạng ban đầu.
Code:

Option Explicit
Sub TinhToan()
    Dim i           As Long, j As Long, Lr As Long, t As Long, ngay As Long, Sluong As Double
    Dim Arr(), ArrD(), ArrN(), KQ()
    Dim MyCell      As Range, Rng As Range, ten As String

With Sheet1
        Set MyCell = .Range("G2")
        Lr = .Cells(100000, 3).End(xlUp).Row
        Set Rng = .Range("A2:C" & Lr)
        ArrN = Rng.Value
        Rng.Select

ActiveSheet.Sort.SortFields.Clear
        ActiveSheet.Sort.SortFields.Add Key:=Rng.Columns(2), _
                                        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveSheet.Sort
            .SetRange Rng
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

Arr = Rng.Value
        .Range("A2:A" & Lr).Copy MyCell
        .Range("G2:G" & Lr).RemoveDuplicates Columns:=1, Header:=xlNo
        ArrD = MyCell.CurrentRegion.Value

ReDim KQ(1 To UBound(ArrD), 1 To 2)
        For j = 1 To UBound(ArrD)
            ten = ArrD(j, 1)
            Sluong = 0
            ngay = 0
            t = 0
            For i = UBound(Arr) To 1 Step -1
                If Arr(i, 1) = ten Then
                    t = t + 1
                    If t = 1 Then
                        ngay = Arr(i, 2)
                        Sluong = Arr(i, 3) + Sluong
                    End If
                    If t = 2 Then
                        ngay = ngay - Arr(i, 2)
                        KQ(j, 1) = Sluong / ngay
                        Exit For
                    Else
                        KQ(j, 1) = "Có 1 ngày"
                    End If
                End If
            Next i
        Next j

MyCell.Offset(0, 1).Resize(UBound(ArrD), 1) = KQ
        .Range("A2").Resize(UBound(ArrN), UBound(ArrN, 2)) = ArrN
    End With
End Sub

Xem file để biết thêm chi tiết.

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
Chia sẻ: