[算表] VBA範圍 無法重算
Function abc(X As Range)
Dim XR As Integer, XC As Integer
XR = X.Row
XC = X.Column
abc = Application.Average(Range(Cells(XR - 2, XC), Cells(XR, XC)))
我發現他不會自動重算!
在活頁F10輸入abc(E10) 他會計算E8:E10的平均
可是更動E8或E9的數值 他不會自動重算!
只有更改E10 或F10重新輸入 才會自動重算
即使按 立即重算 也不會重算
修改資料 但公式不會重算……
在這簡單案例中 我知道直接拉公式比較快
但我的資料計算很複雜 公式會打一堆 一更動就很難維護
要怎麼做比較好呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.149.248 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1618317619.A.BC2.html
→
04/13 21:21,
3年前
, 1F
04/13 21:21, 1F
是說乖乖在儲存格打公式嗎?我是把公式拆成兩格計算
→
04/13 21:52,
3年前
, 2F
04/13 21:52, 2F
這個就可以自動重算,但其他無關的變化,也會讓這個公式重算?
如果這個公式用太多,可能會很慢?
→
04/14 10:53,
3年前
, 3F
04/14 10:53, 3F
→
04/14 10:53,
3年前
, 4F
04/14 10:53, 4F
→
04/14 11:09,
3年前
, 5F
04/14 11:09, 5F
→
04/14 11:09,
3年前
, 6F
04/14 11:09, 6F
→
04/14 11:09,
3年前
, 7F
04/14 11:09, 7F
→
04/14 11:09,
3年前
, 8F
04/14 11:09, 8F
在這例子,「事件」可能比 application.volatile 還要差?
限定範圍是在公式寫 if 範圍內有變動 就重算 嗎?這個程式碼應該怎麼寫呢?
另一種方法,我已經把excel公式拆成兩格,那就寫兩個自訂公式,公式搬進VBA就好
至少維護不用擔心公式跑掉,也會自動重算
→
04/14 14:19,
3年前
, 9F
04/14 14:19, 9F
→
04/14 14:19,
3年前
, 10F
04/14 14:19, 10F
→
04/14 14:19,
3年前
, 11F
04/14 14:19, 11F
→
04/14 14:19,
3年前
, 12F
04/14 14:19, 12F
我想了一下,在我的情境,這樣寫法跟原本差不多@@現在卡在另一個
Function bcd(X As Range)
XR = X.Row
XC = X.Column
y1 = X * 2
y2 = X * 3
bcd = y1
Cells(XR, XC + 2) = y2
是否無法這樣寫,只能sub然後
Set X = Application.InputBox(prompt:="輸入X的儲存格", Type:=8)
用sub似乎就沒那麼多問題,可是好像只能一個一個做,大量資料就要用陣列?
→
04/15 11:10,
3年前
, 13F
04/15 11:10, 13F
→
04/15 11:10,
3年前
, 14F
04/15 11:10, 14F
Range.Formula類似「拉公式」?迴圈我會好好想
推
04/15 15:32,
3年前
, 15F
04/15 15:32, 15F
→
04/15 15:32,
3年前
, 16F
04/15 15:32, 16F
→
04/15 15:32,
3年前
, 17F
04/15 15:32, 17F
→
04/15 15:32,
3年前
, 18F
04/15 15:32, 18F
→
04/15 15:33,
3年前
, 19F
04/15 15:33, 19F
→
04/15 15:33,
3年前
, 20F
04/15 15:33, 20F
→
04/15 15:33,
3年前
, 21F
04/15 15:33, 21F
→
04/15 15:33,
3年前
, 22F
04/15 15:33, 22F
→
04/15 15:33,
3年前
, 23F
04/15 15:33, 23F
→
04/15 15:34,
3年前
, 24F
04/15 15:34, 24F
這個方法確實可行,但我不太懂為何他只有一個range,而且是第一個的range
如果要保留3個range,是否要用陣列?
→
04/15 15:35,
3年前
, 25F
04/15 15:35, 25F
→
04/15 15:35,
3年前
, 26F
04/15 15:35, 26F
→
04/15 15:35,
3年前
, 27F
04/15 15:35, 27F
→
04/15 15:36,
3年前
, 28F
04/15 15:36, 28F
→
04/15 15:37,
3年前
, 29F
04/15 15:37, 29F
→
04/15 15:37,
3年前
, 30F
04/15 15:37, 30F
→
04/15 15:38,
3年前
, 31F
04/15 15:38, 31F
→
04/15 15:39,
3年前
, 32F
04/15 15:39, 32F
→
04/15 15:39,
3年前
, 33F
04/15 15:39, 33F
還有 338 則推文
還有 35 段內文
→
05/01 08:10,
3年前
, 372F
05/01 08:10, 372F
→
05/01 08:12,
3年前
, 373F
05/01 08:12, 373F
→
05/01 08:13,
3年前
, 374F
05/01 08:13, 374F
推
05/01 08:18,
3年前
, 375F
05/01 08:18, 375F
推
05/01 08:22,
3年前
, 376F
05/01 08:22, 376F
→
05/01 08:23,
3年前
, 377F
05/01 08:23, 377F
→
05/01 08:25,
3年前
, 378F
05/01 08:25, 378F
→
05/01 08:25,
3年前
, 379F
05/01 08:25, 379F
→
05/01 08:25,
3年前
, 380F
05/01 08:25, 380F
→
05/01 08:26,
3年前
, 381F
05/01 08:26, 381F
→
05/01 08:28,
3年前
, 382F
05/01 08:28, 382F
傳值、傳參考,我之前搞不清楚,現在我這樣理解:
X=10:Y=20
X、Y叫變數,一個變數等於是一個籃子(記憶體的一個單位?),兩個籃子的標籤分別
是X和Y,內容物則分別是10和20。
VBA預設是傳參考,等於說各個sub、function在計算的時候,是傳遞X、Y這種標籤,找
到籃子後,再來讀取裡面的內容、計算、更改。
比如倉庫紅色籃子是3瓶果汁,黃色籃子是10瓶果汁,員工的任務是把2瓶果汁放進紅色
籃子,那麼他應該是無中生有變出2瓶果汁,然後放進紅色籃子。這過程並沒有摸到黃色
籃子,2瓶果汁也不是從黃色籃子拿出來的。這樣嗎?
傳值不知哪邊用得到?或者其實function本身就是傳值?如果sub的參數都是傳值,那麼
就跟function差不多了?但是要弄個變數去儲存他的答案?
end sub,會消滅這個sub的籃子,除非sub外面有籃子,而且標籤要一樣,資料才會留下
來,但是傳值就不會改動籃子內的東西了。
在前面我的問題中,兩個sub是end了,但外面的籃子(陣列和變數)還在,裡面資料也
還在,所以重新計算時,就會用到這些舊資料,而非原先預期的「空」,所以要補上dim
或redim把籃子清空。
※ 編輯: j2708180 (36.239.159.74 臺灣), 05/01/2021 12:00:53
推
05/01 20:08,
3年前
, 383F
05/01 20:08, 383F
→
05/01 20:09,
3年前
, 384F
05/01 20:09, 384F
→
05/01 20:09,
3年前
, 385F
05/01 20:09, 385F
→
05/01 20:10,
3年前
, 386F
05/01 20:10, 386F
→
05/01 20:11,
3年前
, 387F
05/01 20:11, 387F
推
05/01 20:17,
3年前
, 388F
05/01 20:17, 388F
→
05/01 20:18,
3年前
, 389F
05/01 20:18, 389F
→
05/01 20:19,
3年前
, 390F
05/01 20:19, 390F
→
05/01 20:20,
3年前
, 391F
05/01 20:20, 391F
推
05/01 20:23,
3年前
, 392F
05/01 20:23, 392F
→
05/01 20:24,
3年前
, 393F
05/01 20:24, 393F
→
05/01 20:24,
3年前
, 394F
05/01 20:24, 394F
→
05/01 20:26,
3年前
, 395F
05/01 20:26, 395F
→
05/01 20:26,
3年前
, 396F
05/01 20:26, 396F
→
05/01 20:34,
3年前
, 397F
05/01 20:34, 397F
→
05/01 20:34,
3年前
, 398F
05/01 20:34, 398F
→
05/01 20:34,
3年前
, 399F
05/01 20:34, 399F
→
05/01 20:35,
3年前
, 400F
05/01 20:35, 400F
→
05/01 20:35,
3年前
, 401F
05/01 20:35, 401F
→
05/01 20:35,
3年前
, 402F
05/01 20:35, 402F
→
05/01 20:35,
3年前
, 403F
05/01 20:35, 403F
→
05/01 20:36,
3年前
, 404F
05/01 20:36, 404F
→
05/01 20:36,
3年前
, 405F
05/01 20:36, 405F
→
05/01 20:36,
3年前
, 406F
05/01 20:36, 406F
→
05/01 20:36,
3年前
, 407F
05/01 20:36, 407F
推
05/01 20:39,
3年前
, 408F
05/01 20:39, 408F
總之傳值不會改變原變數的值,傳參考會,可是除了x=x+1這種,兩個好像沒差?
那麼什麼情況會需要把ByVal打出來呢?
※ 編輯: j2708180 (218.173.181.14 臺灣), 05/02/2021 13:25:14
推
05/02 13:43,
3年前
, 409F
05/02 13:43, 409F
Office 近期熱門文章
PTT數位生活區 即時熱門文章