iT邦幫忙

0

EXCEL VBA 學習的困境

個人工作上常用到EXCEL,因為看到VBA可以處理一些經常性或者重複性的問題,所以油然而生想要下功夫學。
不過學了一些,看了一些技術系的文章或者書本,遇到的困境是,比較多的時候是不知道要怎樣解題,或者說有點頭緒後,但感覺只是入門的第一二步而已,所以感覺就是挫折。
屢屢看到有人發問問題,自己也曾經發問過,但是看到有人提供解決的方案,總覺得自己怎麼就是沒有想到(其實是壓根都沒有任何解題的概念),特別是高手提供答案,心理面夾雜很多的羨慕和有些灰心,當然也勉勵自己,萬丈高樓平地起,只是學到現在,只有身處平地的感受存在。
希望跟我一樣學習的可以一起分享勉勵(同溫層取暖吧)
更希望精通的高手更可以分享學習的歷程,讓新手的我們可以看到正確的方向。

看更多先前的討論...收起先前的討論...
不明
【**此則訊息已被站方移除**】
所有的程式設計都有一個基本邏輯,這些要了解,VBA 能幹嘛,你要清楚,
剩下的就是數據如何運算,如何輸出結果,變數項目如何傳遞,
如果你連基本的資料運算,樞紐分析一些基本的資料架構邏輯運算都不懂
那 VBA 要上手很困難,因為你輸出的結果正不正確你都無法知道
而且相同的資料運算後產生結果的方法可能有數百種方法,但運算時間可能有所不同,這些你也要能了解,就好像 1+1=2 這種問題,電腦是怎麼算出來的,有多少種方法,有沒有你未知的方法會更快得到結果,而不是靠記憶知道 1+1就是2
上面講 1+1 的問題,甚至有可能運算結果不是2,如果不是2才是正確答案,那你的運算過程就會很重要,這也是為什麼必須要用VBA處理運算過程的原因
如果不是為了文書自動化(自動執行100次複製、貼上)
是為了要統計、分析、製作圖表..........

那我真心建議,用C#、PYTHON、R#、GO........來處理XLSX,都會比VBA高效且高能
3

不明白不懂??

被k
再問
被唸
不死心又問了很白吃的問題
直接被飆
(心灰但不意冷)
總算試出來了,繼續!!
啊!!又卡關了
再發問
你怎麼又來了
感謝大大們讓我問笨問題
不想回答你
你滾吧
加油!
你可以的
.
.
.
(經驗過程太多太煩到不知道如何說明.....)
以上就是我的學習過程中的感覺。

簡單來說,以前的我,就是一台電腦,一直試做,不懂就問。
被罵還是問。想到就去書局。(曾經花了一天的時間再書局找書,買了4大本)

當時,罵過我的不下10個人。也遇過邊罵邊教我的。
我到現在都很感謝那些人。(只是不知道有沒有在這邊)

不過不能拿我來當範例。每個人的學習方式是不同的。
我的學習歷程算是很怪胎。就是一直做小東西。
永遠都沒有所謂的成品。所有的東西都一直在90%完成度。
(明明一直再修改)
懶了,就換另一個方案。
就這樣子學過來的。

看更多先前的回應...收起先前的回應...
idnoidno iT邦新手 5 級 ‧ 2021-01-12 16:38:00 檢舉

看到您的回復,感覺很溫暖,原來您的經歷也有這樣的歷程啊
請問,您是本科系的還是像我四不像,就是因為工作上有需要,所以就學了

不都不是資訊科系的。
會往程式設計這一個工作真的是意外。
我的本職學能本是水電外加音樂系。(很奇怪的組合)
後來想做吃的。
為了要整理琴譜跟音樂組合。去研究了一些程式的寫法跟應用。
為了整理食譜。學了資料庫的應用。
之後想要架一個自已的站搞不定。拿了一個套裝的東西來架。
又學了主機架設跟網頁程式。
覺得套裝不符合我要用的,一直修改成我自已要的東西。
然後就不小心的,走上了這條不歸路了。

反正我的學習過程,真要說的話,沒有一次是為了寫程式而學程式的。
很莫明奇妙吧!!

idnoidno
我比較想問你上次的問題有成功嗎?

想不到當年有人罵星空大神XD

misadm iT邦高手 10 級 ‧ 2021-01-13 09:06:17 檢舉

曾經花了一天的時間再書局找書,買了4大本

唉... 現在年輕人都不買書了...

我也是新手過的,也是被人罵過的。
但重點罵我唸我都沒關係,我當時菜,不懂。被唸被罵都是很正常的。
只要能讓我學到他的一些皮毛就行了。

曾經我就鬧過一個笑話。
當時在某技術論壇,看到一篇真的很想唸這傢伙的文章。
就霹靂啪啦的唸了一堆。

