excel為提供了很多好用的功能和函數(shù),但還是有很多工作無(wú)法用現(xiàn)有功能和函數(shù)批量完成,比如多個(gè)excel表格的合并與拆分,而借助VBA語(yǔ)言編寫(xiě)的宏代碼,這些看似無(wú)法批量處理或無(wú)法完成的事情,瞬間變得只是小菜一碟,也許你不懂VBA,也建議先收藏起來(lái)這些代碼備用。
(第1個(gè)示例中,演示了VBA代碼的使用方法,后面示例均和第1個(gè)類似,不再具體演示)
1、一次取消所有工作表的隱藏
Excel可以一次隱藏多個(gè)工作表,但取消工作表隱藏卻需要一個(gè)個(gè)的設(shè)置,用VBA編寫(xiě)一段代碼,一秒完成!
注意
要想使用VBA功能,需要把代碼粘貼到添加的模塊中,詳見(jiàn)動(dòng)畫(huà)演示
要想保存VBA代碼,需要把文件另存為xlsm格式文件,詳見(jiàn)動(dòng)畫(huà)演示
動(dòng)畫(huà)演示:
代碼:
Sub 取消隱藏()
For x = 1 To Sheets.Count
If Sheets(x).Name <> "總表" Then
Sheets(x).Visible = -1
End If
Next x
End Sub
Sub 隱藏()
For x = 1 To Sheets.Count
If Sheets(x).Name <> "總表" Then
Sheets(x).Visible = 0
End If
Next x
End Sub
2、根據(jù)模板批量生成日?qǐng)?bào)表
根據(jù)模板批量生成報(bào)表,沒(méi)什么好方法,只能一個(gè)一個(gè)的復(fù)制然后修改名稱。但這對(duì)VBA來(lái)說(shuō),只需點(diǎn)一下按鈕即可瞬間完成。
代碼:
Sub 生成報(bào)表()
Dim x As Integer
Dim sh As Worksheet
For x = 1 To 31
Set sh = Sheets.Add
With sh
.Name = x & "日"
Sheets("日?qǐng)?bào)模板").Range("1:15").Copy sh.Range("A1")
End With
Next x
End Sub
3、拆分工作表為單獨(dú)的excel文件
把當(dāng)前excel文件中除第1個(gè)工作外的所有工作表,均保存為單獨(dú)的excel文件到3月文件夾中。
拆分演示(在拆分過(guò)程中會(huì)畫(huà)面會(huì)停幾秒,請(qǐng)耐心等待)
代碼:
Sub 拆分表格()
Dim x As Integer
Dim wb As Workbook
Application.ScreenUpdating = False
For x = 2 To 32
Sheets(x).Copy
Set wb = ActiveWorkbook
With wb
.SaveAs ThisWorkbook.Path & "/3月/" & Sheets(x).Name & ".xlsx"
.Close True
End With
Next x
Application.ScreenUpdating = True
End Sub
4、合并多個(gè)Excel文件工作表到一個(gè)文件中
3月文件夾下有N張報(bào)表,要求把該文件夾中所有excel文件的第1個(gè)工作表合并到當(dāng)前的excel文件中,以單獨(dú)的工作表存放。
代碼:
Sub 合并表格()
Dim mypath As String
Dim f As String
Dim ribao As Workbook
Application.ScreenUpdating = False
mypath = ThisWorkbook.Path & "/3月/"
f = Dir(ThisWorkbook.Path & "/3月/*.xlsx")
Do
Workbooks.Open (mypath & f)
With ActiveWorkbook
.Sheets(1).Move after:=ThisWorkbook.Sheets(Sheets.Count)
End With
f = Dir
Loop Until Len(f) = 0
Application.ScreenUpdating = True