VBA代碼記錄2

該段代碼踩過的坑:數組定義及初始化 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章