Excel巨集範例:8組簡短強大的VBA程式代碼

Excel巨集範例可以將日常工作自動化執行,涵蓋清空資料、刪除空白列、工作表管理與格式調整等,本文分享8組簡短強大的程式代碼,帶你體驗VBA的好處。

Excel巨集範例:8組簡短強大的VBA程式代碼

日常維護報表總是被重複的瑣碎動作吃掉時間嗎?其實,只要利用幾段簡短的 VBA 程式碼,就能讓效率翻倍!今天分享 8 個超強大的「微型巨集」,幫你省下大把青春。

1️⃣ 清空資料,完美保留公式

2️⃣ 一鍵秒殺 A 欄空白列

3️⃣ 自動新增日期工作表

4️⃣ 生成工作表目錄超連結

5️⃣ 自動適配欄寬與列高

6️⃣ 一鍵消滅全表合併儲存格

7️⃣ 隨心所欲重新凍結窗格

8️⃣ 一鍵匯出 PDF 丟到桌面

📝 贊贊結語

這 8 支巨集雖然短得不可思議,但全部都是為了解決「辦公室真實痛點」而生的。把零碎的滑鼠點擊時間省下來,才是我們學 VBA 真正的價值。建議存進「個人巨集活頁簿」,以後只要滑鼠點一下,煩人的動作瞬間搞定!

一、清空資料保留公式

在日常維護報表時,經常需要清除上一期輸入的數值,但又希望保留儲存格中的公式與格式。如果手動逐一辨識,很容易誤刪公式。這支巨集利用SpecialCells(xlCellTypeConstants)精準鎖定常數儲存格,只清除文字、數值、日期等人工輸入的內容,公式則完全保留。

Sub 清空資料保留公式()
    On Error Resume Next: Selection.SpecialCells(xlCellTypeConstants).ClearContents: On Error GoTo 0
End Sub

執行前先選取要清空的範圍,巨集會在選取區域內進行作業。On Error Resume Next的用途是避免當範圍內全為公式時,SpecialCells找不到常數儲存格而跳出錯誤訊息。

二、一鍵刪除A欄空白列

從系統匯出的資料或人工整理的清單,常常會夾雜空白列。若逐列手動刪除,不但費時,也容易遺漏。這支巨集對整個A欄執行SpecialCells(xlCellTypeBlanks)找出所有空白儲存格,再一次刪除整列,避免由上往下刪除時因列號位移造成的跳行問題。

Sub 刪除A欄空白列()
    On Error Resume Next: Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete: On Error GoTo 0
End Sub

此巨集以A欄作為判斷基準。若A欄有資料但其他欄為空,那列仍會保留,邏輯上等同於「A欄有資料才算有效列」。若A欄完全沒有空白儲存格,SpecialCells會報錯,也會由On Error Resume Next自動略過。

三、新增工作表並以日期命名

建立每日或每月紀錄工作表時,通常需要先新增工作表,再手動輸入日期名稱。這支巨集直接在最後一張工作表後新增新表,並以當天日期命名為yyyymmdd格式。例如2025年5月1日執行時,工作表名稱會自動設定為20250501。

Sub 新增日期工作表()
    Sheets.Add(After:=Sheets(Sheets.Count)).Name = Format(Date, "yyyymmdd")
End Sub

如果同一天執行兩次,會因工作表名稱重複而出現錯誤。若需要防呆,可在新增前先檢查是否已有同名工作表再決定是否建立。

四、在第一張表建立工作表目錄

當活頁簿內的工作表越來越多時,要找到特定工作表往往需要不斷捲動標籤列。這支巨集會自動清空第一張工作表,建立「工作表目錄」標題,並為每張工作表建立超連結,點擊即可跳到該表的A1儲存格。

Sub 工作表目錄()
    Dim ws As Worksheet
    
    With Sheets(1)
        .Cells.Clear
        .[A1] = "工作表目錄"
        
        For Each ws In Worksheets
            ' 使用標準的區塊 If 結構
            If ws.Name <> .Name Then
                .Hyperlinks.Add .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1), "", "'" & ws.Name & "'!A1", , ws.Name
            End If
        Next ws
    End With
