工作中為什麼有必要學點VBA

2020-12-13 三壽的腦細胞

作者 l 濤哥

來源 l 三壽的腦細胞

授權轉載 l itker0110

01

寫在前面

VBA全稱是指Visual Basic for Applications,它是一個來自Microsoft的事件驅動的程式語言。 基本語法源自VB語言,和微軟的office辦公套件的內置函數完全兼容,現在它主要用於Microsoft Office應用程式,如Excel,Word和Access。

從office97開始,VBA作為MS的標準內置配置,彌補了excel內在的基本函數不足以支持的複雜計算,提供了一種相對輕量級的、所見即所得的解決方案,濤哥在21世紀初因內部工作需要(統計代碼行數記工作量)第一次接觸了VBA,並在以後的工作中多次出色的完成相關任務,甚至給濤嫂編的幾個小程序大大提升了她們的工作效率,還受到了時任行長的讚許,現在想來還歷歷在目。

02

VBA的應用

可能有人會說了,excel有非常豐富的內置函數庫,能滿足大多數場景的需要,VBA就沒必要學了吧,也對也不對,濤哥有個專輯專門介紹這些常用函數的使用方法,確實,對於簡單的場景或者說對於大多數對excel了解不深的人來說,學幾個函數覺得老神奇了,但是對於稍微複雜一點的場景就顯得無能為力,即使看起來挺簡單的場景。

下面我舉個例子:某小學的數學老師需要編排一套口算題,大概有50頁,每頁100道題,內容來源不詳,但有一個要求,那就是每頁的題不能有重複的,不同的頁可以重複。

這個要求不高,看似也不難,如果是你你會怎麼做?思考10秒鐘……

估計大部分人首先想到的是一頁頁對比,50頁5000道題,工作量可想而知,濤哥也搜腸刮肚的想了挺多方法,最終還是覺得用VBA來實現最快最準確。

下面這40行代碼就可以完成任務,它把每頁的重複題目標成紅色,並統計出共有多少道重複的題目。

03

找門兒VBA

打開VBA窗口的方法有三種,一種是在菜單中調出;第二種方法是在sheet頁點擊滑鼠右鍵調出;第三種方法是通過快捷鍵ALT+F11調出。

直線雙圖文字

VBA窗口

03

敲門兒VBA

幾個常用術語:

模塊

是編寫代碼的區域。可通過插入模塊的方式創建,插入模塊完成之後,就可以在模塊中編寫VBA代碼,代碼寫在一個過程(Sub)中。一個過程/子過程是一系列的VBA語句,指示要做什麼工作。

程序/過程

程序(也叫作過程)是作為一個整體執行的一組語句,它指示Excel如何執行特定的任務。執行的任務可能是一個非常簡單或非常複雜的任務。不過,把複雜的程序分解成小的程序是一個很好的做法。

程序的兩種主要類型,它們分別是:子程序(Sub)和函數(Function),下面就是其中的一段代碼:

函數

函數是一組可重用的代碼,可以在程序中的任何地方調用。這消除了一遍又一遍地編寫相同的代碼的需要。這有助於程式設計師將大型程序劃分為許多小型且可管理的功能。

除了內置函數外,VBA還允許編寫用戶定義的函數,並在 Function 和 End Function 關鍵字之間寫入語句。

例如下面的這個獲取文件名的函數就可以在不同場合使用call來調用。

04

入門兒VBA

要想學VBA,首先要知道宏,要學會錄製宏,這可以很好的助力vba代碼的編寫,下面演示一個添加宏的例子,就算VBA的入門禮兒了。

05

寫在最後

很多人一提到編程就覺得很神秘,一聽說程序猿就覺得是火星物種,其實看了此文會發現原來人人編程不是夢。

編程的本質是將實在世界轉化成虛擬的邏輯流將處理過程交給計算機,我們只需要知道有什麼,要什麼,中間的邏輯是什麼,也就是規則,規則是編程實現的基礎,退一步看,無非是一些條件判斷、循環,稍微再加上一些處理的技巧而已,這麼想你就不會對編程望而卻步了。

但也不是說誰都可以像編小曲兒一樣說編就編的,至少它在底層邏輯方面要求具備數學、計算機、哲學、邏輯學、美學、甚至心理學等學科的一些思路和思維方式的,也許有時你不一定意識得到。

