返回列表 上一主題 發帖

IF...判斷加總問題

IF...判斷加總問題

本帖最後由 074063 於 2015-7-31 21:57 編輯

請問下列函數如何寫成VBA

    G3=IF(C3="","",C3+F3)     下拉複製公式     
    G4=IF(C3-G3=0,"結","")    下拉複製公式  (格式儲存格, 若G4="結"   (粗體藍字)

請用錄製巨集方式再來修改範圍
  1. Sub 巨集3()
  2.     Range("G1").Select
  3.     ActiveCell.FormulaR1C1 = "=IF(RC[-4]="""","""",RC[-4]+RC[-1])"
  4.     Range("G1").Select
  5.     Selection.AutoFill Destination:=Range("G1:G4"), Type:=xlFillDefault
  6.     Range("G1:G4").Select
  7. End Sub
複製代碼
把範圍G4改變數
x=[C65536].end(xlup).Row
Range("G1:G" & x)
  1. Sub 巨集3()
  2. Dim x As Integer
  3.     x = [C65536].End(xlUp).Row
  4.     Range("G1").FormulaR1C1 = "=IF(RC[-4]="""","""",RC[-4]+RC[-1])"
  5.     Range("G1").AutoFill Destination:=Range("G1:G" & x), Type:=xlFillDefault
  6. End Sub
複製代碼

TOP

用錄製了解程序再來修改或是直接使用
  1. Sub test()
  2. For i = 1 To [C65536].End(xlUp).Row
  3.     If Cells(i, 3) = "" Then
  4.         Cells(i, 7) = ""
  5.     Else
  6.         Cells(i, 7) = Cells(i, 3) + Cells(i, 6)
  7.         Cells(i, 7).Font.Color = vbBlue
  8.         Cells(i, 7).Font.Bold = True
  9.     End If
  10. Next
  11. End Sub
複製代碼

TOP

回復 3# koo


    請問VBA能像函數一樣即時自動運算嗎

TOP

回復 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

本帖最後由 074063 於 2015-8-2 21:10 編輯

回復 5# lpk187

If Cells(Target.Row, 3) = "" And Cells(Target.Row, 6) = "" Then'當C欄或F欄皆空白時

請問target.row 不是列的意思嗎 @@

如果F欄也是公式帶出值的話, G欄好像就沒有作用

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

回復 8# lpk187


    感謝大大解答, 這個部份我再練習一下 :D

TOP

本帖最後由 074063 於 2015-8-3 00:09 編輯

Book1x.rar (8.96 KB) 回復 8# lpk187


    附檔給大大參考, 另詢問若資料多時, 使用函數也多速度會變慢...用VBA處理會不會比較好

TOP

        靜思自在 : 受人點水之恩,須當湧泉以報。
返回列表 上一主題