返回列表 上一主題 發帖

IF...判斷加總問題

回復 4# 074063

VBA皆是利用事件來啟動程式的,所以當然可以做即時運算,只是看你用什麼樣的事件來啟動罷了,
我以 G3=IF(C3="","",C3+F3)     下拉複製公式  這個公式來做例子,可以利用工作表事件"儲存格變更事件"來實現如下列中的程式
程式說明:當你在C欄或則F欄的第3列起,輸入數字(變更儲存格內容)就會啟動這個事件來實現我們要的目的。
但它必須放在工作表事件簿中(如下圖例放置的位置)
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Row > 2 And Target.Column = 6 Or Target.Column = 3 Then'
  3.     If Cells(Target.Row, 3) = "" And Cells(Target.Row, 6) = "" Then'當C欄或F欄皆空白時
  4.         Cells(Target.Row, "G") = "" '則G欄為空白
  5.     Else
  6.         Cells(Target.Row, "G") = Cells(Target.Row, "C") + Cells(Target.Row, "F")'否則C欄+F欄
  7.     End If
  8. End If
  9. End Sub
複製代碼

TOP

本帖最後由 lpk187 於 2015-8-2 22:09 編輯

回復 6# 074063


    target.row 是列沒錯,但你忽略了"3"是C欄!6是F欄。=>Cells( target.Row, target.Column)target.Column是3或6
target是作用儲存格,假設你在C3鍵入數值時,target就是那就作用的儲存格,VBA若用程式計算的話並不會有公式顯示在儲存格中(G3),而是會直接顯示計算過後的值

如果F欄也是公式帶出值的話, G欄好像就沒有作用
Ex:1.F欄是沒有公式的,那只是用程式判斷是否為空白,
      2.G欄若沒作用可能是你沒按照我圖所示放在該放的地方!

下面是回答1樓的問題
另外VBA是用來幫你自動化或者是幫你執行複雜工作,若 用來寫函數,除非在儲存格中的函數會因某種因素變化時,否則是沒有意義的!
如下圖的選項 >公式中的紅框中為什麼會會有活頁簿計算的選項,這是為了當在工作表中函數很多很多的情況下讓你選擇是不是要自動或者手動,但VBA卻沒有這個問題它只幫你做程式的流程而已,而不會全部走一次!

TOP

本帖最後由 lpk187 於 2015-8-2 22:31 編輯

回復 6# 074063


    我上一樓的回答好像有些誤會你的意思!
以If Cells(Target.Row, 3) = "" And Cells(Target.Row, 6) = "" Then'當C欄或F欄皆空白時
...
如果F欄也是公式帶出值的話, G欄好像就沒有作用
來說
若是F欄有公式的話,And Cells(Target.Row, 6) = "" 是可以刪除的!

當程式設計師在寫程式時,大部份都會依照整個工作表或者擴大到整個活頁簿來做考量,而不會只用單一函數就當成基礎,考慮的方式不同,執行後也會因考慮的不同而有不同的結果。
就像這個誤解一樣,我在寫這程式時想到G3=IF(C3="","",C3+F3),C3是空白或非空白,而不知道F3有沒有公式,但我為了補足考慮的不周而寫下And Cells(Target.Row, 6) = ""
所以最後建議你若有問題時可以上傳你的部份檔案來,好讓要解答的人有所因應!也會更周全的!

TOP

回復 10# 074063

試試看吧!
    Book1x.rar (16.47 KB)

TOP

回復 13# 074063


    誤KEY IN資料在12列以上也會運算呢
不懂?你原公式不是大於12列以上都要運算嗎?

TOP

回復 15# 074063

這樣再試試
    Book1x.rar (16.27 KB)

TOP

回復 17# 074063

請參考VBA說明:Worksheet.Change 事件
及善用區域變數視窗觀看,就知道那是什麼意思了!

TOP

        靜思自在 : 能付出愛心就是福,能消除煩惱就是慧。
返回列表 上一主題