|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
一个 时间计算, 循环 判断结果值 是否在 某个范围内 ,调整 直至 结果到范围之外。
Sub 核算1()
Dim n As Long, y As Long, n2 As Long
Dim Sh As Worksheet, St As Worksheet
Dim Dic As Object, Dit As Object
Set Sh = Sheet4
Set St = Sheet5
Dim arr, brr, s, ss()
Set d = CreateObject("scripting.dictionary")
' arr = Range("d5:d" & Cells(Rows.Count, "d").End(xlUp).Row)
brr = St.Range("A1:e" & Cells(Rows.Count, "d").End(xlUp).Row)
For i = 1 To UBound(brr)
d(brr(i, 1)) = brr(i, 3)
Next
n = Sh.Range("a6556").End(xlUp).Row
n2 = Sh.Cells(1, Columns.Count).End(xlToLeft).Column
For y = 2 To n
Sh.Cells(y, 11).Value = Int(Sh.Cells(y, 4).Value / Sh.Cells(y, 7).Value * 3600)
If y > 2 Then
Sh.Cells(y, 15).Value = Sh.Cells(y - 1, 16).Value
End If
If d.Item(Hour(Sh.Cells(y, 15).Value)) > 0 Then '对应 Brr 3列 ,大于 0 就正常计算, 为0 就 直接 加 1 小时 , 越过这个区间
Sh.Cells(y, 16).Value = Sh.Cells(y, 15).Value + Sh.Cells(y, 11).Value / d.Item(Hour(Sh.Cells(y, 15).Value)) / 24 / 3600 ' 将 brr 第 3列 值 ,参与计算
Else
Sh.Cells(y, 16).Value = Sh.Cells(y, 15).Value + (3600 + Sh.Cells(y, 11).Value) / 24 / 3600
' = Sh.Cells(y, 15).Value + (3600 这个 3600 是 如果15 列 对应 BRR 3列 为 0 就 +3600 秒 相当于 延迟 一小时
End If
'问题是 16列 的结果, 是 12.00 (12.00 到 12.59 都是 12.00 ) , 这个时间段 是不生产, 要把 这个 16列的值 调整到 13.00 以后
'其它 区间 也一样,凌晨 不生产, 一样不能排在 凌晨
Next
|
|