然後我回完文了。突然發現那篇文章,居然是我自已好幾年前發的問題。
一時之間真的覺得,原來當時的我真的會問笨問題。
問到那現在的我忍不住的想唸當時的我。

0
rogeryao
iT邦大師 3 級 ‧ 2021-01-12 17:41:54

請參閱 : YouTube excel vba
學習之路很漫長,有熱情才走得遠.

3
japhenchen
iT邦大師 1 級 ‧ 2021-01-13 07:56:41

Excel畢竟不是規範的格式文件,只要是人輸入的,就難免有錯,非數字,全型半型混用,非格式化的儲存格數字給你打千分位逗點,跳格,跳行,字串後面跟空白,匯入格式不正常,時間日期格式沒規範......

以上都還好,問題最大的就是VBA十幾年沒進步,效能不彰不說(從第1行讀到10000看看),連要用個正則表達式都要考慮到中文是雙位元的問題...一系列下來,我現在都學會用其他程式語言來處理EXCEL資料內容,放棄VBA

idnoidno iT邦新手 5 級 ‧ 2021-01-13 09:02:08 檢舉

關於listennn08 大大詢問
我比較想問你上次的問題有成功嗎?
當時是因為工作上要申報一些費用
因為好些人要一起填資料
最後我在核對計算
因為計算雖然有公式可以用
但是公式的儲存格不保護
有時候會被同事不小心動到
所以才開始使用VBA
最初是使用循環的方式計算
後來因為靠但ARRAY的用法
所以改為陣列的方式處理
學到皮毛後,才發現不會的更多
特別是論壇上看到問題和解答有(自己不會)
都有種無名的挫折感升起

idnoidno
挫折感我是覺得不用,如果你換個方向想,要是你克服了一個問題,你會得到更大的成就感,要用加分法去看事情,而不是用一時的挫折來扣掉你滿滿的熱情

再多也沒得跌坑來扣

至於listennn08.......我一時熊熊沒想起來是什麼事,提示一下下~~~~

1
Neish
iT邦研究生 1 級 ‧ 2021-01-13 10:04:07

VBA是我工作上第一個使用的程式語言
其實我覺得使用上很貼近一般使用者
因為各公司應該還是廣為使用Excel進行日常作業
所以VBA在操作上跟使用者比較沒有距離

學習面來看
我覺得不用想得太複雜 先不用覺得我要了解到某個程度
好像我一定要清楚了解這個型態、語法、函式等等
因為這對初學者來說 太有壓力了

你可以單純以功能面來著手
思考 我要怎麼達到這個功能
拆解成一個一個步驟去實現

如果不清楚這個步驟怎麼用VBA寫 就去查資料(GOOGLE、各大論壇、、、)
也可以善用內建的錄製巨集

例如:
我有一個基準值(D2) 若B欄位的數值小於基準值 A欄位我就顯示黃色 (像下圖)
https://ithelp.ithome.com.tw/upload/images/20210113/20097781CBzWhmuRsZ.jpg

思路可以像這樣

  1. 我需要一個迴圈知道我總共用多少資料 (我不可能寫死固定10筆吧?!)
    我就查到如下的語法 (可以取到最末筆資料筆數)
For i = 1 To Range("A1").End(xlDown).Row
    XXX
Next
  1. 我要有個判斷條件 讓程式知道欄位值是否小於基準值
    查到了IF的用法
If Range("B" & i) < Range("D2") Then
    XXX
END
  1. 有了條件判斷 我要讓儲存格亮黃色
    用錄製巨集查到了Color的用法
    再Google找到用&串接變數的做法
If Range("B" & i) < Range("D2") Then
    Range("A" & i).Interior.Color = 65535
END

這樣看起來沒有問題了 但如果我資料會變動
原本黃底的欄位 值可能大於基準值了 那怎麼辦

  1. 所以我另外加一個判斷 讓欄位值如果>=基準值 就去底色無填滿
    用錄製巨集方式 找到無填滿的寫法 最後改寫成這樣
If Range("B" & i) < Range("D2") Then
    Range("A" & i).Interior.Color = 65535
Else
    Range("A" & i).Interior.ColorIndex = xlNone
End If

彙整上述步驟 語法就會是這樣 就可以達到上圖的效果

Sub test()

    For i = 1 To Range("A1").End(xlDown).Row
    
        If Range("B" & i) < Range("D2") Then
            Range("A" & i).Interior.Color = 65535
        Else
            Range("A" & i).Interior.ColorIndex = xlNone
        End If
        
    Next
    
End Sub

我覺得這樣可以讓你學習起來比較輕鬆
用"功能"面去思考 也比較有感
而且達成你要的結果會很有成就感
久了做下來 其實功力就會慢慢加深加廣了

以上經驗分享

