希望有人能帮助我!
刚开始学习 VBA。
我正在尝试下面的代码。
目的是比较从第 4 行开始的行中的单元格,并根据条件将整行向上或向下偏移
条件是
开始日期必须介于不早于和不晚于日期之间 年龄必须大于或等于 11 岁
Sub sequenceOptimizer()
'Processing Start Date: Column E - Column Number: 5
'Processing Not Before: Column K - Column Number: 11
'Processing Not After: Column L - Column Number: 12
'Processing Age at Processing Start Date: Column M - Column Number: 13
Dim rw As Long
With ActiveWorkbook.ActiveSheet
LastRow = .UsedRange.Rows.Count
For rw = 2 To LastRow
Do Until IsEmpty(ActiveCell)
If .Cells(rw, 5) < .Cells(rw, 11) Then
ActiveCell.EntireRow.Offset(1, 0).Select
If .Cells(rw, 5) >= .Cells(rw, 11) And .Cells(rw, 13) < 11 Then
ActiveCell.EntireRow.Offset(1, 0).Select
If .Cells(rw, 5) >= .Cells(rw, 11) And .Cells(rw, 5) <= .Cells(rw, 12) And .Cells(rw, 13) <
11 Then
ActiveCell.EntireRow.Offset(1, 0).Select
If .Cells(rw, 5) >= .Cells(rw, 11) And .Cells(rw, 5) > .Cells(rw, 12) Then
ActiveCell.EntireRow.Offset(-1, 0).Select
End If
Next Row
Loop
End With
End Sub
我创建了一个流程图来说明这个过程。
除了使用 LastRow,还可以将最后一行设置为行号 3001,因为最大批次数为 3000。
首先,使用简单的 Excel 多级排序对电子表格进行排序,首先按不早于日期,然后按不晚于日期,最后按增长开始日期,然后为计算列插入公式。
在理想条件下,这种不使用 VBA 宏的简单排序应该可以给出理想的序列。
然而,在前一年,处理批次时并未遵循“不早于”和“不晚于”日期标准。
因此,当在当前年份应用相同的“不早于”和“不晚于”时间段时,对于某些批次而言,下一年度的年龄(当前年份的处理开始日期与增长开始日期(等于上一年的处理开始日期)之间的差值)少于 11 个月。
然后进入 VBA 宏,通过从行号 4 开始处理并移动到下一行,简单地按升序行号直到最后一个非空白行,来找到理想的序列。
最后,宏确保处理开始日期始终位于“不早于”和“不晚于”日期之间,且年龄大于或等于 11。
如果将处理开始日期保持在“不早于”和“不晚于”日期之间,则无法满足年龄 >= 11 的标准,行将向上移动,直到处理开始日期介于“不早于”和“不晚于”日期之间。换句话说,最佳食用日期。