search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

[VBA巨集筆記]每三欄同一個顏色反色

前幾天同學問我會不會巨集,我先跟他說會,但其實我不知道是什麼,哈哈。於是我就上網查了了一下。

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 巨集 三欄為一顏色

看起來超像彩色千層蛋糕

結語

這是我第一次寫VBA,雖然有達到我要的效果,但總覺得漏洞百出XD

不得不說,學完一個新的語言之後,學其他的就會比較快,而且時間久了,真的會體悟到程式設計的邏輯與魅力,很多時候都讓我大吃一驚,也讓我由衷佩服軟體工程師的腦袋。

完成程式的時候,總有很大的成就感,不枉費自己花很多錢和心力在學習程式上。做為一個非本科生,能學多少算多少,主要還是希望可以訓練自己的邏輯思維,以及解決事情的能力。

這次因為同學所引發的契機,讓我知道還有VBA可以玩XD過一陣子比較閒之後,我再來慢慢研究,並將心得放上來。



熱門推薦

本文由 elsa02232492pixnetnetblog 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