手把手教你VBA

十天前,餅乾在大家的幫助下,找到了需要幫助的小夥伴

很多人關心

他們的問題解決了沒有?

Of course!

只是

餅乾在整理問題的過程中發現

雖然大家都知道

VBA 是解決 Excel 重複操作問題的最佳方式之一

但很多小夥伴苦於沒有代碼基礎而上不了手

那麼,餅乾就想通過這個案例和大家聊一聊

如何寫一段自己的VBA?

餅乾認為只要三步

  • 拆解問題

  • 尋找套路

  • 重組代碼

先一起看下小夥伴的問題

V001:葉女士 | 銀行

將一份EXCEL根據 "分支行" 欄位拆分成多份獨立的 EXCEL

拆解     

抽象一下葉女士的問題

將1份X行的Excel拆分成Y份

可以這樣拆解

  1. 根據分支行新建Excel

  2. 複製粘貼至對應Excel

當然,這樣拆解是寫不出代碼的!

一般來說,有效的拆解是這樣的

拆解到每個步驟,並標註出操作次數

用循環提取次數,每個操作只做一次

比如這樣:

1. 排序-1次

 對A列進行簡易排序

2. 新建文件夾-1次

 -文件夾路徑:當前路徑

 -文件夾名稱:拆分結果

對文件夾已存在的處理

-用戶選擇繼續或退出

3. 循環-Y次

1. 新建Excel-1次

2. 複製粘貼-1次

 複製粘貼表頭

 複製粘貼內容

-計算內容範圍

3. 保存並關閉Excel-1次

-保存的路徑:拆分結果

 -保存的名稱:具體分支行

當然

如果和餅乾一樣是老司機的話完全可以跳過

套路     

如果你拆分得比較好的話,你會發現

你的每個小目標早有人寫好了套路

什麼?

看不懂別人的代碼?

所有 "." 讀成 「的」

所有 "=" 讀成 「是」

是的,你已經吃下了翻譯魔芋

  • 排序

使用自定義排序,詳細的語法可以參考:

一張圖教你用VBA自定義排序

  • 新建文件夾

把路徑設在當前文件夾,就只有文件夾名字一個地方要改了

Dim iPath As StringniPath = ThisWorkbook.Path & "拆分結果"nMkDir iPathniPath = iPath & ""n

文件夾已存在時的處理

MsgBox對話框交互,也只有提示信息一個地方要改

Dim iPath As StringniPath = ThisWorkbook.Path & "拆分結果"nIf Dir(iPath, vbDirectory) = "" Thenn MkDir iPathnElseIf MsgBox("  目標文件夾已存在,若繼續操作將覆蓋同名文件,是否繼續?", vbOKCancel) = vbCancel Thenn Exit SubnEnd IfniPath = iPath & ""n

  • 循環框架

循環框架是這篇文章最難的地方了

難就難在這個套路不太常用

雙變數單循環框架,其實很適合處理區間長度的問題

j 是首行,i 是尾行,循環操作後 j = i + 1

j = 2nFor i = 2 To ActiveSheet.[A1].CurrentRegion.Rows.Countn If ActiveSheet.Range("A" & i) <> ActiveSheet.Range("A" & i + 1) Thenn do Sthn j = i + 1n End IfnNextn

下面兩段都是在這個循環內的

  • 新建/關閉Excel

新建、保存和關閉都只有一行

Dim iWkb As WorkbooknSet iWkb = Workbooks.AddniWkb.SaveAs iPath & ActiveSheet.Range("A" & i).ValueniWkb.Close Falsen

保存的時候記得加上文件名

  • 複製粘貼

使用了 Resize 進行了範圍的重選,複製粘貼可以參考

九九乘法表?三行就夠了!

ActiveSheet.[A1].Resize(1, 3).Copy [A1]nActiveSheet.Range("A" & j).Resize(i - j + 1, 3).Copy [A2]n

聰明的小夥伴一定能看出來

如果要拆分 N 列,只要把 Resize 的第2個參數改成 N 就可以了

而把 Resize 改成 EntireRow 就可以進行整行的拆分

重組     

套路根據拆解拼起來

屬於你的VBA代碼就出爐了

放大看效果(動圖裡只留了5個分支行)

在我的公眾號

餅乾數數 CookieData

回復

報表拆分

看看你和餅乾寫得是不是一樣

推薦閱讀:

VBA 如何把字元串轉換為可執行語句?
有哪些學習vba的好書推薦?現在學習vba是否有些過時?現在比較好的操縱word和excel的方式有哪些?
請各位VBA大神救命!?

TAG:MicrosoftExcel | VBA |