VBA已經過時了嗎?


完全沒有。

VBA雖然被計算機專業學生鄙視,但在金融領域很強大,因為彭博、路透都可以跟excel對接,實時取到數據,這是最最簡單的一種獲取數據並引入模型的方法了。但受限於excel本身函數有限,且沒辦法緩存數據和支持多維數組,這時候就需要VBA來幫忙。有人會覺得C++或者python更洋氣,可是要知道光是把excel中的數據與C++對接就要一陣子,而且還有什麼語言比VBA操作excel讀寫和工作表之間的運算更方便的呢?

所以具體問題具體分析,在我的工作環境中,1)彭博路透跟excel自由對接、2)不可能讓公司出錢安裝其他軟體、3)就算免費軟體也不能隨便安裝。綜上VBA就是最好的編程語言,其他的連挑戰的機會都沒有。

//2015年9月新增內容

一個編程語言的發明是有意義的,VB當年的出現可是轟動性的,號稱「西雅圖夜空的雷電」。2000年前那基本是叱吒風雲,但隨著軟體工程等專業的發展,VB一些缺點也顯露了出來,說白了就是VB有一些簡單。。學起來簡單,用起來簡單,但硬體性能突飛猛進,軟體肯定不滿足於一些簡單的功能了吧,就好比你不能玩掃雷和空當接龍一輩子吧。大型開發上面VB就跟不上時代的節奏了。

於是VB就變成今天人們心中的這樣了。但是說實話,你用excel,還能指著用excel編個遊戲不成。。雖然真有大神這麼做。但大部分人所需要的功能,要達到的目標,VB語言已經可以應付了,所以VB過時不了的,放心吧


沒有過時呀。有個小夥伴一直問我考勤系統腳本的代碼。我在這裡分享出來。

寫這個腳本的背景是CTO和HR商量了下,整個信息中心和業務部門分開做考勤規則。

我們的考勤系統只是記錄打卡,但不會判斷遲到、漏打卡、加班等等的規則。

之前也是一個程序員幫HR寫的程序,此次複雜度加倍。CTO問各位研發總監有木有人要開發下。

無人回應。

做數據的我,弱弱的舉了小爪,說我可以幫忙寫下。

花了半天就寫好了,還設想了各種遇到的情況。HR驚嘆於我的速度,說上個程序員花了兩周...我汗顏。

HR們,如果還在為考勤煩惱,以下可以下載下來

百度網盤:鏈接:http://pan.baidu.com/s/1pLuRwoj 密碼:w47g

以下截圖,我的代碼都詳細寫好了注釋。大家可以按照注釋修改

代碼如下:

Sub Organize_Attendance()

On Error Resume Next

Application.ScreenUpdating = False

Dim Cus_FirstDay As Date, Cus_Lastday As Date, abcd As Date, Cus_Days, St2_Row, Arr_Pointer, Arr_Pointer2

Dim Sht, St1, St2, St3

Dim Arr(0 To 31000, 1 To 14), Date1, Date2, Date3, Record, Date4, Name

"整理表頁名稱,用於判斷是否缺失

txt = ""

a = 0

b = 0

c = 0

For Each Sht In Sheets

If Sht.Name = "控制表格" Then a = 1

If Sht.Name = "出勤記錄" Then b = 1

If Sht.Name = "輸出表格" Then c = 1

Next

"查找是否有「控制表格」和「出勤記錄」兩張表

If a &<&> 1 And b = 1 Then

txt = "沒有找到控制表格表頁"

ElseIf a = 1 And b &<&> 1 Then

txt = "沒有找到出勤記錄表頁"

ElseIf a &<&> 1 And b &<&> 1 Then

txt = "沒有找到控制表格、出勤記錄表頁"

End If

If txt &<&> "" Then

MsgBox (txt)

Exit Sub

End If

"如果有輸出表格,則進行清空,如果沒有新建一個

If c = 1 Then

Sheets("輸出表格").Cells.Delete

Else

Sheets.Add

