標題:
[發問]
請問代碼中輸入公式的表達方式
[打印本頁]
作者:
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/)