你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

跳槽那些事兒 Excel VBA專家 2019-06-10

四月初,《VBA代碼解決方案》開始結集推出,現在共推出了第一冊和第二冊,雖然這份資料內容大多來自於我的這個平臺,但反響仍然十分強烈,有了結集後的資料,朋友們的查找更加方便了,寫代碼的效率也大大提高。到現在已經有幾百人分享了此資料。為了給大家的提供方便,我會就此資料的使用方法給予說明,同時也是寫VBA代碼的方法的分享。

很久之前,我無意間體會到VBA的功效,並開始致力於學習及應用,經過二十多年來的摸索,在總結很多經驗的基礎上,結合自身的工作,小有收穫。如何學習VBA,如何利用VBA一直在有朋友詢問這個問題,我將陸續和大家分享我的經驗,和大家共同驗證一個道理:寫代碼並不難,成為代碼高手不不難。

這套《VBA代碼解決方案》系列資料中,我會以自己的經歷來告訴大家:如何去學習,如何掌握你想學習的這套知識體系。《VBA代碼解決方案》以實用為主,特別是廣大職場朋友,或多或少都可以從本書受益,甚至可以讓你的工作發生質的改變,我曾經幫助一位朋友將以前一天的工作不到五分鐘就完成了,這也正是VBA的魅力所在。

今天就帶大家利用這套教材完成一個簡單的程序製作:一個工作薄有三個工作表,分別為"數據1", "數據2", "數據3",其中每個工作表中以A列為基準,內部存在大量的重複數值,要判斷一下A列中哪些是重複的,重複的刪除掉。這在EXCEL中如果用手工操作將是十分困難的,而且非常容易出錯,跟緊我,讓VBA代碼來處理好了。

數據1的內容:

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

數據2的內容:

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

數據3的內容:

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

看到上面的內容很多的朋友會感到,自己的工作中就是有很多這樣的例子啊,就是工作表的排重啊。對了,就是的,這就是實用。

我們在做程序的時候,儘量不要去寫,要利用"積木化"的操作。為了實現上面的目的我們把整個過程分成如下的三步:就是要搭建三塊積木,這三塊積木分別實現三個步驟,

積木1實現步驟① :要遍歷上述的工作表

積木2實現步驟②:每個工作表要進行重複數據的刪除操作

積木3實現步驟③:結束運行後提示

我們先打開這個工作薄中VBE窗口模塊,一會兒我們放"積木":

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

"積木"也就是代碼,哪裡去找呢?這就是我們的教材了。首先打開《VBA代碼解決方案》的第一冊內容:

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

通過目錄,我們看到其中第18,第19講有專門的上述步驟①內容,好了我們任意選一個,作為我們的積木1.

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

我這裡選第18講,按下鍵聯,找到代碼並拷貝如下:

Sub MyShCount1()

Dim c,iAs Integer

Dim s As String

c = Worksheets.Count

For i = 1 To c

s = s & Worksheets(i).Name & Chr(13)

Next

MsgBox "工作簿中含有"& c &"個工作表,如下:" & Chr(13) & s

End Sub

注意,這時代碼還不是你的,還要在修正。

下面我們再看實現第二個步驟"每個工作表要進行重複數據的刪除操作"用哪一講的內容呢?如下圖:我們選取第24講作為我們的第二塊積木。

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

同樣拷貝代碼如下:

Sub MyDeleteRow()

Dim R As Integer

Dim i As Integer

With Sheets("sheet9")

R = .[A65536].End(xlUp).Row

For i = R To 1 Step -1

If WorksheetFunction.CountIf(.Columns(1), .Cells(i, 1)) > 1 Then

.Rows(i).Delete

End If

Next

End With

End Sub

代碼有了,我們下面修正代碼為我們所有;由於上述步驟②為每個工作表都要進行重複數據的刪除操作,是指步驟①中的循環內的動作,所以我們把步驟①中的代碼

s = s & Worksheets(i).Name & Chr(13)

改為步驟②的代碼,同時把一些變量修正,如下:

Sub MyShCount1()

Dim c, t As Integer '此處修正一個重複的變量i改為t

Dim s As String

Dim R As Integer

Dim i As Integer

'下面實現步驟①

c = Worksheets.Count

For t = 1 To c '變量設為t

'下面實現步驟②

With Worksheets(t) ' 將工作表的名稱修正

R = .[A65536].End(xlUp).Row

For i = R To 1 Step -1

If WorksheetFunction.CountIf(.Columns(1), .Cells(i, 1)) > 1 Then

.Rows(i).Delete

End If

Next

End With

Next

MsgBox "ok" '實現步驟③

End Sub

上述過程中第三塊積木過於簡接放單,不用再找了,直上就可以。最後形成我們的積木搭建,代碼就寫好了,複製到模塊中:

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

非常的簡單吧,下面看看我們的運行吧.

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

你想學寫VBA程序嗎?你想成為VBA高手嗎?請注意跟緊我

​ 這時你再看上面的三個數據表,沒有重複了,整個運行時間不到1秒鐘。

再次重申一點,做程序就如同搭積木,儘可能不要去寫代碼,你把必要的積木塊拿來,組合好,你要做的只是組合、修正即可,就這麼簡單。

我的《VBA代碼解決方案》中會有各式各樣的獨立的積木,給你分享,給你利用。當然你要弄懂每講的內容才能運用自如,才能組合、修正代碼。

相關推薦

推薦中...