代碼優化建議:
變量命名:變量名應該具有描述性,讓人能夠理解變量的含義。例如,使用更具體的變量名來代替 i、j、num 等。
減少重復計算:在代碼中多次使用相同的計算,可以將計算結果存儲在壹個變量中,以減少計算次數。
使用 With 語句:使用 With 語句可以減少代碼中的嵌套,提高代碼可讀性。
避免使用 Select 和 Activate:在代碼中避免使用 Select 和 Activate 語句,以減少 Excel 的無響應和卡頓。
避免使用 Find 函數:在代碼中使用 Find 函數來查找單元格,會增加代碼的復雜性和運行時間。建議直接使用循環來遍歷單元格。
使用數組:對於大量數據的操作,可以使用數組來存儲數據,以減少對 Excel 的操作次數,提高運行速度。
避免使用 If...Else 語句:在代碼中使用 If...Else 語句會增加代碼的復雜性和運行時間。如果條件簡單,可以直接使用單壹語句代替。
根據以上建議,可以對代碼進行優化:
Sub scpz()
Dim startRow As Long, endRow As Long Dim nonEmptyRow As Long, j As Long Dim data() As Variant Dim i As Long, k As Long Dim currentDate As Date Dim message As String
startRow = 8 '賬務處理起始行號 endRow = 4000 '賬務處理結束行號 nonEmptyRow = 0 '日記賬非空行號 j = 0 '當前行號 k = 0 '計數器 currentDate = Now() '獲取當前日期 message = "本期資金日記賬已生成憑證!" '生成提示信息
'獲取資金日記賬最後壹行號 With Worksheets("資金日記賬") num = .Cells(Rows.Count, "E").End(xlUp).Row End With
'將數據存儲到數組中 data = Sheet10.Range("O8:O" & num).Value
'調用進度條 Call showProgressBar
'遍歷數據並生成日記賬 For i = startRow To num If data(i, 4) <> "" And data(i, 15) <> "√" And data(i, 4) >= Sheet10.Cells(6, 10) And data(i, 4) <= Sheet10.Cells(6, 12) Then nonEmptyRow = i '記錄非空行號 j = j + 1 '增加當前行號 Sheet17.Cells(j, 6) = data(i, 4) '復制數據到日記賬中 Sheet17.Cells(j, 7) = data(i, 6) Sheet17.Cells(j, 8) = data(i, 16) Sheet17.Cells(j, 9) = data(i, 17) If data(i, 8) = "" Then Sheet17.Cells(j, 10) = data(i, 9) '如果備註為空,則使用摘要作為備註 Else Sheet17.Cells(j, 10) = data(i, 8) '否則使用實際備註 End If Sheet17.Cells(j, 11) = currentDate '記錄當前日期 Sheet17.Cells(j, 12) = "日記賬生成" '記錄操作類型為日記賬生成 Sheet17.Cells(j, 13) = data(i, 7) '復制憑證信息到日記賬中 k = k + 1 '增加計數器,表示生成了壹條日記賬記錄 ElseIf data(i + 1, 4) <> "" Then '如果下壹行不為空,則生成下壹行日記賬記錄 nonEmptyRow = i + 1 '記錄非空行號 j = j + 1 '增加當前行號 Sheet17.Cells(j, 6) = data(i + 1, 4) '復制數據到日記賬中 Sheet17.Cells(j, 7) = data(i + 1, 6) Sheet17.Cells(j, 8) = data(i + 1, 16) Sheet17.Cells(j, 9) = data(i + 1, 17) If data(i + 1, 8) = "" Then Sheet17.Cells(j, 10) = data(i + 1