我有一个包含订单日期数据的电子表格:
我需要找到每个订单日期之间的平均天数。我必须找到一种方法来超越行中的空白单元格,并且还考虑到一些客户端有5-10个订单,而一些客户端在计算订单之间的平均频率(间隔)时有2个订单。
到目前为止我所拥有的:
Sub DateInt()
Dim CurrentSheet As Worksheet
Dim LastRow As Integer
Dim LastCol As Integer
Dim CurrentRow As Integer
Dim CurrentCol As Integer
Dim GrandT As String
GrandT = InputBox("Which column is the Grand Total in?", "Grand Total Column Letters")
Set CurrentSheet = ActiveWorkbook.ActiveSheet
LastRow = CurrentSheet.Range(GrandT & Rows.Count).End(xlUp).Row
LastCol = CurrentSheet.Cells(4, Columns.Count).End(xlToLeft).Column - 1
For CurrentRow = 5 To LastRow
For CurrentCol = 2 To LastCol
If Not CurrentSheet.Cells(CurrentRow, CurrentCol).Value = "" Then
'Save date
'Find next date in row
'Subtract Dates to get interval and save interval in days
'Save a running average of intervals
'Maybe a running sum (SumDates) and a running divisor (NumOfDates)
Else
Next
'Output average interval (SubDates / NumOfDates) in CurrentSheet.Cells(CurrentRow, LastCol + 1).Value
Next
End Sub
我无法弄清楚如何在CurrentCol到LastCol循环中进行循环: 也许是这样的:
NumOfDates = 0
'Loop
'Loop
NumOfDates = NumOfDates + 1
Date & NumOfDates = CurrentCell.Value
If NumOfDates = 1 Then Next
Else
Interval = Date2 - Date1
TtlInterval = TtlInterval + Interval
Date2 = Date1
Next
答案 0 :(得分:3)
我们在这里获胜:(更新时更好)
Sub DateInt()
Dim CurrentSheet As Worksheet
Dim LastRow As Integer
Dim LastCol As Integer
Dim CurrentRow As Integer
Dim CurrentCol As Integer
Dim GrandT As String
Dim DateA As Date
Dim DateB As Date
Dim DateTtl As Integer
Dim DateCount As Integer
Set CurrentSheet = ActiveWorkbook.ActiveSheet
LastRow = CurrentSheet.Range("A" & Rows.Count).End(xlUp).Row - 1
LastCol = CurrentSheet.Cells(4, Columns.Count).End(xlToLeft).Column
Cells(4, LastCol + 1).Value = "Avg Interval"
Cells(4, LastCol + 2).Value = "Days Since Last Order"
Cells(4, LastCol + 3).Value = "Last Order Date"
Cells(4, LastCol + 4).Value = "Last Order v Avg Order"
For CurrentRow = 5 To LastRow
Cells(CurrentRow, LastCol).Value = Date
Cells(CurrentRow, LastCol).NumberFormat = "mm/dd/yy"
DateCount = 0
DateTtl = 0
DateC = DateAdd("d", 20, Date)
For CurrentCol = 2 To LastCol
If Cells(CurrentRow, CurrentCol).Value = "" Then
Else
If DateCount < 1 Then
DateA = Cells(CurrentRow, CurrentCol).Value
Else
DateB = Cells(CurrentRow, CurrentCol).Value
DateTtl = DateDiff("d", DateA, DateB) + DateTtl
If DateValue(DateB) = DateValue(Date) Then
Else
DateA = DateB
End If
End If
DateCount = DateCount + 1
End If
Next CurrentCol
Cells(CurrentRow, LastCol + 1).Value = DateTtl / DateCount
Cells(CurrentRow, LastCol + 1).NumberFormat = "General"
Cells(CurrentRow, LastCol + 2).Value = DateDiff("d", DateA, Date)
Cells(CurrentRow, LastCol + 2).NumberFormat = "General"
Cells(CurrentRow, LastCol + 3).Value = DateA
Cells(CurrentRow, LastCol + 3).NumberFormat = "mm/dd/yy"
Cells(CurrentRow, LastCol + 4).Value = Cells(CurrentRow, LastCol + 1).Value - Cells(CurrentRow, LastCol + 2).Value
Cells(CurrentRow, LastCol + 4).NumberFormat = "#,##0_);[Red](#,##0)"
Next CurrentRow
End Sub