[Help] Thống kê số lượng theo thời gian chênh lệch

  • Thread starter Thread starter Duc9184
  • Ngày gửi Ngày gửi
Liên hệ QC

Duc9184

Thành viên mới
Tham gia
2/7/18
Bài viết
8
Được thích
0
Xin chào các Anh/Chị,
Em có 1 file excel như sau:
Ở Sheet dữ liệu:
- Em có các cột [Mã đơn] [TGian_L1] [Mã NV_Lần 1] [TGian_L2] [Mã NV_Lần 2] [TGian_L3] [Mã NV_Lần 3].
- [Mã NV_Lần *] sẽ gồm [Mã Bộ phận]_[MS NV]
- Với mỗi [Mã đơn] sẽ có 3 mốc thời gian thao tác từ [TGian_L1] đến [TGian_L3].
- Với mỗi Thời gian thao tác sẽ có 1 nhân viên thao tác từ [Mã NV_Lần 1] đến [Mã NV_Lần 3]
Ở Sheet Thống kê, sẽ có 2 cột:
- [Bộ phận] có mã bộ phận tương ứng
- [Số lượng] em muốn đếm số lượng đơn hàng thỏa điều kiện [TGian_L2] - [TGian_L1] <= 24 giờ VÀ [Mã NV_Lần 3] - [TGian_L2] <= 24 giờ tương ứng với từng mã ở cột [Bộ phận]
Nhờ Anh/Chị hướng dẫn giúp em vấn đề trên.
Xin cảm ơn ạ.
 

File đính kèm

Xin chào các Anh/Chị,
Em có 1 file excel như sau:
Ở Sheet dữ liệu:
- Em có các cột [Mã đơn] [TGian_L1] [Mã NV_Lần 1] [TGian_L2] [Mã NV_Lần 2] [TGian_L3] [Mã NV_Lần 3].
- [Mã NV_Lần *] sẽ gồm [Mã Bộ phận]_[MS NV]
- Với mỗi [Mã đơn] sẽ có 3 mốc thời gian thao tác từ [TGian_L1] đến [TGian_L3].
- Với mỗi Thời gian thao tác sẽ có 1 nhân viên thao tác từ [Mã NV_Lần 1] đến [Mã NV_Lần 3]
Ở Sheet Thống kê, sẽ có 2 cột:
- [Bộ phận] có mã bộ phận tương ứng
- [Số lượng] em muốn đếm số lượng đơn hàng thỏa điều kiện [TGian_L2] - [TGian_L1] <= 24 giờ VÀ [Mã NV_Lần 3] - [TGian_L2] <= 24 giờ tương ứng với từng mã ở cột [Bộ phận]
Nhờ Anh/Chị hướng dẫn giúp em vấn đề trên.
Xin cảm ơn ạ.
Bạn chạy code này xem nhé.
Mã:
Sub dem()
    Dim arr, arr1, i As Long, j As Long, lr As Long, dic As Object, dk As String, a As Long, b As Long, c As Long, d As Double
    Set dic = CreateObject("scripting.dictionary")
    With Sheet1
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("B2:G" & lr).Value
        ReDim arr1(1 To UBound(arr, 1), 1 To 2)
        For i = 1 To UBound(arr, 1)
            b = 0
            dk = Split(arr(i, 2), "_")(0)
            If Not dic.exists(dk) Then
               a = a + 1
               arr1(a, 1) = dk
               dic.Add dk, a
            End If
              c = dic.Item(dk)
              If Len(arr(i, 3)) > 0 Then
                 d = arr(i, 3) - arr(i, 1)
                 If d <= 1 Then b = b + 1
              End If
              If Len(arr(i, 5)) > 0 Then
                 d = arr(i, 5) - arr(i, 3)
                 If d <= 1 Then b = b + 1
              End If
               arr1(c, 2) = arr1(c, 2) + b
         Next i
    End With
    With Sheet2
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr > 4 Then .Range("A5:B" & lr).ClearContents
         If a Then .Range("A5").Resize(a, 2).Value = arr1
    End With
End Sub
 
