別怕,excel VBA其實很簡單——初部瞭解VBA

本著全面提升自己的原則,我們往數據分析師上再進一步——瞭解學習VBA。照例先找一本書自學,瞭解基本知識後,在考慮練習應用、積累和提高。我選擇的是《別怕》系列叢書。從網上找到學習的好經驗:“題目不用在網上找,對照書本案例練習也不是最優辦法。我個人實驗最佳辦法是:工作中需要重複進行的項目試著實現自動化。從最簡單的開始,從錄製宏修改宏開始。比方某常用的報表需要標題塗成固定顏色,固定字體。錄製宏試試看,對照宏再對照你手裡擁有的書相關知識把宏修改到可以重複使用的地步。然後逐步深入複雜的需要重複的工作進行自動化,然後會漸入佳境。”

別怕,excel VBA其實很簡單——初部瞭解VBA

一鼓作氣,提高自己

VBA的語言(Visual Basic for Applications),實際上VBA是寄生於VB應用程序的版本,結構非常類似。所以,大家大學時期如果計算機二級學的是VB的,就特別輕鬆了,當然C語言本身也和VB是思路想通的,所以不必害怕。我用間斷時間,首先閱讀了前兩章,初步瞭解了基本的語句結構,和一點注意點,稍作總結和分享!後面將持續跟進。

使用excel2010的話,打開VBA的方法:開發工具-代碼-Visual Basic,即可打開Visual Basic editor,選擇宏-編輯或創建也可以,其實宏是屬於一種公共的過程,是自己手動錄製的、用VBA代碼保存的程序,是最簡單的VBA程序,優點是方便用戶使用,即使不懂VBA也能很容易完成初步的功能、取代重複操作,缺點是不能互動、不夠智能和靈活(比如,不能循環和判斷)。但正是有了宏,也為我們學習VBA開了掛——實在學不出來想要的代碼,可以去試試錄製宏,在此基礎上改改看?哈哈。另外,開發工具-代碼-查看代碼,也可以很方便的打開編輯窗口。值得注意的是,我們過程一般保持在模塊中,雖然工作表裡也可以保存代碼。

一、基礎瞭解

1、定義數據類型,可用:dim 變量名 as 變量類型,也可以一次聲明多個,用逗號隔開:dim a as string, b as integer;

2、常見對象的引用:例如:application.workbooks("book1").worksheets("sheet2").range("A1")

workbooks("book1") ---工作簿

worksheets("sheet2") ---工作表

range("A1"),或cells(2,"H") ---單元格

表示方式:事實上,加了s後,這些對象也叫作集合,集合也是對象。

3、VBA的調試:將鼠標光標定位在程序的中間,然後可以按F8,能逐詞觀察程序的執行流程。

4、立即窗口,立即窗口是調試的好工具,有兩個功能:(1)執行單句的代碼;(2)顯示調試代碼時產生的結果。 執行方式:輸入完後,按回車鍵,就會彈出一個執行結果。例如在立即窗口中輸入:

a="你叫什麼名字"

b="我叫張三"

print a+b ---這裡,print 可以用問號?代替,效果相同

得到:你叫什麼名字我叫張三

5、VBA的調試:將鼠標光標定位在程序的任意句子中間,然後可以按F8,能逐詞觀察程序的執行流程。

二、VBA的基本語句結構:

首先,要了解的最常用語句:條件判斷語句if ... then ... elseif ... then ... else... end if語句,循環語句:for ... next 語句,do while ... loop 語句 ----解決循環變量終值不確定的問題,do until ... loop 語句 ---Do while Cells(row, "B") <> "",可以用Do Until Cells(row, "B") = ""代替,for each ... next 語句 ---不用定義循環條件,所以在數組或者集合裡循環,更靈活,with語句,goto語句。

舉例:

① 如果寫成一行:if ... then ... else ...,沒有end if,例如:

If Time < 0.5 Then MsgBox "現在是上午" Else MsgBox "現在是下午"

如果寫成塊狀的話:

If Time() < 0.2 Then

MsgBox "凌晨好"

ElseIf Time() < 0.5 Then

MsgBox "上午好"

Else

MsgBox "下午好"

End If ----注意:每個if必須有個 end if

② 在 Select Case 語句中,Is不是運算符,而是關鍵字!

使用 Is 關鍵字時,則可以配合比較運算符(除 Is 和 Like 之外)來指定一個數值範圍。例如:

Select Case Time

Case Is < 0.2

MsgBox "凌晨好"

Case Is < 0.5

MsgBox "上午好"

Case Else

MsgBox "下午好"

End Select

別怕,excel VBA其實很簡單——初部瞭解VBA

最後,一點心得

三,幾個注意點:

① Range、Cells都可以表達單元格/區域,但二者也有很明顯的區別:

Range 中文意思是“區域”,Cells 中文意思是“單元(格)”, Range通常用於區域 ,如Range("A1:B2")。一個單元格是一個特殊區域。

比如說,我們想表示A2:D3這個區域,用Cells()不能實現,那麼,用Range()就可以。

因此,單獨用Cells()只能表示某個單元格,而不能表示一個區域。

顯然,Range是可以兼容Cells的表達方式,但Range更傾向於區域有“固定”因素時使用,當代碼裡要使用行、列參數都是變量的單元格時,直接用Range來表達的話,就顯得不合適了,而Cells()在這時候,就是最好的選擇。

另外,VBA中常這樣寫:Range(cells(y1,x1),cells(y2,x2)).Select,就是指選中以cells(y1,x1)和cells(y2,x2)兩單元格為對角線的一個區域。

range("B1"),range("A1:A10")=100 --在單元格A1:A10中輸入數值100

cells(1,"H") ---前面是行,後面是列

這三句代碼是等效的,選中活動工作表的A1:E10單元格:

· range(cells(1,1),cells(10,5)).select

· range("A1","E10").select

· range(range("A1"),range("E10")).select

② with語句,用with來替代一些重複出現的字段,提高程序運行性能,也增加代碼的易讀性和清晰性。例如,設置單元格A1中字體的部分屬性:

sub fontset()

with worksheets("VBA").range("A1").font

.name ="楷書"

.size = 16

.bold = ture

end with

end sub

③ 排版技巧:

1、tab鍵:縮進

shift+tab鍵:取消一次縮進

注意,tab寬度默認為四個空格。可以在:工具-選項-編輯器中修改,我改成了2個空格。

2、長句子中,一句話沒說完,可以加上:空格+_,然後換行繼續寫即可。空格不可省!

3、註釋:以英文單引號開頭,可以在行的後面,也可以單獨一行。

④ 遇到問題,可以先錄製宏,然後在現成代碼的基礎上,學習實現自己個性化需求的代碼。


分享到:


相關文章: