2012-10-23 39 views
0

我是很新的Excel VBA中,這是我寫的,以滿足以下條件ExcelVBA如果SumA> SumB或Sum C然後「G」如何?

  • SUMA比sumB或sumC大於「G」
  • sumB不是SUMA或sumC然後「Y」更大
  • sumC大於SUMA或sumB然後「R」

GR,年的範圍內,RR細胞是數字,我將手動輸入。

Dim gr As Range 
Dim yr As Range 
Dim rr As Range 
Dim gr1 As Long 
Dim yr1 As Long 
Dim rr1 As Long 
Dim overallrisk As Range 

Set overallrisk = Sheets("Dashboard").Range("C24") 
Set gr = Sheets("Dashboard").Range("C30:C32").Range("C33:C35").Range("D33:D35") 
Set yr = Sheets("Dashboard").Range("C27:C29").Range("D30:D32").Range("E33:E35") 
Set rr = Sheets("Dashboard").Range("D27:D29").Range("E27:E29").Range("E30:E32") 

gr1 = Application.WorksheetFunction.Sum(gr) 
yr1 = Application.WorksheetFunction.Sum(yr) 
rr1 = Application.WorksheetFunction.Sum(rr) 

If gr1 > yr1 Or rr1 Then 
    overallrisk = "G" 
ElseIf yr1 > gr1 Or rr1 Then 
    overallrisk = "Y" 
ElseIf rr1 > yr1 Or gr1 Then 
    overallrisk = "R" 
End If 

,所以我認爲它會工作,但「overallrisk」細胞仍是空白,即使我把號碼在單元格的範圍,我沒有得到任何錯誤。

謝謝!

回答

0

這將清理你的代碼,使其更具可讀性,並應允許它正常工作!

Dim gr As Range, yr As Range, rr As Range 
Dim gr1 As Long, yr1 As Long, rr1 As Long 
Dim overallrisk As Range 
Dim wks As Worksheet 

Set wks = Sheets("Dashboard") 

With wks 

    Set overallrisk = .Range("C24") 
    Set gr = .Range("C30:C32,C33:C35,D33:D35") 
    Set yr = .Range("C27:C29,D30:D32,E33:E35") 
    Set rr = .Range("D27:D29,E27:E29,E30:E32") 

    gr1 = Application.WorksheetFunction.Sum(gr) 
    yr1 = Application.WorksheetFunction.Sum(yr) 
    rr1 = Application.WorksheetFunction.Sum(rr) 

    If gr1 > yr1 Or gr1 > rr1 Then 
     overallrisk.Value = "G" 
    ElseIf yr1 > gr1 Or yr1 > rr1 Then 
     overallrisk.Value = "Y" 
    ElseIf rr1 > yr1 Or rr1 > gr1 Then 
     overallrisk.Value = "R" 
    End If 

End With 
+0

是的,它的工作原理!非常感謝! – Doolie1106

+0

@ user1765813 - >除了你的'IF'陳述不準確之外,你調用你的範圍的方式似乎不正確。我從來沒有見過這樣一個非連續的範圍。只是想我會指出你未來所知道的不準確之處。 –

1

我相信問題是您的最終If聲明。您有:

If gr1 > yr1 Or rr1 Then 

,我相信你打算意思是:

If (gr1 > yr1) Or (gr1 > rr1) Then 

Excel是OR後看着你的條件,並評估其作爲一個單獨的聲明。你想:

If gr1 > yr1 Or gr1 > rr1 Then 
    overallrisk = "G" 
ElseIf yr1 > gr1 Or yr1 > rr1 Then  
    overallrisk = "Y" 
ElseIf rr1 > yr1 Or rr1 > gr1 Then  
    overallrisk = "R" 
End If 
+0

感謝您的快速響應!我嘗試了你的建議,但它仍然是空白的,我似乎無法弄清楚爲什麼...... perahps它不會將數字加起來......? – Doolie1106

+0

絕對在'gr1 = Application.WorksheetFunction.Sum(gr)'中放置一個斷點,遍歷代碼,看看是否有任何設置。 – LittleBobbyTables

+0

對不起,但我不知道什麼步驟或斷點是...! – Doolie1106