End Sub

超連結的SubAddress格式為'SheetName'!A1,這是Excel內部超連結的標準寫法。每次執行都會重新建立整份目錄,因此新增或刪除工作表後只需再執行一次即可更新。

五、一鍵自動適配欄寬列高

貼入外部資料或調整儲存格內容後,常會出現欄寬不足或列高不合適的情況。這支巨集對整張工作表執行AutoFit,讓所有欄寬依內容自動調整,同時列高也會依文字長度與換行設定自動更新。

Sub 自動調整欄寬列高()
    Cells.EntireColumn.AutoFit: Cells.EntireRow.AutoFit
End Sub

AutoFit是依儲存格內容的顯示寬度計算。如果工作表中有合併儲存格,欄寬可能無法正確計算,因此建議先取消合併後再執行。

六、一鍵去除全表合併儲存格

合併儲存格雖然在版面呈現上方便,但會影響排序、篩選與樞紐分析。整理資料結構時,全面取消合併往往是必要的前置作業。這支巨集會對整張工作表執行Cells.UnMerge,一次解除所有合併。

Sub 取消合併()
    Cells.UnMerge
End Sub

取消合併後,原本的內容會保留在左上角儲存格,其餘儲存格恢復為空白。若需要將值填滿原本合併區域,可再搭配選取空白儲存格並填入上一列資料的方式完成。

七、以選取儲存格為準凍結窗格

凍結窗格是瀏覽大型報表時常用的功能。如果想調整凍結位置,通常需要先取消再重新設定。這支巨集把兩個動作合併為一個步驟,先解除既有凍結,再立即依目前選取的儲存格重新設定凍結分界。

Sub 凍結窗格()
    ActiveWindow.FreezePanes = False: ActiveWindow.FreezePanes = True
End Sub

執行前先選取想作為凍結分界右下角的儲存格。例如選取B2時,第一列與A欄會同時凍結。若不先解除凍結直接設定,原本的分界點不會更新。

八、匯出目前工作表為PDF至桌面

將報表轉成PDF分享給沒有Excel的同事,是辦公室常見需求。這支巨集透過WScript.Shell取得使用者桌面路徑,再以工作表名稱作為檔名,直接將目前工作表匯出為PDF存放到桌面。

Sub 匯出PDF到桌面()
    ActiveSheet.ExportAsFixedFormat xlTypePDF, CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" & ActiveSheet.Name & ".pdf"
End Sub

SpecialFolders("Desktop")可以自動取得不同使用者的桌面路徑,因此不需要手動設定路徑。不過這個方法僅適用於Windows環境;在Mac系統中需改用其他方式取得桌面位置。

心得

這八支巨集看起來都很短,有些甚至只有一行,但每一支都對應到日常工作中的實際需求。像是清空資料保留公式、刪除空白列或凍結窗格,都是在處理Excel資料時經常遇到的情境。

如果每次都依賴手動操作,時間會在細碎動作中不斷流失。將這些巨集集中放在個人增益集或常用活頁簿中,搭配快速鍵或功能區按鈕,需要時一鍵執行,才是真正發揮VBA提高效率的價值。

同時,程式碼保持精簡也有好處。閱讀容易、理解快速,日後若需要修改或擴充功能,也不必花時間重新研究整段程式,這正是工具型巨集最理想的設計方式。

延伸閱讀

贊贊小屋相關部落格文章:

載入中...

發布日期:

贊贊小屋VBA教學中心:

Excel巨集執行Excel巨集程式Excel巨集程式碼Excel VBA教學VBA教學Excel巨集範例VBA UserFormVBA VLOOKUP

VBA課程推薦:零基礎入門進階的20小時完整內容

VBA課程:20小時完整入門進階,職場及投資應用
分類:Excel巨集範例、VBA入門