Board logo

標題: [發問] 請問代碼中輸入公式的表達方式 [打印本頁]

作者: freeffly    時間: 2015-9-23 14:43     標題: 請問代碼中輸入公式的表達方式

下面兩種方式結果依樣
以前我都是用第2種(用錄製也是這種),因為在書上看到的就是第2種的表達方式
偶然在某網站看到第1種這種跟我們平常在儲存格輸入方式一樣
原本以為第1種是無法運行,結果卻是一樣

想請問第一種算正常的表達方式嗎?有沒有需要注意的地方?

   第1種 [j6].Resize(n, 1) = "=date(left(right($g6,11),4),left(right($g6,7),2),left(right($g6,5),2))"

   第2種 [j6].Resize(n, 1) = "=DATE(LEFT(RIGHT(RC7,11),4),LEFT(RIGHT(RC7,7),2),LEFT(RIGHT(RC7,5),2))"
作者: 准提部林    時間: 2015-9-23 15:24

本帖最後由 准提部林 於 2015-9-23 15:26 編輯

第1種為〔Formula〕模式:必須在建立公式的〔起始格〕填公式,它不會自動產生〔位移〕參照,
[j6] = "=date(left(right($G6,11),4),left(right($G6,7),2),left(right($G6,5),2))" → OK
[j7] = "=date(left(right($G6,11),4),left(right($G6,7),2),left(right($G6,5),2))" → 看一下[$G6] 不會自動變成〔$G7〕

第2種為〔FormulaR1C1〕模式:可以在同欄任一格填公式,自動位移參照(錄製取得,準確性最安全)
[j6].FormulaR1C1= "=DATE(LEFT(RIGHT(RC7,11),4),LEFT(RIGHT(RC7,7),2),LEFT(RIGHT(RC7,5),2))"
[j7].FormulaR1C1= "=DATE(LEFT(RIGHT(RC7,11),4),LEFT(RIGHT(RC7,7),2),LEFT(RIGHT(RC7,5),2))"
作者: freeffly    時間: 2015-9-23 15:45

回復 2# 准提部林


    大概懂意思,如果我使用Resize一次輸入他會是正確的,沒有所謂位移問題嗎
作者: 准提部林    時間: 2015-9-23 15:58

本帖最後由 准提部林 於 2015-9-23 16:02 編輯

回復 3# freeffly

換個假設:
因某種需求, 必須將資料表往下移2列,原來在〔j6〕下公式,現則為〔j8〕,
這時,必須將公式文字的〔列參照〕全部修改才不會出錯,
[j8].Resize(n ,1) = "=date(left(right($G8,11),4),left(right($G8,7),2),left(right($G8,5),2))"
 
而第2種則只要修改公式首格的位置即可:
[j8].Resize(n ,1).FormulaR1C1 = ”不用改”
 
程式碼視實況取用合適即可,不必拘泥用哪一種,但謹慎的程式設計者,會較慎重考慮而已∼∼
作者: freeffly    時間: 2015-9-23 16:43

回復 4# 准提部林

    謝謝版主~
    原來如此,看來第一種還是盡量不要用,雖然能比較快寫出
作者: 准提部林    時間: 2015-9-23 18:48

回復 5# freeffly


其實在版上幫網友解題時,我還是會常用第1種,因為〔容易閱讀〕公式的涵意;
 
至於實際使用時,我會將〔標題列〕的第1格〔定義名稱〕,
例如:標題列為〔A5:L5〕,則將〔$A$5〕定義名稱為〔RngHead〕,
[RngHead].cells(2, 8).FormulaR1C1="錄製公式1"  → H6公式
[RngHead].cells(2, 10).FormulaR1C1="錄製公式2"  → J6公式
∼或更多不同公式∼

這樣在〔標題列〕的上方〔插入列〕或〔刪除列〕,都不須再進入程式碼去修改,而能正常運作∼∼
作者: stillfish00    時間: 2015-9-23 19:14

回復 6# 准提部林
兩種格式也可以考慮用 Application.ConvertFormula 轉換哦,這樣就不用每次錄製了




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)