Tính thời gian làm hàng trung bình

Liên hệ QC

dinhquang042000

Thành viên chính thức
Tham gia
16/12/15
Bài viết
76
Được thích
4
Kính gửi anh chị FORUMS,

Em muốn xin 1 code VBA tính toán thời gian làm hàng trung bình của các xe như sau:
Trong sheet REPORT em cần tính 2 giá trị từ dữ liệu trong sheet DATA.
1. Thời gian trung bình làm hàng: thời gian làm hàng tính từ Thời gian xe vào (Cột D) tời thời gian xe ra (Cột E) (đơn vị tính giờ)
2. Thời gian trung bình chờ rời: Giá trị trung bình của cột F
Do dữ liệu lớn, lên khi viết hàm excel file chạy rất nặng, mong anh chị bớt chút thời gian trợ giúp e lập code này với.
Em xin chân thành cảm ơn.
 

File đính kèm

Kính gửi anh chị FORUMS,

Em muốn xin 1 code VBA tính toán thời gian làm hàng trung bình của các xe như sau:
Trong sheet REPORT em cần tính 2 giá trị từ dữ liệu trong sheet DATA.
1. Thời gian trung bình làm hàng: thời gian làm hàng tính từ Thời gian xe vào (Cột D) tời thời gian xe ra (Cột E) (đơn vị tính giờ)
2. Thời gian trung bình chờ rời: Giá trị trung bình của cột F
Do dữ liệu lớn, lên khi viết hàm excel file chạy rất nặng, mong anh chị bớt chút thời gian trợ giúp e lập code này với.
Em xin chân thành cảm ơn.
Bạn cho ví dụ kết quả xem nào.Mà làm gì có cột F.Bạn xem lại file xem.
 
Upvote 0
Bạn cho ví dụ kết quả xem nào.Mà làm gì có cột F.Bạn xem lại file xem.

Dạ có nghĩa là bên sheet data có nhiều dòng giá trị, mỗi dòng giá trị có 2 thời gian là thời gian xe vào cột D và thời gian Xe ra cột E,
Thời gian làm hàng của từng dòng = khoảng thời gian từ khi xe vào tới lúc xe ra (giờ) = (E - D )*24
VD 2: Thời gian làm hàng = (E2-D2)*24.
sau đó lấy trung bình (average) của các thời gian làm hàng của tất cả các dòng này để có kết quả ở ô B1 trên sheet REPORT
Do sơ sót, e xin gủi lại file có dữ liệu ở cột F,
mong anh chỉ giáo, giúp đỡ thêm ạ.
 

File đính kèm

Upvote 0
Dạ có nghĩa là bên sheet data có nhiều dòng giá trị, mỗi dòng giá trị có 2 thời gian là thời gian xe vào cột D và thời gian Xe ra cột E,
Thời gian làm hàng của từng dòng = khoảng thời gian từ khi xe vào tới lúc xe ra (giờ) = (E - D )*24
VD 2: Thời gian làm hàng = (E2-D2)*24.
sau đó lấy trung bình (average) của các thời gian làm hàng của tất cả các dòng này để có kết quả ở ô B1 trên sheet REPORT
Do sơ sót, e xin gủi lại file có dữ liệu ở cột F,
mong anh chỉ giáo, giúp đỡ thêm ạ.
Ô B2 dùng hàm của Excel
Ô B1 dùng hàm tự tạo
Mã:
Function AverageTg(ByVal RngTime1 As Range, RngTime2 As Range)
  Dim Arr1(), Arr2()
  Dim i As Long, k As Long, S As Double
  If RngTime1.Rows.Count <> RngTime2.Rows.Count Then TgTrungBinh = "So dong 2 vùng khong khop": Exit Function
  Arr1 = Cmang(RngTime1)
  Arr2 = Cmang(RngTime2)
  For i = 1 To UBound(Arr1)
    If Len(Arr1(i, 1)) > 0 And Len(Arr2(i, 1)) > 0 Then
      k = k + 1
      S = S + Cthoigian(Arr2(i, 1)) - Cthoigian(Arr1(i, 1))
    End If
  Next i
  If k Then AverageTg = S * 24 / k
End Function
Private Function Cthoigian(ByVal tg As Variant) As Date
  Dim tmp As Variant
  If Day("1 / 5 / 2018") = 1 Then
    Cthoigian = CDate(tg)
  Else
    If TypeName(tg) <> "String" Then tg = Format(tg, "dd/mm/yyyy hh:mm:ss")
    tmp = Mid(tg, 1, 2)
    Mid(tg, 1, 2) = Mid(tg, 4, 2)
    Mid(tg, 4, 2) = tmp
    Cthoigian = CDate(tg)
  End If
End Function
Private Function Cmang(ByVal Rng As Range) As Variant
  Dim Res() As Variant
  If Rng.Rows.Count = 1 Then
    ReDim Res(1 To 1, 1 To 1)
    Res(1, 1) = Rng.Value
  Else
    Res = Rng.Value
  End If
  Cmang = Res
End Function
 

File đính kèm

Upvote 0
Ô B2 dùng hàm của Excel
Ô B1 dùng hàm tự tạo
Mã:
Function AverageTg(ByVal RngTime1 As Range, RngTime2 As Range)
  Dim Arr1(), Arr2()
  Dim i As Long, k As Long, S As Double
  If RngTime1.Rows.Count <> RngTime2.Rows.Count Then TgTrungBinh = "So dong 2 vùng khong khop": Exit Function
  Arr1 = Cmang(RngTime1)
  Arr2 = Cmang(RngTime2)
  For i = 1 To UBound(Arr1)
    If Len(Arr1(i, 1)) > 0 And Len(Arr2(i, 1)) > 0 Then
      k = k + 1
      S = S + Cthoigian(Arr2(i, 1)) - Cthoigian(Arr1(i, 1))
    End If
  Next i
  If k Then AverageTg = S * 24 / k
End Function
Private Function Cthoigian(ByVal tg As Variant) As Date
  Dim tmp As Variant
  If Day("1 / 5 / 2018") = 1 Then
    Cthoigian = CDate(tg)
  Else
    If TypeName(tg) <> "String" Then tg = Format(tg, "dd/mm/yyyy hh:mm:ss")
    tmp = Mid(tg, 1, 2)
    Mid(tg, 1, 2) = Mid(tg, 4, 2)
    Mid(tg, 4, 2) = tmp
    Cthoigian = CDate(tg)
  End If
End Function
Private Function Cmang(ByVal Rng As Range) As Variant
  Dim Res() As Variant
  If Rng.Rows.Count = 1 Then
    ReDim Res(1 To 1, 1 To 1)
    Res(1, 1) = Rng.Value
  Else
    Res = Rng.Value
  End If
  Cmang = Res
End Function
Dạ cái này hay lắm ạ,
Em cảm ơn anh Hiếu nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom