VBA入門教程

作者:劉博文

鏈接:Excel VBA 如何快速學習?

來源:知乎

著作權歸作者所有,轉載請聯繫作者獲得授權。

VBA 傻瓜入門教程 (裝逼指南 撩妹手冊)

一、什麼是VBA(Visual Basic for Applications)

就是用代碼來代替人工操作Excel,說白了就是編程,編程,編程(但不難,請往下看,給你一個不同的Excel世界)

二、為什麼要學VBA

節約時間,解放雙手,釋放洪荒之力,在短暫的人生中裝次逼

三、VBA入門教程(以Excel2013為例)

1.調出 "開發工具" 選項卡

檢查工具欄是否有 "開發工具" 選項卡如果沒有看下面:

文件 —— 選項 —— 自定義功能區 :勾選右側的開發工具

2.插入一個按鈕

上圖的開發工作下的控制項處 點擊插入 選第一個按鈕:

此時按住滑鼠左鍵 在表格任意地方拖拽 拉出一個按鈕 此時會彈出對話框 點擊新建:

點擊新建之後 竟然彈出了下面這個東西 握草 這個是什麼 從來沒見過

看到Sub 按鈕1_Click() End Sub 中的按鈕1_Click了嗎,這就是上一步我們新建的按鈕的名稱,對照上張圖片

Sub xxx()n代碼塊nEnd Subn

這就是一個宏 xxx為宏名 代碼塊區域寫代碼

3.編寫代碼

VBA代碼編程我們還沒學 這裡我先用個簡單的例子給大家展示一下VBA的應用

Sub 按鈕1_Click()n MsgBox ("Hello VBA")nEnd Subn

在中間添加一行代碼:

MsgBox ("Hello VBA")n

然後回到Excel界面 點擊剛剛拖拽出的按鈕:

現在我們已經走完了VBA的所有步驟。

總結一下入門的步驟:

1.拖拽出一個按鈕

2.添加一行代碼

3.點擊按鈕 運行代碼

四.VBA裝逼教程(以Excel2013為例)

從第三步我們已經知道了VBA的大概流程了(雖說只是最簡單的) 下面就是要進入實用階段了 示例從簡單到複雜

每個示例都有代碼講解 示例之間重複的代碼只講解一次

########################################################################

## 示例一:將兩個單元格的內容進行四則運算(雖說這用Excel兩秒鐘就可以解決)

########################################################################

運算符可以選擇 + - * / 有關下拉框的製作百度之(這個不能裝逼 所以我不講) 然後點擊按鈕 得出結果

另外說一下怎麼輸入 + 號 = 號 只要在輸入之前輸入一個單引號即可: 』+ 表示字元串 + 單引號就是表示我們輸入的文本是字元串的加號 而不是操作運算符的 +

1.編寫代碼

我們需要獲取B4單元格的內容和D4單元格的內容以及C4單元格的運算符號 先看效果

當更改C4中的操作符或者更改B4、D4中的數字時 點擊按鈕1 就會得出結果

代碼如下:

Sub 按鈕1_Click()n 聲明一個字元串 用來表示運算符 注釋使用 n Dim operator As Stringn n 將C4單元格的運算符 賦值給 operatorn operator = Cells(4, 3)n n If 語句進行判斷n n If operator = "+" Thenn Cells(4, 6) = Cells(4, 2) + Cells(4, 4)n End Ifn n If operator = "-" Thenn Cells(4, 6) = Cells(4, 2) - Cells(4, 4)n End Ifn n If operator = "*" Thenn Cells(4, 6) = Cells(4, 2) * Cells(4, 4)n End Ifn n If operator = "/" Thenn Cells(4, 6) = Cells(4, 2) / Cells(4, 4)n End Ifn nEnd Subn

代碼講解:

Sub 按鈕1_Click()nnEnd Subn這個是固定的 就是說我是個宏 裡面包含的是代碼n

聲明一個字元串 用來表示運算符 注釋使用 nDim operator As Stringnn單引號用來表示注釋(是英文狀態下的單引號 English English English)nDim 用來申明變數noperator就是變數名nAs 就是"是"nString 字元串類型n放在一起就是:聲明了一個字元串類型的變數,這個變數叫做operatornn變數類型包含以下幾種(只是入門教程 我不寫全 只寫容易記的)n字元串型 String 就是咱們整天表示漢字 英文的那個類型n整數型 Integer 就是咱們表示 1 2 3 整數的那個類型 所以如果咱們想聲明一個age來表示一個人的年齡就可以這樣 Dim age As Integern日期型 Daten貨幣型 Currencyn……n就是開始選項卡哪些咱們平常用來更改單元格類型的東西n

將C4單元格的運算符 賦值給 operatornoperator = Cells(4, 3)nn單元格的表示就是Cells(行號,列號) 如果你想表示A1單元格就是 Cells(1,1) 切記不是Cells(A,1) 都要用數字表示n這行代碼就是獲取了單元格C4中的運算符 然後把它賦值給了剛剛聲明的變數 operator 現在operator可能是 + - * / 中的任一個n

If operator = "+" Thenn Cells(4, 6) = Cells(4, 2) + Cells(4, 4)nEnd Ifnn我們先看:nIf xxx = xxx Thenn 代碼塊nEnd Ifn這個表示If判斷語句: n如果 是真的 然後 n 執行代碼n結束如果nnCells(4, 6) = Cells(4, 2) + Cells(4, 4)n這句就是把兩個單元格相加 然後賦值給另外一個單元格n n

示例一到此完成

###########################################################################

## 現在來個有難度的 不要求大家掌握 只是為了引出後面的教程

###########################################################################

###########################################################################

## 示例二 將3個Excel工作簿的第一張工作表複製到第四個工作簿中

###########################################################################

1.情景模擬

現在你收到了100個人交上來的個人信息表 你要做的只有一件事 把這100個工作薄打開 複製工作表到一個總的工作薄中 也就打開100次 關閉100次Excel 但也許你公司的員工會上千人

2.先上結果

本來目錄結構:

要把excel1/excel2/excel3的第一個sheet複製到匯總表中

代碼運行結果

Sheet1是匯總表本來就有的

3.編寫代碼

這次代碼和上次就不一樣了

Sub 按鈕1_Click()n Dim path, file, count, wb As Workbookn con 表示單元格內容n Dim i, conn 凍結屏幕,以防屏幕抖動n Application.ScreenUpdating = Falsen 在這裡輸入你的路徑,即你存放工作薄的文件夾n path = Application.ActiveWorkbook.path & ""n file = Dir(path & "*.xls*")n Do While file <> ""n If file <> ThisWorkbook.Name Thenn Set wb = Workbooks.Open(path & file)n count = ThisWorkbook.Sheets.countn 選中要複製的工作表n wb.Sheets(1).Selectn 將要複製的工作表複製到匯總工作簿n wb.Sheets(1).Move After:=ThisWorkbook.Sheets(count)n wb.Close savechanges:=Falsen End Ifn n file = Dirn Loopn Application.ScreenUpdating = TruenEnd Subnn咦 握草 這是什麼 怎麼沒數字 好像就還有個1我還認識 這是代碼嗎 好的 咱們一句一句的解釋n

Sub 按鈕1_Click()nnEnd Sub n這個就不講了……n

Dim path, file, count, wb As Workbooknn聲明了四個變數 path/file/count/wbn這種是簡便寫法 每個變數用逗號分開n為什麼path fill count 這三個變數沒有As xxx ? 是可以不寫的 但最好寫上他們的類型nwb As Workbook 這個是什麼 這個就是工作薄類型 wb表示的是一個工作薄n

Dim i, con n聲明了兩個變數 沒什麼好說的n

凍結屏幕,以防屏幕抖動nApplication.ScreenUpdating = Falsenn代碼這麼長誰記得住? 沒事 這種查手冊就行 不需要記 只知道有這個東西就行n