不過任何事情到了高階都不會太容易,好在VBA讓你入門兒不成問題,它無需專門安裝,不用編譯,所見即所得,輕量級,與Excel的天然融合,語法的簡潔簡單,可視化等優勢,是很多像java,C語言等傳統的重量級程式語言無法比擬的,只需要稍微深入那麼一點點,將會讓你在數據的處理工作方面一個小時勝過別人一整天……

相關焦點

  • 「Python替代Excel Vba」系列(終):vba中調用Python
    學Python還不會處理Excel數據?最後,定義一個方法,讓vba調用。如下圖:這個方法的上方套上一個 xlwings 的裝飾器 @xw.func。表示這個方法需要註冊到 Vba 模塊中。如下圖:點一下上圖紅框部分,即可註冊你的 py 文件中的自定義方法到 vba 中。他大致原理是讀取 py 文件中的方法,然後相應在 vba 中生成名字和參數一樣的 vba 方法。
  • vba第十八課
    vba第十八課調用工作表函數在vba中我經常會對工作表的數據進行一些運算,雖然通過代碼進行循環或判斷也可以完成,但是通vba調用函數可以更簡單更直接進行運算提高代碼的運行效率,比如countif、sumif等需要進行判斷統計和求和的運算。
  • excel VBA是什麼?VBA編程入門教程
    excel vbaVBA對於沒有學過計算機語言的人來說會很陌生,會被它陌生的語句所嚇倒,從而放棄對它的學習。二、vba編程入門教程1、打開vba編輯器打開vba編輯器有下邊三種方法供大家使用:方法1:點擊excel菜單中的【開發工具】(如果沒有開發工具選項卡,請參考:
  • VBA編程理論學習之談
    所以,在實際應用中遇到哪些對象就對應去掌握這些對象的方法和屬性就可以,不需要完全學習。既浪費時間又沒有意義。鑑於對Excel的整理和學習,很有必要對這個月來的學習經過總結一下。有些是解決基本應用需求,也有一些是Excel vba基礎的對象以及屬性功能介紹。總的來說,這個月有一些進展,也有一些心得和知識積累。有幾篇比較不錯的文章持續得到展示和瀏覽,說明這方面還是做到了大多數關注。
  • Excel VBA 批量匯總多個工作表,您只需要在一瞬間完成
    今天主要和大家介紹的是,我們如何在Excel中使用vba代碼來完成多個工作表的匯總工作。在某些時候,我們經常需要處理如下圖的工作表數據匯總工作,將其他月份的數據統一匯總到同一個工作表中。大多數人都是用手動粘貼複製來完成這個重複性的工作,那麼在你學習了本篇,你就會用更高的效率去完成這個事情了。
  • vba第二十四課
    vba第二十四課工作表拆分工作表拆分是指把工作薄內的單個或多個工作表獨立成一個工作薄,此功能還是比較實用的。例:Sub 工作表拆分()Dim wk As Workbook, a!b = mypath & "\" & Sheets(a).Name獲得工作薄中工作表名和路徑並賦值給「B」Set wk = Workbooks.Add新建一個工作薄Workbooks("24.xlsm").Sheets(a).copy ActiveWorkbook.Sheets(1)複製工作薄名為24
  • 系統學點日語,很有必要.
    不過,也是時候收收心學點對自己有用的東西了。當你淘了美美的化妝品卻看不懂說明書的時候當你在朋友圈刷到別人輕鬆自由行的時候當你還在苦苦等著喜愛的日劇動漫熟肉的時候當別人用日語當作二外輕鬆考研拿高分的時候當別人憑著日語進了找到一份滿意的工作的時候....
  • 這世道,學點中醫很必要
    這也正是困擾我多年,以致10年前最終沒有繼續學下去的原因之一。但是現在淘寶網上,什麼都買得到,藥材又便宜,質量又好(我是買散藥、自備小天平,自己在家裡配藥的),網上論壇裡還有很多學友互相交流,更有大量的現實生活中求醫無門而渴求網診的網友。只要好好學習,根本不愁實踐機會。 【我對中醫的感悟】學中醫是一條很艱難的路。
  • VBA究竟值不值得審計學?
    但比較適合剛開始幹審計的前兩年學。為什麼?幹審計的都知道,前兩年會做大量重複枯燥的工作。比如:等等,都是幹著沒有屁眼的事情。有難度嗎?沒有難度?累嗎?非常累!為什麼建議如果要學就在你當審計助理的時候利用淡季的時間(如果有淡季的話)學?因為你學了,就直接能對你工作產生作用,幫助你批量高效完成重複性工作,甚至你還可以幫助到其他同事。
  • 做廣告,學點社會心理學很有必要
    這個原理稱為「如無必要,勿增實體」,即「簡單有效原理」。也就是說,沒有必要在不必要的位置投入大量精力。 運用到廣告領域,可以解讀為:好廣告往往只講一件事。比如一部手機可能有上百個功能,但廣告上翻來覆去只講自拍功能好。因為在媒體資源有限的情況下,要集中精力講最重要的部分,而不要贅述其他。
  • 一個小技巧,認識Word中的VBA
    再比如:在word文檔中可能要經常用到「Excel之家ExcelHome」,則每次輸入太過繁瑣,或許你會通過複製和粘貼來搞定,不過對於我來說,這也有點繁瑣了。現在你可以用Word vba來完成上述兩個功能(只是舉個例子,你可以編寫vba來完成更多的功能)。
  • vba第三十一課
    vba第三十一課合併單元格例:Sub 合併單元格()Application.DisplayAlerts = FalseDim a,bWith Sheets(1)a = .).Row獲取到最後一行的行號3、For b = a To 2 Step -1從最後一行開始往上合併並且到第二行就停止,原因是因為從上往下合併會不在功,假設a2與a3相等進行合併,當程序運行到a4時,a3已為空值(因為合併只保留第一個單元格的值),所以a3等於空,而a4的值為一班,不能合併,而由下往上合併不存在這個問題,所以一般合併單元格都是由下往上合併;為什麼到
  • vba第二十二課
    vba第二十二課工作表的運用實例在workbook對象中,有一個sheets集合,其成員是worksheet對象或chart對象。Vba中,經常在工作表之間轉換或對不同工作表中的單元格區域進行操作,通常有下面幾種方法:例:Sub 工作表1()Msgbox sheets(1).nameMsgbox worksheets(「成績表」).nameEnd sub
  • VBA聯想輸入法(二)深追尋
    '各位朋友,這個模塊可是很有用哦!Public Function py(TT) As Variant  '自定義函數,目的:把一組漢字變為一組漢字拼音的第一個字母。有了這個自定義函數作為核心環節,再加上上節課學到的基本知識,我們就可以做出來一個很炫酷的VBA聯想輸入法。
  • 學中醫的人有必要學英語嗎?
    但有人問了,我覺得有必要回答一下,應該是代表了一部分人的想法的。為什麼會有人提這個問題呢?因為現在有些復古的人,認為古代的中醫都是不懂英語的,所以現在的中醫學英語也是沒有用的,純粹是浪費時間。古代沒有電腦和智慧型手機,現在學中醫的人有必要學電腦手機嗎?古代沒有中醫藥大學,現在的中醫需要上大學嗎?古代的中醫沒有醫院,現代的中醫有必要有醫院嗎?諸如此類的問題,可以問一籮筐出來。
  • 如何用VBA代碼新建自選圖形,還不會,馬上來學
    No.1Excel中為我們提供了許多自選圖片的創建,可以極大地豐富表格表現形式,是日常工作當中一個重要的操作。一個優秀的表格,離不開圖形化的展示。下面我們來學習一下,如何利用vba代碼進行自選圖形的創建,刪除,修改等操作。No.2自定義圖形就是各種大小不同,顏色各異,形狀怪異的封閉區域。太多的類型也只是讓我們選擇不同的參數,所以這方面不是十分難理解,操作也方便。
  • VBA工作表事件實現「聚光燈效果」
    關注公眾號,帶你每日學習VBA,從枯燥機械的工作中解放雙手。每天學點excel vba一個乾貨滿滿的公眾號,期待你的關注
  • 兒童學日語有沒有必要
    兒童學日語有沒有必要。
  • Excel VBA流程圖解之For循環的本質 原來系統偷偷幹了很多事
    今天我們來看一下For循環,我相信所有學vba的朋友肯定要用For循環,但是你是否知道為什麼你3條語句就能成為一個循環呢?系統在語句的前後幫我做了那些事,下面這張圖說明了一切!!For 循環的語句形式計數器和步長值不一定是整數,但是建議始終用整數,用小數會造成一些不必要的麻煩,特殊時候可以用一下在for 和next之間任意位置 可以用exit for退出循環,用以在出現特殊情況的時候提前結束循環循環語句可以嵌套下一層循環,以及其他的完整vba
  • vba第二十一課
    vba第二十一課工作薄運用實例在一些跨工作薄的數據調取數據或多個工作薄中循環調取數據,那麼我們就要熟練掌握工作薄的代碼的書寫,只要運行程序就可以獲得數據,下面看一段代碼例:Dim wk As Workbook