1
paicheng0111
iT邦高手 1 級 ‧ 2021-01-13 12:37:45

我建議是按部就班,先求有再求好。

第一階段求有
推進進度,拿到credit,對公司有交代。
這個時期難免有髒code。

第二階段求好
讓技術精進。
逛stack overflow、iT邦幫忙,看看高手怎麼寫code

另外,我覺得解題可以先試著用EXCEL的錄製巨集的功能。
之後再去用CreateObject引用其他的Lib。

idnoidno iT邦新手 5 級 ‧ 2021-01-13 13:47:07 檢舉

感謝很多高手提供的經驗,心理感覺踏實些,發現,很多人的歷程原來都會有這樣的學習困境,
也謝謝Neish大大的舉例操作說明,非常受用,真的由衷感謝
鼓起精神繼續努力

2
froce
iT邦大師 1 級 ‧ 2021-01-13 13:58:43

VBA會錄巨集會改能跑就好,真的不要花太大的心力。
現在也有很多語言能產xlsx,基本上該有功能也都有,花太大的心力去學好一個快過時的東西沒啥必要。

現在python的生父加入微軟並且是在office的team,或許之後office會生出個pya之類的鬼東西。XD

idnoidno iT邦新手 5 級 ‧ 2021-01-13 14:32:25 檢舉

感謝大哥您的回覆,如果推薦,您會建議要在python上下功夫嗎

froce iT邦大師 1 級 ‧ 2021-01-13 15:19:10 檢舉

你問一個寫慣python的,答案當然是推薦啊。XD

python目前在辦公報表自動化這塊算是資源很多的。
pandas可以幫你先初步整理資料、sqlalchemy幫你連接資料庫然後進行資料庫操作、然後透過openpyxl去輸出xlsx,或是透過pdfkit操作wkhtmltopdf來輸出PDF。

用的人多,資料齊全,本身語言簡便,坑也不算多。
重點是通常文件都寫的很好。

reagan iT邦新手 5 級 ‧ 2021-01-18 18:57:21 檢舉

做等PYA,XD

0
Max Cheng
iT邦新手 5 級 ‧ 2021-01-13 14:06:37

VBA你想成拆成VB,巨集各個集破 
VB + Marco = VBA
學好VB在來用錄製在
VBA的語法屬性太不太可以用背的去推理
再看程式嗎?
再K官方文件
https://docs.microsoft.com/zh-tw/office/vba/api/overview/
再看YOUTUBE

0
reagan
iT邦新手 5 級 ‧ 2021-01-18 18:54:35

VBA真是個神奇玩意,歐萊禮都沒再推出相關書籍了就大概知道業界情況
先別管VBA了你有聽過Python嗎?

idnoidno iT邦新手 5 級 ‧ 2021-01-18 18:58:02 檢舉

有通過Python

idnoidno iT邦新手 5 級 ‧ 2021-01-18 19:07:17 檢舉

其實,有時候學習就是這樣,高手會醒你,是不是要考慮這一個技術是否是明日黃花、夕陽西下的產品!

reagan iT邦新手 5 級 ‧ 2021-01-19 21:16:22 檢舉

您太客氣了我只是一位對寫程式有興趣的同好而已,我第一個語言也是VBA也蠻喜歡它的,但相信您能在Python找到更多想法

0
Andy Chiu
iT邦研究生 3 級 ‧ 2021-03-12 05:54:20

我也是過來人,主要是看想解決什麼問題,然後解決問題中找到樂趣,這樣才有學習的動力,不論是VBA或者是其他語言。
另外,Excel VBA跟Access VBA的功能差蠻多的,如果要學VBA,可以先試著用Excel錄製巨集的方式取得一些VBA碼,從中學習語言結構,有大量資料需要整理的時候,會建議轉到Access上處理,這時候Access VBA才有發揮的餘地,但這個學習曲線較陡峭,因為沒有錄製巨集的功能,就單純手key,這時候就會建議上YouTube找一下Access相關的教學影片,會對學習Access VBA有幫助。

idnoidno iT邦新手 5 級 ‧ 2021-03-12 08:54:23 檢舉

感謝您的回覆,可以請教,依您的學習經驗,可以介紹可以參考學習資源的資訊嗎,例如網站或者書籍,謝謝

Andy Chiu iT邦研究生 3 級 ‧ 2021-03-12 22:16:18 檢舉

影片:電腦學習園地
https://www.youtube.com/c/pclearn/playlists
之前在裡面學習了不少東西,不過他舊的影片好像有一次不明被YouTube砍影片後就沒補上,目前上面都是較新錄製的,有些還沒補齊

網站的部份有很多,其實Google一下關鍵字都可以找到一些,iT邦幫忙的鐵人賽也有不少人寫相關文章,我就參加了3次,有機會可以看看

我要發表回答

立即登入回答