該段代碼踩過的坑:數組定義及初始化
for循環,如果step爲1,可省略不寫;如果step爲-1,必須寫。
Sub 宏1()
'
' 宏1 宏
'
For s = 1 To ActiveWorkbook.Worksheets.Count //所有工作表循環
ActiveWorkbook.Worksheets(s).Select
ActiveSheet.Select
ActiveSheet.Range("I3:J65536").Copy ActiveSheet.Range("Q3") //把I、J兩列的內容複製到Q、R兩列
ActiveSheet.Cells(1, 19) = "Difference"
ActiveSheet.Cells(1, 20) = "Spread"
ActiveSheet.Cells(1, 21) = "FixedDelta"
//定義變量
Dim i, j, k, tmp, LastRow, sum
Dim difference, spread, average
Dim Delay, Delay1, Delay2, Delay3, Delay4, Delay5, Delay6, Delay7, Delay8, Delay9, Delay10
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row //獲取有內容的行數
For i = 7 To LastRow
If ActiveSheet.Cells(i, 17) = "" Then //判斷當前單元格內容是否爲空
i = i + 4
Else
Delay5 = ActiveSheet.Cells(i, 17) //單元格內容賦值給變量
Delay4 = ActiveSheet.Cells(i - 1, 17) //單元格內容賦值給變量
Delay3 = ActiveSheet.Cells(i - 2, 17) //單元格內容賦值給變量
Delay2 = ActiveSheet.Cells(i - 3, 17) //單元格內容賦值給變量
Delay1 = ActiveSheet.Cells(i - 4, 17) //單元格內容賦值給變量
Dim a As Variant //數組定義
a = Array(Delay1, Delay2, Delay3, Delay4, Delay5) //數組初始化
For j = 0 To 4 //數組五個值從小到大排序
For k = j + 1 To 4
If a(j) > a(k) Then
tmp = a(j)
a(j) = a(k)
a(k) = tmp
End If
Next k
Next j
Delay6 = a(0) //排序後的值賦值給變量
Delay7 = a(1) //排序後的值賦值給變量
Delay8 = a(2) //排序後的值賦值給變量
Delay9 = a(3) //排序後的值賦值給變量
Delay10 = a(4) //排序後的值賦值給變量
average = (Delay6 + Delay7 + Delay8 + Delay9 + Delay10) / 5
difference = Delay5 - average
ActiveSheet.Cells(i, 19).Value = Abs(difference) //絕對值填充到單元格
spread = Delay9 - Delay7
ActiveSheet.Cells(i, 20).Value = spread
If Abs(difference) > spread * 0.4 Then
Delay = Delay5
Else
If ActiveSheet.Cells(i, 18).Value > 1 Then
Delay = Delay5 + ActiveSheet.Cells(i, 18).Value
Else
Delay = Delay5 + ActiveSheet.Cells(i, 18).Value * 0.5
End If
End If
ActiveSheet.Cells(i, 21) = Delay
ActiveSheet.Cells(i, 22) = Delay - Delay5
End If
Next i
Next s
End Sub