Dùng ct sau để tính số lần xuất hàng trong tháng, cụ thể trong này là 2ALOAN đã 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!
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.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))
Tạm thời dùng cột phụ đã, giờ chưa nghĩ ra.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!
Vậy khi nào tìm ra cách không cần cột phụ thì chỉ em với!IF(SUMPRODUCT(($A$2:$A2=$A2)*($B$2:$B2=$B2)*1)>1,"",1)
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!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!
Hì
ITEM =OFFSET($B$1,MATCH($A20,$B$2:$B$17,0),0,COUNTIF($B$2:$B$17,$A20),1)
DATE =OFFSET(ITEM,,-1)
C20 =SUMPRODUCT(1/COUNTIF(DATE,DATE))
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ụ.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
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
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ọnALOAN đã 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?
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.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
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.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
Em thử save as thành *.xla và dùng như addIns.Em có code như sau:
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.