Upvote 0
Bạn chạy code này xem nhé.
Mã:
Sub dem()
    Dim arr, arr1, i As Long, j As Long, lr As Long, dic As Object, dk As String, a As Long, b As Long, c As Long, d As Double
    Set dic = CreateObject("scripting.dictionary")
    With Sheet1
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("B2:G" & lr).Value
        ReDim arr1(1 To UBound(arr, 1), 1 To 2)
        For i = 1 To UBound(arr, 1)
            b = 0
            dk = Split(arr(i, 2), "_")(0)
            If Not dic.exists(dk) Then
               a = a + 1
               arr1(a, 1) = dk
               dic.Add dk, a
            End If
              c = dic.Item(dk)
              If Len(arr(i, 3)) > 0 Then
                 d = arr(i, 3) - arr(i, 1)
                 If d <= 1 Then b = b + 1
              End If
              If Len(arr(i, 5)) > 0 Then
                 d = arr(i, 5) - arr(i, 3)
                 If d <= 1 Then b = b + 1
              End If
               arr1(c, 2) = arr1(c, 2) + b
         Next i
    End With
    With Sheet2
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr > 4 Then .Range("A5:B" & lr).ClearContents
         If a Then .Range("A5").Resize(a, 2).Value = arr1
    End With
End Sub
Cảm ơn Bạn đã hỗ trợ mình!
Nhưng Code trả ra kết quả không giống kết quả của mình.
Code này đếm số lượng [TGian_L2] - [TGian_L1] <= 24 giờ + số lượng [Mã NV_Lần 3] - [TGian_L2] <= 24
Nên kq của code là:
Bộ phậnSố lượng

A01

7

B01

9

C01

9

Còn theo ý mình cần đếm là số lượng [TGian_L2] - [TGian_L1] và [Mã NV_Lần 3] - [TGian_L2] đều nhỏ hơn 24 giờ:
Kết quả mình cần trả ra là:

Bộ phậnSố lượng

A01

3

B01

4

C01

3
Bộ phận A01 có 3 mã H_02, H_04 và H_05 có [TGian_L2] - [TGian_L1] và [Mã NV_Lần 3] - [TGian_L2] < 24 giờ
Bộ phận B01 có 4 mã là H_07, H_08, H_09 và H_10
Bộ phận C01 có 3 mã là H_13, H_14 và H_15

1552201693713.png
 
Upvote 0
Thử:

=SUMPRODUCT((LEFT($C$2:$C$20,3)=M5)*(LEFT($E$2:$E$20,3)=M5)*(LEFT($G$2:$G$20,3)=M5)
*($D$2:$D$20-$B$2:$B$20<=1)*($F$2:$F$20-$D$2:$D$20<=1))
 
Upvote 0
Em có 1 file excel như sau:
Ở Sheet dữ liệu:
- Em có các cột . . . .
- [Mã NV_Lần *] sẽ gồm [Mã Bộ phận]_[MS NV]
- Với mỗi [Mã đơn] sẽ có 3 mốc . . .
Vậy nhân viên của CQ bạn không khi nào chuyển bộ phận trong suốt thời gian làm việc ư?
Thêm nữa, các đơn vị hay bộ phận trong CQ bạn không nhập hay tách ra sao? Khi đó sẽ như thế nào?
Ý của mình là mã NV là sẽ phải tồn tại bất di bất dịch.
Thà rằng bạn gắn thêm với mã ngày sinh của nhân viên đó thì hay hơn
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Bạn đã hỗ trợ mình!
Nhưng Code trả ra kết quả không giống kết quả của mình.
Code này đếm số lượng [TGian_L2] - [TGian_L1] <= 24 giờ + số lượng [Mã NV_Lần 3] - [TGian_L2] <= 24
Nên kq của code là:
Bộ phậnSố lượng

A01

7

B01

9

C01

9

Còn theo ý mình cần đếm là số lượng [TGian_L2] - [TGian_L1] và [Mã NV_Lần 3] - [TGian_L2] đều nhỏ hơn 24 giờ:
Kết quả mình cần trả ra là:
Bộ phậnSố lượng

A01

3

B01

4

C01

3
Bộ phận A01 có 3 mã H_02, H_04 và H_05 có [TGian_L2] - [TGian_L1] và [Mã NV_Lần 3] - [TGian_L2] < 24 giờ

