Board logo

標題: [發問] 請問FormulaR1C1該如何修改才能只記錄"值" [打印本頁]

作者: JackieKM    時間: 2016-7-19 00:41     標題: 請問FormulaR1C1該如何修改才能只記錄"值"

請教高手大大
      以下是我的程式
     .Range(Cells(Pos, 10), Cells(Pos, 20)).FormulaR1C1 = "=RC[-5]-R[-1]C[-5]"
     執行後儲存格顯示的計算後的值,但點選儲存格卻是公式(如=A5-A4)
     請問我該如何修正才能讓儲存格只記錄"值"就好,感謝。
作者: c_c_lai    時間: 2016-7-19 07:46

回復 1# JackieKM
.Range(Cells(Pos, 10), Cells(Pos, 20)).FormulaR1C1 = "=RC[-5]-R[-1]C[-5]"
.Range(Cells(Pos, 10), Cells(Pos, 20)) =  .Range(Cells(Pos, 10), Cells(Pos, 20)).Value
作者: JackieKM    時間: 2016-7-19 09:45

回復 2# c_c_lai

c_c_lai大大你好,謝謝您幫忙

    但我將程式改為 .Range(Cells(Pos, 10), Cells(Pos, 20)).Value = "=RC[-5]-R[-1]C[-5]"後,
    情況還是一樣,點選儲存格,裡面出現的還是公式,
    請容我解釋一下,我想做的是下面的計算,但希望的是計算後只記錄"值"就好,
    儲存格A4 - A3,將得到的值記錄在H4;儲存格B4 - B3,將得到的值記錄在I4, 等等.....
    希望大大能幫忙指點,再次感謝。
作者: c_c_lai    時間: 2016-7-19 09:52

本帖最後由 c_c_lai 於 2016-7-19 09:53 編輯

回復 3# JackieKM
你會錯意了:
  1. .Range(Cells(Pos, 10), Cells(Pos, 20)).FormulaR1C1 = "=RC[-5]-R[-1]C[-5]"
  2. .Range(Cells(Pos, 10), Cells(Pos, 20)) =  .Range(Cells(Pos, 10), Cells(Pos, 20)).Value
複製代碼
這兩行它是連續的。
換句話說,你原先的
  1. .Range(Cells(Pos, 10), Cells(Pos, 20)).FormulaR1C1 = "=RC[-5]-R[-1]C[-5]"
複製代碼
的下一行再插入
  1. .Range(Cells(Pos, 10), Cells(Pos, 20)) =  .Range(Cells(Pos, 10), Cells(Pos, 20)).Value
複製代碼
測試便知。
作者: JackieKM    時間: 2016-7-19 10:27

回復 4# c_c_lai

c_c_lai大大你好,再次謝謝您指點,

      不好意思,是我誤會你的意思了,經過更改後確定OK,但還有以下兩點問題請教,
       1) 原本的儲存格為小數點兩位數,但經過相減後(假設兩者相減後值為 0.1),得到的結果卻出現0.0999999999999801
       2) 使用R1C1時,FormulaR1C1紀錄的為公式,不知是否有其他方式可以直接紀錄"值",會這樣問是因為我想簡化程式,謝謝。
作者: c_c_lai    時間: 2016-7-19 10:36

本帖最後由 c_c_lai 於 2016-7-19 10:42 編輯

回復 5# JackieKM
  1. .Range(Cells(Pos, 10), Cells(Pos, 20)).FormulaR1C1 = "=RC[-5]-R[-1]C[-5]"
  2. .Range(Cells(Pos, 10), Cells(Pos, 20)).NumberFormatLocal = "#0.00"
  3. .Range(Cells(Pos, 10), Cells(Pos, 20)) =  .Range(Cells(Pos, 10), Cells(Pos, 20)).Value
複製代碼
或者是
  1.     With .Range(Cells(Pos, 10), Cells(Pos, 20))
  2.         .FormulaR1C1 = "=RC[-5]-R[-1]C[-5]"
  3.         .NumberFormatLocal = "#0.00"
  4.         .Value = .Value
  5.     End With
複製代碼

作者: 准提部林    時間: 2016-7-19 13:28

.FormulaR1C1 = "=ROUND(RC[-5]-R[-1]C[-5],2)"

避免有浮點數, 直接在原公式加ROUND也可!
作者: c_c_lai    時間: 2016-7-19 14:08

回復 7# 准提部林
不錯的處理方式。謝謝指點!
作者: JackieKM    時間: 2016-7-19 14:10

回復 6# c_c_lai

c_c_lai大大你好,再次謝謝您指點,

        第一點是我沒講清楚,原本我已在儲存格格式中設定為小數點兩位數,顯示的結果也是小數點兩位數,
        但點選儲存格,看到的結果卻是類似0.0999999999999801,加入NumberFormatLocal 後還是一樣,
        之前此程式使用For..Next..時並無此問題,請問是因為使用R1C1的關係嗎??  謝謝。
作者: c_c_lai    時間: 2016-7-19 14:24

本帖最後由 c_c_lai 於 2016-7-19 14:26 編輯

回復 9# JackieKM
當宣告 .Range(Cells(Pos, 10), Cells(Pos, 20)).NumberFormatLocal = "#0.00"
它應該會自動將該指定之 "儲存格格式" 修正為 "數值型態 小數兩位。
與 R1C1 無關。
作者: 准提部林    時間: 2016-7-19 20:34

回復 5# JackieKM


原本的儲存格為小數點兩位數,但經過相減後(假設兩者相減後值為 0.1),得到的結果卻出現0.0999999999999801

參與計算的數值若有小數點, 偶會發生[浮點數]的結果, 儲存格格式雖設為小數2位, 看起來無異狀, 但實際數值已非原貌,
=0.011-0.01 > 結果:0.000999999999999999
所以要養成習慣套一層ROUND來進位, 這是EXCEL的宿命!
作者: JackieKM    時間: 2016-7-21 13:31

回復 11# 准提部林


    感謝版主的指點,實際運用沒問題,我想我已接受Excel的宿命了,謝謝。




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