ActiveSheet.Name = "輸出表格"

End If

Set St1 = Sheets("控制表格")

Set St2 = Sheets("出勤記錄")

Set St3 = Sheets("輸出表格")

"定義表頭內容

Arr(0, 1) = "工號"

Arr(0, 2) = "姓名"

Arr(0, 3) = "單位名稱"

Arr(0, 4) = "考勤日期"

Arr(0, 5) = "班次"

Arr(0, 6) = "上班"

Arr(0, 7) = "下班"

Arr(0, 8) = "是否跨天"

Arr(0, 9) = "在司時間"

Arr(0, 10) = "是否足夠9小時"

Arr(0, 11) = "考勤是否合理"

Arr(0, 12) = "是否缺勤"

Arr(0, 13) = "備註"

"定義節假日、倒休等特殊日期字典

Set Date1 = CreateObject("Scripting.Dictionary")

Set Date2 = CreateObject("Scripting.Dictionary")

Set Date3 = CreateObject("Scripting.Dictionary")

For Each Rng In St1.Range("H2:H" St1.Range("H65536").End(xlUp).Row)

Date1.Add Rng.Value, Rng.Value

Next

For Each Rng In St1.Range("I2:I" St1.Range("I65536").End(xlUp).Row)

Date2.Add Rng.Value, Rng.Value

Next

For Each Rng In St1.Range("J2:J" St1.Range("J65536").End(xlUp).Row)

Date3.Add Rng.Value, Rng.Value

Next

"記錄出勤記錄行數

St2_Row = St2.Range("A65536").End(xlUp).Row

"定義月份第一天,當月天數

"Cus_FirstDay = DateSerial(St1.[b2].Value, St1.[b3].Value, 1)

"Cus_Lastday = DateSerial(St1.[b2].Value, St1.[b3].Value + 1, 0)

For i = 2 To St2_Row

abcd = St2.Cells(i, 4).Value

If Cus_FirstDay = #12:00:00 AM# Or Cus_FirstDay &> abcd Then

Cus_FirstDay = abcd

End If

If Cus_Lastday = #12:00:00 AM# Or Cus_Lastday &< abcd Then

Cus_Lastday = abcd

End If

Next

Cus_Days = DateDiff("d", Cus_FirstDay, Cus_Lastday) + 1

"定義當月班次數組

ReDim Date4(1 To Cus_Days, 1 To 2)

For i = 1 To Cus_Days

a = DateAdd("d", i - 1, Cus_FirstDay)

Date4(i, 1) = a

If Date1.Exists(a) Then

Date4(i, 2) = "三倍節假日"

ElseIf Date2.Exists(a) Then

Date4(i, 2) = "周末"

ElseIf Date3.Exists(a) Then

Date4(i, 2) = "工作日"

ElseIf WorksheetFunction.Weekday(a, 2) = 6 Then

Date4(i, 2) = "周六"

ElseIf WorksheetFunction.Weekday(a, 2) = 7 Then

Date4(i, 2) = "周日"

Else

Date4(i, 2) = "工作日"

End If

Next

"定義員工工號字典

Set Name = CreateObject("Scripting.Dictionary")

"定義當前員工第一行指針

Arr_Pointer = -Cus_Days

"開始按照出勤記錄每行循環處理數據,記錄工號、姓名、公司、班次、日期、上下班時間、是否跨天的數據

For i = 2 To St2_Row

"將出勤記錄當前行轉換為數組

Record = WorksheetFunction.Transpose(WorksheetFunction.Transpose(St2.Range("A" i ":E" i).Value))

"檢測是否是錄入過該員工

If Not Name.Exists(Record(1)) Then

"如果是第一次錄入,增加工號字典,更改第一行指針,在數組內添加該員工一整月天數的前5列數據

Name.Add Record(1), Record(1)

Arr_Pointer = Arr_Pointer + Cus_Days

For n = 1 To Cus_Days

Arr(Arr_Pointer + n, 1) = Record(1)

Arr(Arr_Pointer + n, 2) = Record(2)

