Board logo

標題: [發問] 這個可以使用IF公式嗎? [打印本頁]

作者: appr    時間: 2012-1-1 18:41     標題: 這個可以使用IF公式嗎?

請各位看看我該用哪種公式才對!!

第一:我現在有一個公式是=SUM(D2+F2-(C2))

第二:  我現在要多增加一個公式是   E2的數值會跟著D2跑   也就是    今天D2 不管是10   ,    20    ,21.......

E2的數值會跟著 D2  走   , 然後再帶入到第一個公式去運算!!

請問我該用甚麼樣的公式?  是IF嗎?

請各位幫幫我!!!我已經想不出來該用甚麼了!!!!
作者: register313    時間: 2012-1-1 18:52

本帖最後由 register313 於 2012-1-1 19:12 編輯

回復 1# appr
公式1 :   =D2+F2-C2  或 =SUM(D2,F2,-C2)
公式2 :   E2=D2   
             E2的數值會跟著D2走,然後再帶入到第一個公式去運算

公式1裡並沒有出現E2 如何把E2代入公式1去運算???

是這樣嗎
公式1 :   =D2+E2-C2  或 =SUM(D2,E2,-C2)
公式2 :   E2=D2
作者: appr    時間: 2012-1-1 21:50

抱歉是我少說了

E2是我多增加的一個假設值     它會先D2的值相互呼應, 也就是說D2 的值或者是E2 只要更動到其中一個

那另外一個值也會更動

假設D2 為 20    E2 應為20     若D2更正為15    E2應立即更動為15

之後再帶入第一個公式中 , 也就是=SUM(D2+F2-(C2))
作者: register313    時間: 2012-1-1 22:36

本帖最後由 register313 於 2012-1-1 22:49 編輯

回復 3# appr
D2與E2兩變數之值既然一定相等 為何不只用一個變數呢?

如果一定要D2與E2兩變數連動 那可能一定要用VBA才作的到
  1. Private Sub worksheet_change(ByVal target As Range)
  2. If target.Address = "$D$2" Then
  3.    Range("E2") = Range("D2")
  4. End If
  5. If target.Address = "$E$2" Then
  6.    Range("D2") = Range("E2")
  7. End If
  8. End Sub
複製代碼
[attach]8985[/attach]
作者: appr    時間: 2012-1-1 23:47

基本上D2跟E2值是一樣的,是確定的!!!!如果要用同一個變數是可以的!!!

只是差在於E2是D2附屬說明底下的細項!!!如果可以的話我也不想~"~

所以不顯示出來!!!有時候會造成項目上的混亂

哇~~~~~要動用到VBA 那我真的必須好好研究一下!!!感謝各位的幫忙
作者: lcc_seven    時間: 2012-1-3 17:51

我以前都自己設一個button,但是這樣要按一下才能更新

如果要儲存格的數值即時更新,建議使用自訂函數的方法會比較好
作者: appr    時間: 2012-1-3 21:38

自訂函數?是要用哪一個???   抱歉我是真的才又剛開始重學的.....所以滿多不懂得!!!

方便的話,可以再詳細解答一下嗎?   感謝!!!!
作者: lcc_seven    時間: 2012-1-4 00:40

回復 7# appr

先在VBA編輯器新增一個模組,把下面的Function貼上

Function E2_equal_D2(SelectValue)
E2_equal_D2 = SelectValue
End Function

點選E2,插入函數,你會發現多一個【使用者定義】選項,點下去就可以看到這個自訂函數 E2_equal_D2

因為有設定引數,所以要把引數指定D2,跟平常使用函數一樣,點一下D2就可以了

你可以試一下,如此D2的數值一改變,E2會隨著改變

原本的 =SUM(D2+F2-(C2)) 依舊可以計算
作者: appr    時間: 2012-2-19 16:50

不好意思現在才回!!!但我現在才會了......
作者: appr    時間: 2012-2-23 21:23

回復 8# lcc_seven


    不好意思我想在請問一個問題!!!