Bộ phận B01 có 4 mã là H_07, H_08, H_09 và H_10
Bộ phận C01 có 3 mã là H_13, H_14 và H_15

View attachment 213405
Bạn chạy thử code này nhé.
Mã:
Sub dem()
    Dim arr, arr1, i As Long, j As Long, lr As Long, dic As Object, dk As String, a As Long, b As Long, c As Long, d As Double, e As Double
    Set dic = CreateObject("scripting.dictionary")
    With Sheet1
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("B2:G" & lr).Value
        ReDim arr1(1 To UBound(arr, 1), 1 To 2)
        For i = 1 To UBound(arr, 1)
            e = 2: d = 2
            dk = Split(arr(i, 2), "_")(0)
            If Not dic.exists(dk) Then
               a = a + 1
               arr1(a, 1) = dk
               dic.Add dk, a
            End If
              c = dic.Item(dk)
              If Len(arr(i, 3)) > 0 Then
                 d = arr(i, 3) - arr(i, 1)
              End If
              If Len(arr(i, 5)) > 0 Then
                 e = arr(i, 5) - arr(i, 3)
              End If
              If d <= 1 And e <= 1 Then
               arr1(c, 2) = arr1(c, 2) + 1
              End If
         Next i
    End With
    With Sheet2
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr > 4 Then .Range("A5:B" & lr).ClearContents
         If a Then .Range("A5").Resize(a, 2).Value = arr1
    End With
End Sub
 
Upvote 0
Vậy nhân viên của CQ bạn không khi nào chuyển bộ phận trong suốt thời gian làm việc ư?
Thêm nữa, các đơn vị hay bộ phận trong CQ bạn không nhập hay tách ra sao? Khi đó sẽ như thế nào?
Ý của mình là mã NV là sẽ phải tồn tại bất di bất dịch.
Thà rằng bạn gắn thêm với mã ngày sinh của nhân viên đó thì hay hơn
Cảm ơn bạn đã góp ý!
Mã nhân viên cty mình là 1 dãi số cố định cho từng nhân viên do nhân sự quản lý
Nhưng do phần mềm quản lý kinh doanh sẽ cấp cho nhân viên 1 ID gồm mã bộ phận + mã nhân viên như ví dụ trên ạ.
----------------------------------------------------------------------------------------------------------------------------------
Thử:

=SUMPRODUCT((LEFT($C$2:$C$20,3)=M5)*(LEFT($E$2:$E$20,3)=M5)*(LEFT($G$2:$G$20,3)=M5)
*($D$2:$D$20-$B$2:$B$20<=1)*($F$2:$F$20-$D$2:$D$20<=1))
Bạn chạy thử code này nhé.
Mã:
Sub dem()
    Dim arr, arr1, i As Long, j As Long, lr As Long, dic As Object, dk As String, a As Long, b As Long, c As Long, d As Double, e As Double
    Set dic = CreateObject("scripting.dictionary")
    With Sheet1
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("B2:G" & lr).Value
        ReDim arr1(1 To UBound(arr, 1), 1 To 2)
        For i = 1 To UBound(arr, 1)
            e = 2: d = 2
            dk = Split(arr(i, 2), "_")(0)
            If Not dic.exists(dk) Then
               a = a + 1
               arr1(a, 1) = dk
               dic.Add dk, a
            End If
              c = dic.Item(dk)
              If Len(arr(i, 3)) > 0 Then
                 d = arr(i, 3) - arr(i, 1)
              End If
              If Len(arr(i, 5)) > 0 Then
                 e = arr(i, 5) - arr(i, 3)
              End If
              If d <= 1 And e <= 1 Then
               arr1(c, 2) = arr1(c, 2) + 1
              End If
         Next i
    End With
    With Sheet2
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr > 4 Then .Range("A5:B" & lr).ClearContents
         If a Then .Range("A5").Resize(a, 2).Value = arr1
    End With
End Sub

Cảm ơn 2 bạn ạ!
Cả hàm và code đều trả qua kết quả như ý của mình.
Xin cảm ơn!
 
Upvote 0
Web KT

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

Back
Top Bottom