Arr(Arr_Pointer + n, 3) = Record(3)

Arr(Arr_Pointer + n, 4) = Date4(n, 1)

Arr(Arr_Pointer + n, 5) = Date4(n, 2)

Next

End If

"判斷時間屬性,填入數組

Arr_Pointer2 = Arr_Pointer + Day(St2.Cells(i, 4).Value)

If St2.Cells(i, 5).Value &>= TimeValue("13:00:00") Then "如果打卡時間超過13點

If Arr(Arr_Pointer2, 7) = "" Then

Arr(Arr_Pointer2, 7) = St2.Cells(i, 5).Value "如果數組裡還沒有記錄,則將單元格寫入數組

ElseIf Arr(Arr_Pointer2, 7) &< St2.Cells(i, 5).Value Then

Arr(Arr_Pointer2, 7) = St2.Cells(i, 5).Value "如果數組的記錄小於單元格,則將單元格寫入數組(下班打卡取較大數據)

End If

ElseIf St2.Cells(i, 5).Value &< TimeValue("6:00:00") Then "如果打卡時間早於6點

If Day(Record(4)) = 1 Then

Arr(Arr_Pointer2, 13) = "上個月末最後一天有加班"

Else

Arr_Pointer2 = Arr_Pointer2 - 1 "指針時間提前一天

If Arr(Arr_Pointer2, 7) = "" Then

Arr(Arr_Pointer2, 7) = St2.Cells(i, 5).Value "如果數組裡還沒有記錄,則將單元格寫入數組

ElseIf Arr(Arr_Pointer2, 7) &>= TimeValue("13:00:00") Then

Arr(Arr_Pointer2, 7) = St2.Cells(i, 5).Value "如果數組裡的記錄是前一天晚上的記錄,則將單元格寫入數組(凌晨打卡要晚於前一天晚上)

ElseIf St2.Cells(i, 5).Value &> Arr(Arr_Pointer2, 7) Then

Arr(Arr_Pointer2, 7) = St2.Cells(i, 5).Value "如果數組裡的記錄是凌晨的,並且小於單元格,則將單元格寫入數組(下班打卡取較大數據)

End If

Arr(Arr_Pointer2, 8) = "是"

End If

Else "如果打卡時間介於6點到13點

If Arr(Arr_Pointer2, 6) = "" Then

Arr(Arr_Pointer2, 6) = St2.Cells(i, 5).Value "如果數組裡還沒有記錄,則將單元格寫入數組

ElseIf Arr(Arr_Pointer2, 6) &> St2.Cells(i, 5).Value Then

Arr(Arr_Pointer2, 6) = St2.Cells(i, 5).Value "如果數組的記錄大於單元格,則將單元格寫入數組(上班打卡取較小數據)

End If

End If

Next

For i = 1 To Arr_Pointer + Cus_Days

"備註周末or節假日

" If Arr(i, 5) = "周末" Or Arr(i, 5) = "三倍節假日" Then

" If Arr(i, 6) = "" And Arr(i, 7) = "" Then Arr(i, 13) = Arr(i, 13) " 周末or節假日 "

" End If

"如果上下班都有時間,則填充在司時間

If Arr(i, 6) &<&> "" And Arr(i, 7) &<&> "" Then

If Arr(i, 8) = "是" Then

Arr(i, 9) = Arr(i, 7) + 1 - Arr(i, 6)

Else

Arr(i, 9) = Arr(i, 7) - Arr(i, 6)

End If

Arr(i, 9) = Application.WorksheetFunction.RoundDown(Arr(i, 9) * 24, 2)

If Arr(i, 9) &>= 9 Then Arr(i, 10) = "是"

End If

"判斷是否缺上下班打卡記錄

If Arr(i, 5) = "工作日" Then

"判斷總部考勤是否合理

If Arr(i, 3) = "總部" Then

If Arr(i, 6) = "" And Arr(i, 7) = "" Then

Arr(i, 12) = "缺勤"