現在我的方法是使用lcc_seven  用模組的方法!!!但是為了要更改

我目前的笨方法是使用複製貼上然後在更改名稱!!!

但要直接加到第一個模組裡面卻發生編輯錯誤~"~

但如果用VB的話是該怎麼修改???有點搞不清楚了!!!

另外如果想要跟下面的這個做結合
是直接在往下面加入就好嗎??
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngCA = Intersect(Target, RngA)
  5. Set RngCS = Intersect(Target, RngB)
  6. If Not RngCA Is Nothing Then
  7.    RngCA.Offset(0, 2) = RngCA.Offset(0, 2) + RngCA.Value
  8.    RngCA.Value = ""
  9. End If
  10. If Not RngCS Is Nothing Then
  11.    RngCS.Offset(0, 1) = RngCS.Offset(0, 1) - RngCS.Value
  12.    RngCS.Value = ""
  13. End If
  14. End Sub
複製代碼
那我加入後,還是會發生名稱錯誤!!!

那是需要甚麼的連結名稱嗎?
作者: register313    時間: 2012-2-23 23:04

回復 10# appr

工作表模組
  1. Private Sub worksheet_change(ByVal target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngCA = Intersect(target, RngA)
  5. Set RngCS = Intersect(target, RngB)
  6. If Not RngCA Is Nothing Then
  7.    RngCA.Offset(0, 2) = RngCA.Offset(0, 2) + RngCA.Value
  8.    RngCA.Value = ""
  9. End If
  10. If Not RngCS Is Nothing Then
  11.    RngCS.Offset(0, 1) = RngCS.Offset(0, 1) - RngCS.Value
  12.    RngCS.Value = ""
  13. End If
  14. If target.Address = "$D$2" Then
  15.    Range("E2") = Range("D2")
  16. End If
  17. If target.Address = "$E$2" Then
  18.    Range("D2") = Range("E2")
  19. End If
  20. End Sub
複製代碼

作者: appr    時間: 2012-2-24 01:04

回復 11# register313


    謝謝R大的回覆

所以應該是直接接下去而不是先接Private Sub worksheet_change(ByVal target As Range):'(

那如果從第14項開始我要增加成複數的儲存格

是要像第17項的方式下去 , 去做 複製貼上 然後更改成我要的儲存格

那這樣的話,如果太多會不會因此,有時會發生錯誤?

還是說我想太多???
作者: register313    時間: 2012-2-24 08:09

回復 12# appr
  1. Private Sub worksheet_change(ByVal target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngCA = Intersect(target, RngA)
  5. Set RngCS = Intersect(target, RngB)
  6. If Not RngCA Is Nothing Then
  7.    RngCA.Offset(0, 2) = RngCA.Offset(0, 2) + RngCA.Value
  8.    RngCA.Value = ""
  9. End If
  10. If Not RngCS Is Nothing Then
  11.    RngCS.Offset(0, 1) = RngCS.Offset(0, 1) - RngCS.Value
  12.    RngCS.Value = ""
  13. End If
  14. Set RngD = Range("D2:D4")
  15. Set RngE = Range("E2:E4")
  16. Set RngDE = Intersect(target, RngD)
  17. Set RngED = Intersect(target, RngE)
  18. If Not RngDE Is Nothing Then          'E2~E4=D2~D4
  19.    RngE.Value = RngD.Value
  20. End If
  21. If Not RngED Is Nothing Then          'D2~D4=E2~E4
  22.    RngD.Value = RngE.Value
  23. End If
  24. End Sub
複製代碼

作者: appr    時間: 2012-2-24 21:59

本帖最後由 appr 於 2012-2-24 22:07 編輯

回復 13# register313


謝謝r大的分享,我已經大概都清楚了!!!只是本於好奇的想法,想再多問幾個問題

那如果是無論是第2,3 項 或是  14,15 項  以及18,20項
  1. Private Sub worksheet_change(ByVal target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngCA = Intersect(target, RngA)
  5. Set RngCS = Intersect(target, RngB)
  6. If Not RngCA Is Nothing Then
  7.    RngCA.Offset(0, 2) = RngCA.Offset(0, 2) + RngCA.Value
  8.    RngCA.Value = ""
  9. End If
  10. If Not RngCS Is Nothing Then
  11.    RngCS.Offset(0, 1) = RngCS.Offset(0, 1) - RngCS.Value
  12.    RngCS.Value = ""
  13. End If
  14. Set RngD = Range("D2:D4")
  15. Set RngE = Range("E2:E4")
  16. Set RngDE = Intersect(target, RngD)
  17. Set RngED = Intersect(target, RngE)
  18. If Not RngDE Is Nothing Then          'E2~E4=D2~D4
  19. RngE.Value = RngD.Value
  20. End If
  21. If Not RngED Is Nothing Then          'D2~D4=E2~E4
  22. RngD.Value = RngE.Value
  23. End If
  24. End Sub
複製代碼
這些都是屬於連接的, 那如果是用跳的一項 ﹝A2,A4,A6﹞的是要怎麼做???

第二個是這整個程式碼 是以 A2的儲存格 加上 數字 等於 C2的 數字合
                                        以及B2的儲存格  減上 數字 等於 C2的數字合   

那麼如果我要把B2的儲存格換成C2

那麼 這個程式碼 所出來的結果會在D2:D4顯示

不過A2會變成【 -】號         而我更動的  C2 也是【 -】號     所以出來的答案會都是負的  

那我應該是要怎麼做會比較更動會比較好?

另外如果我是想要指定一個儲存格 ,我自己有做一個更動 , 雖然我知道一定是錯的,但還是希望各位過目看看
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngC = Range("G2:G4")
  5. Set RngCA = Intersect(Target, RngA)
  6. Set RngCS = Intersect(Target, RngB)
  7. Set RngCD = Intersect(Target, RngC)
  8. If Not RngCA Is Nothing Then
  9.    RngCD.Offset(0, 2) = RngCA.Offset(0, 2) + RngCA.Value
  10.    RngCA.Value = ""
  11. End If
  12. If Not RngCS Is Nothing Then
  13.    RngCD.Offset(0, 1) = RngCS.Offset(0, 1) - RngCS.Value
  14.    RngCS.Value = ""
  15. End If
  16. End Sub
複製代碼

作者: register313    時間: 2012-2-24 23:12

回復 14# appr


問題一   Set RNG = Union([A2], [A4], [A6])
問題二   不了解說明及功能
問題三    不了解說明及功能
作者: appr    時間: 2012-2-24 23:41

本帖最後由 appr 於 2012-2-24 23:42 編輯

回復 15# register313

先回答三,在回答二

   問題三的說明:原本這個程式碼下是 C2 為最後答案 ,也就是說 A2 若為10     那 C2為8   
                                                                                                                      B2 若為 2

那麼如果要更改C2的儲存格到 G2  該如何怎麼寫起

功能說明: 變動最後答案儲存格

附註:最後的程式碼是我自己照著上面的想法,去試著去打出來的!!

只是看不確定是否正確,想讓大家看看錯在哪?

延續問題3

問題二的說明:    如果把B2 的儲存格變動 到 C2   因 問題3的程式碼的設定為  往後推一個儲存格為答案,故      

若  A2 為   4           D2 為   3
     C2 為   1   

但我試著照上面更動後 卻發現    A2為4的情況下      D2為   -4
                  
                                                    若更動後的C2輸入 4   那   D2 為  -4

功能:變動中間的儲存格
作者: register313    時間: 2012-2-25 00:06

回復 16# appr

問題3
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngCA = Intersect(Target, RngA)
  5. Set RngCS = Intersect(Target, RngB)
  6. If Not RngCA Is Nothing Then
  7.    RngCA.Offset(0, 6) = RngCA.Offset(0, 6) + RngCA.Value
  8.    RngCA.Value = ""
  9. End If
  10. If Not RngCS Is Nothing Then
  11.    RngCS.Offset(0, 5) = RngCS.Offset(0, 5) - RngCS.Value
  12.    RngCS.Value = ""
  13. End If
  14. End Sub
複製代碼

作者: appr    時間: 2012-2-25 00:48

回復 17# register313


    了解!!我這兩個問題是出在哪裡了!!!感謝R大的回覆耶!!
作者: appr    時間: 2012-2-27 01:03

回復 17# register313

不好意思,又出現在了兩個問題想請教一下, 我想要同時讓A2跟著C2以及G2做一樣的動作!!

但每次用好後 ,我的excel就當掉了!!!是程式碼我打錯了嗎?

以及如果想讓 G2可以是自動判別月份 !!!  也就是說 2月份是在G2 當 3月份會自動跳到  H2 這是要怎麼設定????
  1. Private Sub worksheet_change(ByVal target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngCA = Intersect(target, RngA)
  5. Set RngCS = Intersect(target, RngB)
  6. If Not RngCA Is Nothing Then
  7.    RngCA.Offset(0, 2) = RngCA.Offset(0, 2) + RngCA.Value
  8.    RngCA.Value = ""
  9. End If
  10. If Not RngCS Is Nothing Then
  11.    RngCS.Offset(0, 1) = RngCS.Offset(0, 1) - RngCS.Value
  12.    RngCS.Value = ""
  13. End If
  14. Set RngD = Range("D2:D4")
  15. Set RngE = Range("E2:E4")
  16. Set RngDE = Intersect(target, RngD)
  17. Set RngED = Intersect(target, RngE)
  18. If Not RngDE Is Nothing Then          'E2~E4=D2~D4
  19.    RngE.Value = RngD.Value
  20. End If
  21. If Not RngED Is Nothing Then          'D2~D4=E2~E4
  22.    RngD.Value = RngE.Value
  23. End If
  24. Set RngA = Range("A2:A4")
  25. Set RngCA = Intersect(target, RngA)
  26. If Not RngCA Is Nothing Then
  27.    RngCA.Offset(0, 6) = RngCA.Offset(0, 6) + RngCA.Value
  28.    RngCA.Value = ""
  29. End If
  30. End Sub
複製代碼

作者: register313    時間: 2012-2-27 10:13

本帖最後由 register313 於 2012-2-27 10:14 編輯

回復 19# appr

目前功能如下
[attach]9778[/attach]
  1. Private Sub worksheet_change(ByVal target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngCA = Intersect(target, RngA)
  5. Set RngCS = Intersect(target, RngB)
  6. If Not RngCA Is Nothing Then
  7.    RngCA.Offset(0, 2) = RngCA.Offset(0, 2) + RngCA.Value
  8.    RngCA.Offset(0, 6) = RngCA.Offset(0, 6) + RngCA.Value
  9.    RngCA.Value = ""
  10. End If
  11. If Not RngCS Is Nothing Then
  12.    RngCS.Offset(0, 1) = RngCS.Offset(0, 1) - RngCS.Value
  13.    RngCS.Value = ""
  14. End If
  15. Set RngD = Range("D2:D4")
  16. Set RngE = Range("E2:E4")
  17. Set RngDE = Intersect(target, RngD)
  18. Set RngED = Intersect(target, RngE)
  19. If Not RngDE Is Nothing Then          'E2~E4=D2~D4
  20.    RngE.Value = RngD.Value
  21. End If
  22. If Not RngED Is Nothing Then          'D2~D4=E2~E4
  23.    RngD.Value = RngE.Value
  24. End If
  25. End Sub
複製代碼
其餘問題以excel檔案作成範例再加以說明
作者: appr    時間: 2012-2-27 21:35

回復 20# register313

想在請問一下,是否可以用自動判別的方法!! 當現在為2月份的時候為 G2   ,當現在為3月份的時候為H2   ,當 現在為4月份的時候.......

或者是說可以用自訂表單的方式 ?  我有用一個自訂表單  !!   但是有哪邊打錯  一直顯示有 End With    沒有   With   ???到底是怎麼了????



    [attach]9782[/attach]
作者: register313    時間: 2012-2-27 22:09

回復 21# appr
  1. Private Sub worksheet_change(ByVal target As Range)
  2. Set RngA = Range("A2:A4")
  3. Set RngB = Range("B2:B4")
  4. Set RngCA = Intersect(target, RngA)
  5. Set RngCS = Intersect(target, RngB)
  6. If Not RngCA Is Nothing Then
  7.    RngCA.Offset(0, 2) = RngCA.Offset(0, 2) + RngCA.Value
  8.    RngCA.Offset(0, Month(Now) + 4) = RngCA.Offset(0, Month(Now) + 4) + RngCA.Value
  9.    RngCA.Value = ""
  10. End If
  11. If Not RngCS Is Nothing Then
  12.    RngCS.Offset(0, 1) = RngCS.Offset(0, 1) - RngCS.Value
  13.    RngCS.Value = ""
  14. End If
  15. Set RngD = Range("D2:D4")
  16. Set RngE = Range("E2:E4")
  17. Set RngDE = Intersect(target, RngD)
  18. Set RngED = Intersect(target, RngE)
  19. If Not RngDE Is Nothing Then          'E2~E4=D2~D4
  20.    RngE.Value = RngD.Value
  21. End If
  22. If Not RngED Is Nothing Then          'D2~D4=E2~E4
  23.    RngD.Value = RngE.Value
  24. End If
  25. End Sub
複製代碼

作者: appr    時間: 2012-2-27 22:13

回復 22# register313
  1. (0, Month(Now) + 4)
複製代碼
想請問一下 Month 是代表月份   Now 是代表現在的日期   

那+4所代表的含意  是   顯示的位址嗎?
作者: register313    時間: 2012-2-27 22:23

回復 23# appr
RngCA在A欄(A2~A4與輸入進貨值之交叉)
若現為1月:RngCA.Offset(0, Month(Now) + 4)= RngCA.Offset(0, 1 + 4)=RngCA.Offset(0, 5)
              =A欄向右偏移5欄=F欄
若現為2月:RngCA.Offset(0, Month(Now) + 4)= RngCA.Offset(0, 2 + 4)=RngCA.Offset(0, 6)
              =A欄向右偏移6欄=G欄
作者: appr    時間: 2012-2-27 23:10

回復 24# register313


    我還能說甚麼????

我想得到的  就只有.....


厲害厲害!!!!
作者: appr    時間: 2012-2-29 22:09

回復 24# register313
  1. 15.Set RngD = Range("D2:D4")

  2. 16.Set RngE = Range("E2:E4")

  3. 17.Set RngDE = Intersect(target, RngD)

  4. 18.Set RngED = Intersect(target, RngE)

  5. 19.If Not RngDE Is Nothing Then          'E2~E4=D2~D4

  6. 20.   RngE.Value = RngD.Value

  7. 21.End If

  8. 22.If Not RngED Is Nothing Then          'D2~D4=E2~E4

  9. 23.   RngD.Value = RngE.Value

  10. 24.End If
複製代碼
想要請問一下!!!目前這個屬於 雙向!!!  也就是說不管是  對著   D2  或是   E2  輸入都是一樣的

如何才能鎖定一個儲存格  也就是單向的方式???
作者: register313    時間: 2012-2-29 23:47

回復 26# appr

單向 D => E     若E更改後會強迫等於D
  1. Set RngD = Range("D2:D4")
  2. Set RngE = Range("E2:E4")
  3. Set RngDE = Intersect(target, RngD)
  4. Set RngED = Intersect(target, RngE)
  5. If (Not RngDE Is Nothing) Or (Not RngED Is Nothing) Then          'E2~E4=D2~D4
  6.    RngE.Value = RngD.Value
  7. End If
複製代碼





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