Xuất bình quân /Ngày

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

ALOAN

Thành viên chính thức
Tham gia
6/11/07
Bài viết
88
Được thích
29
Nghề nghiệp
PURCHASING
Em có file dữ liệu Xuất như trong file đính kèm.
Trong 1 ngày có thể xuất nhiều chuyến
Em muốn tính lượng bình quân xuất trong 1 ngày
Mọi người giúp em với!
 
Lần chỉnh sửa cuối:
ALOAN đã viết:
Em có file dữ liệu Xuất như trong file đính kèm.
Trong 1 ngày có thể xuất nhiều chuyến
Em muốn tính lượng bình quân xuất trong 1 ngày
Mọi người giúp em với!
Dùng ct sau để tính số lần xuất hàng trong tháng, cụ thể trong này là 2
=SUMPRODUCT((1/COUNTIF($A$2:$A$17,$A$2:$A$17))*(MONTH($A$2:$A$17)=2))
Việc còn lại thì quá dễ, hay là cần VBA.
 
Vậy nếu muốn biết số lần xuất hàng trong tháng của từng item thì làm cách nào ạ!
 
Bạn dùng sumproduct để tính số lần item.
=SUMPRODUCT((MONTH($A$2:$A$17)=2)*($B$2:$B$17=A20)*1)
 
Lần chỉnh sửa cuối:
Cảm ơn tất cả mọi người!
Anh ThuNghi có cho em công thức sau:
Dùng ct sau để tính số lần xuất hàng trong tháng, cụ thể trong này là 2
=SUMPRODUCT((1/COUNTIF($A$2:$A$17,$A$2:$A$17))*(MONTH($A$2:$A$17) =2))
Nhưng công thức trên chỉ tính được số lần xuất hàng trong tháng của cả 2 item.
Em mong muốn có công thức tính được số lần xuất hàng trong tháng của từng item.
Nếu item đó trong 1 ngày được xuất nhiều lần thì cũng chỉ tính 1 mà thôi.
Mọi người xem lại file đính kèm dùm em nha!
 

File đính kèm

Lần chỉnh sửa cuối:
ALOAN đã viết:
Cảm ơn tất cả mọi người!
Anh ThuNghi có cho em công thức sau:

Nhưng công thức trên chỉ tính được số lần xuất hàng trong tháng của cả 2 item.
Em mong muốn có công thức tính được số lần xuất hàng trong tháng của từng item.
Nếu item đó trong 1 ngày được xuất nhiều lần thì cũng chỉ tính 1 mà thôi.
Mọi người xem lại file đính kèm dùm em nha!
Tạm thời dùng cột phụ đã, giờ chưa nghĩ ra.
 

File đính kèm

Vậy thay vì dùng 2 cột phụ, em gộp lai luôn nha:
IF(SUMPRODUCT(($A$2:$A2=$A2)*($B$2:$B2=$B2)*1)>1,"",1)
Vậy khi nào tìm ra cách không cần cột phụ thì chỉ em với!
Có thể dùng hàm tự tạo trong VBA đươc không?
Càng nhiều cách càng tốt anh nha!
 
ALOAN đã viết:
Vậy thay vì dùng 2 cột phụ, em gộp lai luôn nha:

Vậy khi nào tìm ra cách không cần cột phụ thì chỉ em với!
Có thể dùng hàm tự tạo trong VBA đươc không?
Càng nhiều cách càng tốt anh nha!
Nếu cột Item của bạn dc sắp xếp theo thứ tự thì tôi có thể giãi bài toán này mà ko cần cột phụ nào!
Đặt con trỏ chuột tại cell B20 rồi add 2 name:
Mã:
ITEM =OFFSET($B$1,MATCH($A20,$B$2:$B$17,0),0,COUNTIF($B$2:$B$17,$A20),1)
DATE =OFFSET(ITEM,,-1)
Công thức tại C20 là:
Mã:
C20 =SUMPRODUCT(1/COUNTIF(DATE,DATE))
Kéo fill công thức xuống C21
ANH TUẤN
 
Cảm ơn Bác Tuấn. Vậy nếu cột item không được sắp xếp theo thứ tự thì có cách nào không?
Vì dữ liệu được cập nhật hàng ngày mà trong ngày có rất rất nhiều item được nhập.
Nếu cứ phải sort thì mất thời gian lắm.Híc
 
