VBA工作表按月份排序

Excel工作表沒有按照月份順序排列,難道只能手動拖曳嗎?以下帶你使用VBA將工作表按月份排序。

輸入巨集
※輸入以下指令※
Sub 工作表按月份排序()
Dim i As Integer, j As Integer
For i = 1 To Worksheets.Count – 1
For j = i + 1 To Worksheets.Count
If CInt(Replace(Worksheets(i).Name, “月”, “”)) > CInt(Replace(Worksheets(j).Name, “月”, “”)) Then
Worksheets(j).Move Before:=Worksheets(i)
End If
Next j
Next i
End Sub

執行巨集
點選「開發人員」-「巨集」或按下「Ctrl」+「F8」快捷鍵,並「執行」巨集。

執行後則將工作表按月份排序,如以下工作表1~12月按順序排列。

語法說明
Dim i As Integer, j As Integer
‘宣告變數「i」與「j」型態為「整數」。
For i = 1 To Worksheets.Count – 1
‘使用For迴圈, i 從 1 到(工作表總數 – 1)
For j = i + 1 To Worksheets.Count
‘使用For迴圈, j 從( i + 1 )到(工作表總數 – 1)
Replace(Worksheets(i).Name, “月”, “”)
‘將月變為空值,如12月→12,後續才可按照數字大小排列而不是以字串
CInt(Replace(Worksheets(i).Name, “月”, “”))
‘將1~12月變成1~12,再將其轉為「整數」資料型態,才能以整數按大小排列。
If CInt(Replace(Worksheets(i).Name, “月”, “”)) > CInt(Replace(Worksheets(j).Name, “月”, “”))
‘當轉為「整數」資料型態後,若第 i 張工作表比第 j 張工作表大的話,則執行以下
Worksheets(j).Move Before:=Worksheets(i)
‘將第 j 張工作表移動至第 i 張工作表前面
‘綜合以上則是先從第一張工作表與第二工作表比順序,順序前者排至第一張,再與後面工作表比順序,持續比較則可完成排序。