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ự
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