ALOAN đã viết:
Cảm ơn Bác Tuấn. Vậy nếu cột item không được sắp xếp theo thứ tự thì có cách nào không?
Vì dữ liệu được cập nhật hàng ngày mà trong ngày có rất rất nhiều item được nhập.
Nếu cứ phải sort thì mất thời gian lắm.Híc
Vậy cột ngày có sắp xếp không? Nếu vậy thì dùng UDF dễ hơn. Còn không phải dùng Sub từ list phụ.
Em thử dùng UDF sau thử xem, ngày sắp xếp tăng dần. Test hộ luôn nhé, theo tôi dùng cột phụ là hay nhất.
Cú pháp: =lanxuat(DM hàng hóa, dm ngày, mã HH cần tính)
PHP:
Option Explicit
Dim iRow As Integer, eRow As Integer, i As Integer, SoLan As Integer
Public Function LanXuat(rMaHH As Range, rDate As Range, MaHH As String) As Integer
On Error Resume Next
Application.Volatile
eRow = rMaHH.Rows.Count
If WorksheetFunction.CountIf(rMaHH, MaHH) = 0 Then
    MsgBox "Khong co Ma HH tren"
    Exit Function
End If
If rMaHH.Rows.Count <> rDate.Rows.Count Or rMaHH.Columns.Count > 1 Or rDate.Columns.Count > 1 Then
    MsgBox "Ban chon DL chua dong bo"
    Exit Function
End If
iRow = WorksheetFunction.Match(MaHH, rMaHH, 0)
SoLan = 1
For i = iRow + 1 To eRow
    If rMaHH(i) = MaHH And rDate(i - 1) <> rDate(i) Then
        SoLan = SoLan + 1
    End If
    If rMaHH(i) = MaHH And rMaHH(i) <> rMaHH(i - 1) And rDate(i - 1) = rDate(i) Then
        SoLan = SoLan + 1
    End If
Next
LanXuat = SoLan
End Function
 
Lần chỉnh sửa cuối:
ALOAN đã viết:
Cảm ơn Bác Tuấn. Vậy nếu cột item không được sắp xếp theo thứ tự thì có cách nào không?
Vì dữ liệu được cập nhật hàng ngày mà trong ngày có rất rất nhiều item được nhập.
Nếu cứ phải sort thì mất thời gian lắm.Híc
Nếu chưa dc xếp thì bạn hảy sort nó bằng tay trước.. đâu có tốn công gì chứ... Còn sợ tốn công thì cho 1 code để nó sort giúp bạn! Bù lại bạn dc 1 công thức ngắn gọn
ANH TUẤN
 
Vậy cột ngày có sắp xếp không?

Cột item thì không, nhưng cột ngày thì có ạ.
Nếu chưa dc xếp thì bạn hảy sort nó bằng tay trước.. đâu có tốn công gì chứ... Còn sợ tốn công thì cho 1 code để nó sort giúp bạn! Bù lại bạn dc 1 công thức ngắn gọn
Cảm ơn Bác nha! Em sẻ thử xem, Bác nói cũng đúng lắm. Cách viết code để sort thì Bác có hướng dẫn em rồi.
Cảm ơn mọi người đã giúp em gở rối.
Chúc một ngày tốt lành!
 
Các bạn chú ý thêm 1 chuyện nữa: Sort 1 danh sách trước có rất nhiều điểm lợi.. Cái lợi thứ nhất như ta đã thấy, nó giúp cho công thức ngắn gọn... Còn cái lợi thứ 2 là về tốc độ... 1 danh sách dc sort sẳn bao giờ cũng cho tốc độ tính toán nhanh hơn 1 danh sách xếp lộn xộn!
ANH TUẤN
 
Em có code như sau:
Option Explicit
Public Function Lanxuat(rMaHH As Range, rDate As Range, MH As String) As Integer
Dim Temporary, L As Long, Dem As Byte, iL As Long
Application.Volatile
L = rMaHH.Rows.Count
Dem = 0
Temporary = ""
For iL = 1 To L
If rMaHH(iL) = MH Then
If rDate(iL) <> Temporary Then
Dem = Dem + 1
Temporary = rDate(iL)
End If
End If
Next iL
Lanxuat = Dem
End Function
Làm cách nào để Hàm "Lanxuat" có thể dùm được khi dùng trên workbook khác mà không phải tạo lại.
Xin nhờ các Bác chỉ dùm.
 
Web KT

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

Back
Top Bottom