雖然 Excel 裡可以執行 Python 以取代 VBA,但使用起來還是滿不方便的。
首先,它的選取範圍不能直接用變數:
以下方式是正確的讀入資料方式:
all_data_df = xl("D1:KJ260", headers=False)
試圖利用變數讀入資料會失敗:
Data_Range = "D1:KJ260"
all_data_df = xl("Data_Range", headers=False)
所以每次資料變動,要改程式內容就很煩。
還有,它的報表繁中字體就只有三種,但只有 SimHei 字體能看。
不能用使用變數這個問題雖然讓人很困擾,但可以使用命名管理員定義一個新名稱,指定一個命名範圍,並將該命名範圍指向一個 index 函式來解決。
雖然定義名稱過程有點討厭,但至少不用一行一行去改 Python 內容,也還算可以接受。
使用 Excel 命名範圍
怎麼以命名範圍取代變數呢?首先,先進到『公式』頁面。
打開名稱管理員。
建立一個新的名稱,比方說 Data_Range,並參照到公式 (底下公式複製起來,直接貼入『參照到:』欄位):
=INDEX($1:$1048576, $B$1, COLUMN(INDIRECT($A$1&"1")))
:INDEX($1:$1048576, $D$1, COLUMN(INDIRECT($C$1&"1")))
建立新的命名範圍後,會看到命名管理員中已經有 Data_Range 這個名稱的存在,這時就可以將命名管理員關閉了。
前面命名範圍時參照的公式,意思是說我會將起始欄放在 A1 這一格,起始列放在 B1;結束欄放在 C1;結束列放在 D1。
比方說,我的資料是從 D8:KJ260,所以我在 A1 這一個填入起始欄 D,B1 填入起始列 8;C1 填入結束欄 KJ,D1 填入結束列 260。
接下來就可以在 Python in Excel 中使用命名範圍進行計算,要改變資料範圍時也只要在 A1:D1 修改資料即可,不需要進到 Python 程式碼裡一行程式碼、一行程式碼的慢慢修改資料範圍。
雖不滿意,但比沒有好
雖然使用命名範圍步驟還不少,但至少比完全沒有解決方法來得好一些。原本改變了資料範圍就得進 Python 程式碼裡一行一行修改,有時候一行沒有改到,計算出來的結果就是錯的。
現在利用命名範圍,不用擔心某幾行程式沒改到造成結果失誤,至少解決了部份問題。當然,如果日後 Microsoft 能讓 Python in Excel 直接抓取 "D8:KJ260" 這樣的範圍進行計算就更好了。
Microsoft 還沒有改善 Python in Excel 之前,就先用命名範圍撐著吧。






沒有留言:
張貼留言