ElseIf Arr(i, 6) = "" Or Arr(i, 7) = "" Then

Arr(i, 12) = "漏打卡"

ElseIf Arr(i, 6) &<= TimeValue("08:30:00") And (Arr(i, 7) &>= TimeValue("17:30:00") Or Arr(i, 7) &<= TimeValue("06:00:00")) Then

Arr(i, 11) = "合理"

ElseIf Arr(i, 6) &<= TimeValue("09:00:00") And (Arr(i, 7) &>= TimeValue("18:00:00") Or Arr(i, 7) &<= TimeValue("06:00:00")) Then

Arr(i, 11) = "合理"

Else

Arr(i, 11) = "遲到or早退"

End If

End If

"判斷金佰達考勤是否合理

If Arr(i, 3) = "金佰達" Then

"如果上下班都沒打卡,前一天下班時間又不是晚於凌晨兩點的,是缺勤

If Arr(i, 6) = "" And Arr(i, 7) = "" Then

If Arr(i - 1, 1) = Arr(i, 1) And Arr(i - 1, 7) &<= TimeValue("06:00:00") And Arr(i - 1, 7) &>= TimeValue("02:00:00") Then

Arr(i, 11) = "合理"

Else

Arr(i, 12) = "缺勤"

End If

"如果上下班有一次沒打卡,前一天下班時間又不是晚於凌晨兩點的,是漏打一次卡

ElseIf Arr(i, 6) = "" Or Arr(i, 7) = "" Then

If Arr(i - 1, 1) = Arr(i, 1) And Arr(i - 1, 7) &<= TimeValue("06:00:00") And Arr(i - 1, 7) &>= TimeValue("02:00:00") Then

Else

Arr(i, 12) = "漏打卡"

End If

"打卡時間早於8點半、晚於17點半是合理的

ElseIf Arr(i, 6) &<= TimeValue("08:30:00") And Arr(i, 7) &>= TimeValue("17:30:00") Then

Arr(i, 11) = "合理"

"打卡時間早於8點半、並且下班跨天是合理的

ElseIf Arr(i, 6) &<= TimeValue("08:30:00") And Arr(i, 8) = "是" Then

Arr(i, 11) = "合理"

"打卡時間早於9點、在司時間大於9小時是合理的

ElseIf Arr(i, 6) &<= TimeValue("09:00:00") And Arr(i, 9) &>= 9 Then

Arr(i, 11) = "合理"

"(同一個人)頭一天晚上打卡時間介於2點到6點之間的是合理的

ElseIf Arr(i - 1, 1) = Arr(i, 1) And Arr(i - 1, 7) &<= TimeValue("06:00:00") And Arr(i - 1, 7) &>= TimeValue("02:00:00") Then

Arr(i, 11) = "合理"

"(同一個人)頭一天晚上打卡時間介於0點到2點之間,第二天早晨早於13點,晚上晚於18點是合理的

ElseIf Arr(i - 1, 1) = Arr(i, 1) And Arr(i - 1, 7) &<&> "" And Arr(i - 1, 7) &< TimeValue("02:00:00") And _

Arr(i, 6) &<= TimeValue("13:00:00") And Arr(i, 7) &>= TimeValue("18:00:00") Then

Arr(i, 11) = "合理"

"(同一個人)頭一天晚上打卡時間晚於20點,第二天早晨早於9點20,晚上晚於18點是合理的

ElseIf Arr(i - 1, 1) = Arr(i, 1) And Arr(i - 1, 7) &>= TimeValue("20:00:00") And _

Arr(i, 6) &<= TimeValue("09:20:00") And Arr(i, 7) &>= TimeValue("18:00:00") Then

Arr(i, 11) = "合理"

"(同一個人)頭一天晚上打卡時間晚於22點,第二天早晨早於10點,晚上晚於18點是合理的

ElseIf Arr(i - 1, 1) = Arr(i, 1) And Arr(i - 1, 7) &>= TimeValue("22:00:00") And _