在這裡輸入你的路徑,即你存放工作薄的文件夾npath = Application.ActiveWorkbook.path & ""nn握草 這句這麼複雜nnApplication:就是指Excel這個應用 它包含一切 知道什麼叫App吧nActiveWorkbook:Workbook就是工作薄 excel可以同時打開多個工作薄 那ActiveWorkbook是什麼意思呢 就是你正在操作的這個工作薄 類比word 我們可能同時打開了 N 個文檔 但處於編輯狀態的同時最多只有一個word文檔 這句話就是Excel打開的應用中 目前處於可編輯狀態 也就是在最上面的工作薄 npath:就是工作目錄 你打開的這個工作薄在磁碟上可能是 D:Excel…… 就是指這個目錄文件夾 注意是包含工作薄的文件夾 不是工作薄的名字n&:是字元串連接符 比如你想把兩個單元格中的字元串連在一起 比如示例一中 Cells(4, 6) = Cells(4, 2) & Cells(4, 4) 則Cells(4,6) = 34 而不是3 + 4 = 7 n

file = Dir(path & "*.xls*")npath & "*.xls*":上面剛講了 & 的用法 這裡就是在你打開的這個工作薄所在的文件夾下 尋找後綴名為 *.xls* 的Excel文件 * 表示通配符 因為Excel文件的後綴名可以是.xls 和 .xlsx 所以用 *.xls* 來表示nn這句話的意思是取出文件夾下第一個excel文件的文件名 比如 lbw.xlsxn

Do While file <> ""n If file <> ThisWorkbook.Name Thenn Set wb = Workbooks.Open(path & file)n count = ThisWorkbook.Sheets.countn 選中要複製的工作表n wb.Sheets(1).Selectn 將要複製的工作表複製到匯總工作簿n wb.Sheets(1).Move After:=ThisWorkbook.Sheets(count)n wb.Close savechanges:=Falsen End Ifn n file = Dirn LoopnnnDo While file <> ""n 代碼塊nLoopnn這個表示 While 循環 意思是如果上一步的文件名不為空 就執行下面的代碼n

If file <> ThisWorkbook.Name Thenn Set wb = Workbooks.Open(path & file)n count = ThisWorkbook.Sheets.countn 選中要複製的工作表n wb.Sheets(1).Selectn 將要複製的工作表複製到匯總工作簿n wb.Sheets(1).Move After:=ThisWorkbook.Sheets(count)n wb.Close savechanges:=Falsen End IfnnIf 語句已經講過了nn<> 表示不等於nThisWorkbook 表示這個代碼寫在的那個工作薄 和 activeWookbook 不同n

Set wb = Workbooks.Open(path & file)npath 與 file 已經講過 分別表示路徑和文件名 & 也已經說了 表示連接符 path & file 就是完整的文件路徑名nWorkbooks.Open() 表示要打開excel工作薄nwb是剛開始聲明的變數 但是這個地方為什麼要用 Set 因為wb不是普通的變數類型n

count = ThisWorkbook.Sheets.countn這句話表示我們寫代碼的這個Excel工作薄 工作表的數量 然後賦值給countn

wb.Sheets(1).Selectn選中wb這個工作薄的第一個sheet n握草 有點亂!nThisWorkbook 指的是咱們把代碼寫在的那個工作薄 也就是裡面有按鈕的那個工作薄 也就是匯總表這個工作薄 nwb呢 是咱們用VBA打開的另外一個工作薄 他們兩個不是同一個 咱們正是要把wb中的第一個工作表複製到ThisWookbook中n

wb.Sheets(1).Move After:=ThisWorkbook.Sheets(count)n這句代碼不解釋 就是複製給了ThisWorkbookn

示例二到此結束

示例二就只實現了一個功能 複製工作表 怎麼就那麼複雜呢 初學者看不懂沒關係 先了解一下 後面的例子會介紹什麼是Application Workbooks Workbook Worksheets Worksheet Range Cells ……

後面有時間更……
推薦閱讀:

【VBA初學者教程】- 第一章 VBA入門知識:引用若干單元格區域
Excel VBA入門(一)數據類型
如何用VBA語言同一EXCEL中不同sheet中的列數據按列順序導入到一個sheet中去?
【VBA初學者教程】- 第一章 VBA入門知識:使用Excel對象的事件
用excel VBA 可以做哪些簡單的小遊戲?

TAG:MicrosoftExcel | VBA |