前幾天同學問我會不會巨集,我先跟他說會,但其實我不知道是什麼,哈哈。於是我就上網查了了一下。
Excel的巨集可以錄製動作,讓電腦幫你做一些重複的事情。但很多重複的事情不太可能錄得出來,所以微軟提供了一個語言:VBA,讓我們可以直接將動作分解一個一個,並從中做修改。
哦~我懂了!就是用程式語言控制Excel來執行動作嘛!
剛好我有學過一點java,所以接下來就來研究看看。
題目
同學是要我幫他做一個Excel檔,三欄為一種顏色,然後要1000欄。
先想一下要怎麼做
透過錄製巨集,我可以直接取得執行畫底色動作的程式碼,不用自己寫。因為要做1000欄,所以我需要用到迴圈。因為要顏色不斷變化,所以我需要用到亂碼,剩下的就見招拆招。
程式碼
Sub 巨集1()
For i = 1 To 1000
Rows(([A2]) & ":" & ([A2] + 2)).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = RGB(255 * Rnd(), 255 * Rnd(), 255 * Rnd())
.TintAndShade = 0
.PatternTintAndShade = 0
End With
[A2] = [A2] + 3
i = i + 1
Next i
End Sub
程式碼解析
1)欄位選取
Rows(([A2]) & ":" & ([A2] + 2)).Select
Rows是欄的物件,格式是Rows(數字 : 數字),作用是選取範圍
Ex:Rows(1:3)就是選1~3欄
執行選取動作(.Select)
***這裡有一個小插曲,本來我隨便設一個變數i,想要直接放入Rows裡面,但這個物件好像只接受儲存格的屬性,所以我就放一個[A2]的儲存格,沒想到真的可以***
2)執行動作(畫底色)
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = RGB(255 * Rnd(), 255 * Rnd(), 255 * Rnd())
.TintAndShade = 0
.PatternTintAndShade = 0
End With
VBA的動作會用With~End With包起來
.Color = RGB(255 * Rnd(), 255 * Rnd(), 255 * Rnd())
.Color顏色,用RGB三原色物件(數字 , 數字 , 數字)
Rnd()是亂數(0<=1),因為色碼是0~255,所以我就乘上255。,得到我要的範圍。亂數放在顏色後面,就會有顏色一直換的效果。
3)重複畫底色(寫迴圈)
For i = 1 To 1000
~~~~~~~~~
[A2] = [A2] + 3
i = i + 1
Next i
For i = 1 To 1000,這個迴圈缺點是我要先知道我要跑幾次。
[A2] = [A2] + 3
i = i + 1
Next i
每次動作執行完,[A2]+3 → 下三欄儲存格
i = i+1
Next i
執行下一次迴圈。
效果
根據以上的思路和程式碼撰寫,最後就變成同學要的這個樣子:
看起來超像彩色千層蛋糕
結語
這是我第一次寫VBA,雖然有達到我要的效果,但總覺得漏洞百出XD
不得不說,學完一個新的語言之後,學其他的就會比較快,而且時間久了,真的會體悟到程式設計的邏輯與魅力,很多時候都讓我大吃一驚,也讓我由衷佩服軟體工程師的腦袋。
完成程式的時候,總有很大的成就感,不枉費自己花很多錢和心力在學習程式上。做為一個非本科生,能學多少算多少,主要還是希望可以訓練自己的邏輯思維,以及解決事情的能力。
這次因為同學所引發的契機,讓我知道還有VBA可以玩XD過一陣子比較閒之後,我再來慢慢研究,並將心得放上來。