Arr(i, 6) &<= TimeValue("10:00:00") And Arr(i, 7) &>= TimeValue("18:00:00") Then

Arr(i, 11) = "合理"

Else

Arr(i, 11) = "遲到or早退"

End If

End If

End If

Next

"設置輸出表的格式

St3.Columns("A:A").NumberFormatLocal = "@"

St3.Columns("D:D").NumberFormatLocal = "[$-F800]dddd, mmmm dd, yyyy"

St3.Columns("F:G").NumberFormatLocal = "[$-F400]h:mm:ss AM/PM"

St3.Columns("I:I").Style = "Comma"

St3.Columns("B:M").ColumnWidth = 12

"結果數組輸出到表格內

St3.Range("A1:N" Arr_Pointer + Cus_Days) = Arr()

"清除無打卡記錄的休息日行

"St3.Columns("N:N").SpecialCells(xlCellTypeConstants, 23).EntireRow.Delete

Application.ScreenUpdating = True

St3.Select

St3.Range("a2").Select

ActiveWindow.FreezePanes = True

End Sub


只要Office還流行,VBA就不會過時,而且會越發強大。

想想,有什麼語言可以比一個不依賴於操作系統、不依賴於編譯環境、不依賴於IDE的類似「膠水」,而且還能和Office完美整合的語言,更加吸引人?

————————————————————

更多文章關注我的專欄:數據冰山 - 知乎專欄


我覺得沒有過時,我在EXCEL上寫了很多小工具:時間管理、數據文件格式轉換、貪吃蛇小遊戲......VBA有自己的局限性,但在它適用的領域裡,很強大。也許有一天微軟會把它去掉,但肯定也是用其他更好的工具代替它(vsto啥的),那個時候你用那個工具相信 上手也會非常容易。


雖然VBA不是高校裡面的正式課程,但我十幾年來一直都在向經管社科方向的同學推薦和介紹這個很實用的技術,所以也經常遇到同學詢問類似的問題。這裡引用我以前發過的一篇博文,希望對題主能有些啟發:

「VBA已經過時了嗎?VBA是不是很快就要被淘汰了?」 這是任何一個初學計算機技術的同學都會關心的問題,楊老師在講授其他課程比如Java設計方法、關係型資料庫、網路通信技術等課程中,也一樣會聽到同學們問同樣的問題。

其實這個問題很有意思。如果你經常瀏覽程序員們的網站,特別是中文論壇,你就會發現「XX技術是不是過時了?」、「論XX語言不如XX語言」之類的話題永遠層出不窮,而且總能引起一大片激烈的爭論。比如用C語言的說Java太慢,用Java的說C++太亂,C++的說有本事你也給我寫個遊戲引擎,結果搞彙編的跳出來說;你也好意思在我面前提「性能」;接下來搞Python的、Ruby的紛紛表示自己才是新一代發展方向,不過玩JS的說我才是函數式編程,結果再被大家一頓鄙視…… 看這些帖子時候的感覺,就跟看郭德綱師徒鬥嘴一樣,會覺得原來程序界也是山頭林立、門派紛爭,誰都想給自己爭個「道傳正統」的法旗

總之這些爭論永遠存在,但其實都沒有任何實際意義,最後也都是不了了之。道理很簡單:工具技術各有特色,適用於不同場合,沒有任何一種技術可以自稱是「萬靈丹」。所以互相之間無所謂優劣,只有適用性的不同。

不過話說回來,凡是技術終歸要有被淘汰的一天。確實有很多當年我們接觸過的語言和工具,現在除了遺留系統外,已經很少看到蹤跡了,比如 COBOL,PowerBuilder,C++Builder等等。所有技術都如此,VBA當然也概莫能外。事實上,我記得2012年前後,確實曾經風傳微軟將停止支持VBA,不過隨著新版OFFICE推出,該謠言也不攻自破。

不過我覺得大家倒不必為此擔憂,因為:

首先,對於非計算機專業的白領人士,直到目前,Office軟體中沒有比VBA更強大又好學的編程工具。所以只要你想玩轉Office,就只能學習VBA。客觀地說,開發Office的更加專業的工具還有很多,比如用.Net開發工具直接開發Office插件,無論外觀還是性能都超出VBA一個檔次。不過這些工具都是供給專業人員使用的,如果你也能掌握這個技術,那麼已經可以直接改行做專業開發人員了。

其次,退一萬步講,即使下一版Office中停止支持VBA,那麼微軟也必須提供一個替代性的宏開發工具。而既然是宏編程,又是VBA的繼承者,那麼大家現在掌握的VBA知識將會使你非常順利的切換到新語言環境,無非就是For/If等保留字的寫法發生變化,或者稍微增加一些新的語言結構(比如強面向對象)而已,本質上都是相通的。比如我前幾天幫朋友開發時使用了一下Google Doc(Google提供的完全類似MS Office的雲端辦公軟體)的宏語言,它基於Javascript語法,但是寫起來的手感跟VBA是一樣的,無非還是傳統的程序代碼配上各種表格對象的使用。如果熟悉VBA,完全可以一邊上網查文檔,一邊就把程序寫出來。

最後,我還是一貫的觀點:工具萬千,實用為王。不必把自己拘泥於某一個技術上,而是根據工作需要,什麼方便用什麼。能用公式就用公式;公式不給力就上透視圖,實在沒辦法就來VBA;VBA也不能用,又必須要求寫程序,那就熬幾個夜學學C#,然後上網抄一段代碼改一改,反正大家思路上都差不多;如果還是不行,那就請領導批預算委外開發;如果領導不批准還要出活,那就辭職吧 ……

說跑題了。總之我個人的意見是:在可以預見的幾年裡,VBA不會被替代;即使有一天VBA會被替代,你通過學習VBA所積累的經驗也會幫助你迅速轉到新工具中。


剛看到空白大佬的回答,想起以前做運營的時候每對著Excel,基本上需要重複勞動的工作都用VBA解決了。剛翻了翻保留下來的文件有這些:

xlsx文件是自己做的和學習到的一些圖標總結,xlsm文件是自己做的帶VBA的表格文件。

後來因為科技解放了生產力,空餘的時間多了出來又用VBA自娛自樂做了很多小遊戲。

有一些純娛樂向的2048、掃雷什麼的,有一些演算法向的迷宮、數獨、KMeans聚類,還有爬蟲向的票房數據分析。

大部分文件及代碼我都放到專欄里了,扯乎。有興趣看看就行,不用關注了,因為找不到題材所以很久沒更新了……


已經過時了。微軟已經考慮用Python替代VBA了。

https://www.bleepingcomputer.com/news/microsoft/microsoft-considers-adding-python-as-an-official-scripting-language-to-excel/


當全公司就你一個人會VBA的時候,當別人一個早上才完成一份周報表而你只要5分鐘(算上公司電腦的渣運行速度浪費的時間)的時候,你就會明白它沒有過時


作為工具,實用是根本。時髦有什麼用


雖然功能上受限,但VBA的方便是無可比擬的,當你在使用EXCEL時發現用公式無法實現自己的需求時,按ALT-F11寫一段代碼相當地方便,不用再去安裝啟動另一個體積龐大臃腫的IDE。

工作中,我用VBA寫了不少自己使用的工具,比如自動分表、自動郵件分發、指定郵件群發、報表自動分析評價發布、行業自動分析等等,令我的工作效率和質量大為提升。

它的快速、方便,與EXCEL緊密配合,才使得EXCEL成為功能幾乎可以無限擴展的工具。除非有更好的工具替代,否則VBA不會過時。


vba一點也不過時【附海量教程】

只要和excel打交道,都會用上它。別人兩三天完成的重複性工作量,又累又枯燥,到你這裡點點按鈕15分鐘解決。毫不誇張。並且,數據越多,越能提現vba的快速方便的特點。

____________________________________________

