0

私はvbaに秀でているのはまったく新しいので、これは次の条件を満たすために書いたものです。

  • sumAがsumBまたはsumCより大きく、次に「G」
  • sumBがsumAまたはsumCより大きく、次に「Y」
  • sumCがsumAまたはsumBより大きく、次に「R」

gr、yr、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

エラーが発生しなかったので、うまくいくと思いましたが、セルの範囲に数値を入れても、「全体的なリスク」のセルは空白のままです。

ありがとうございました!

4

2 に答える 2

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 
于 2012-10-23T19:43:06.420 に答える
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
于 2012-10-23T19:46:56.377 に答える