鐵路設計裡面有一個參數叫壓縮模量,而這個參數是做實驗一個鑽孔一個鑽孔做的。你需要對每個鑽孔查每個土層深度的壓縮模量。如果手動查取,不僅枯燥繁瑣,而且浪費時間。剛工作的時候感覺這個過程真是個麻煩的過程,如果能用程序執行就行了,自己也是各種搜如何批量對比查找並提取數據,最後搜到vba可以最簡單的做到這一點。而且入門快,你用到批量提取數據,實際上你可以直入主題,字典數組暫時不用學。自己買書看書,百度摸索。不忙的時候就編程,編出來了一個讀取壓縮模量的小程序

分享給同事之後,自豪感爆棚啊 ,時間在這個年代是多麼的重要。能用vba解決的絕對不浪費時間。

____________________________________________

①蘭色幻想的80級vba教程(很全面的視頻)

百度雲鏈接:http://pan.baidu.com/s/1skIqA2h

②曾賢志的我要自學網excel全套教程(講的很詳細,通俗易懂)

百度雲鏈接:http://pan.baidu.com/s/1gfiZzrX

③羅剛君的編程系列。(很全面,初級進階都可以)

百度雲鏈接:http://pan.baidu.com/s/1kVmVbHP

④《別怕,excel其實很簡單》。這本書適合初學入門。配套的《實戰技巧精髓》感覺編的不太好,就是一些實際問題的解答辦法,跟第一本書不太配套,好多難得知識點,第一本書沒有講。

百度雲鏈接:http://pan.baidu.com/s/1miEDsyG

鏈接失效可以加我微信補鏈接。


過時什麼過時,VBA太好用了,尤其是你的同事們是一群平均年齡大於35的阿姨的時候,其他任何軟體他們都沒法接受,只有跟excel搞基的VBA他們能玩的起來,而且直接輸出正經的excel文件,其他軟體生成的有時候編輯起來不方便。那種需要前後勾稽的台賬,全部都是VBA啊VBA……


當數據量並不巨大,可以在excel內操作時,VBA是很方便的。VBA局限在excel數據操作,只能說堅守了一塊陣地,不能說過時。我的理解,EXCEL是輕量級資料庫,VBA是架構於這個資料庫之上的一個輕型語言。如此橫向比較,如果用中型資料庫,如sqlite,或者大型資料庫,如oracle,肯定用python什麼的搭配更舒服。如果單拿出VBA而不看EXCEL,那肯定python什麼的穩贏。你用vba來個爬蟲,資料少,沒框架…


vba暫時應該還沒有過時,不過看樣子微軟也不怎麼想繼續維護了。

這個問題下的回答都是啥啊,大部分都文不對題。vba過不過時和vba有多少人、vba多好用還有你用vba做了什麼有什麼關係嗎?


以前做人力資源,領導經常要求增減日常報表的項目、格式。

ERP系統有這個模塊,但從領導要求-&>申請調整-&>電算部哥們寫出來-&>調試好投入使用

整個環節少說要一星期,於是基本自己動手EXCEL+VBA。

現在不做人力資源了,沒那麼多數據要處理,

但也可以做個批量列印(郵件合併很好,但我還是習慣用EXCEL),一鍵生成報表

再好再貴再強大的系統,也不能滿足你所有需求(其實我覺得是在束縛),

再性感再漂亮的老婆,需要的時候不在身邊,那一時刻還不如左右手。

只要EXCEL還是主流,VBA絕不會過時。


只要office不過時,微軟又不換它,就不會過時


樓主剛剛寫了個小工具獲獎~~


VBA的作用我就不再贅述了,在工作中我的體會是數據交互方便,比如excel與CAD之間數據傳輸,免去了很多麻煩。


使用Excel的人,90%都不會,怎麼能說過時?


並沒有,只有一種工具完全替代另一種的時候才會過時,又可以各種場景完全替代VBA的么?沒有


推薦閱讀:

使用Excel對一列數據中每部分進行求平均值,根據平均値進行數據篩選?

TAG:MicrosoftExcel | VBA |