2012-10-22 5 views
2

프로젝트의 상태를 나타내는 재무 데이터가 있으며 분산에 따라 건강을 나타내는 색과 문자가 채워집니다. 예를 들어, 변수가 5 % 미만이면 "G",> 5 %, 20 % 미만의 색으로 녹색이 채워지고 "Y"와 20 % = "R"이 채워집니다. 나는 그것을 얻기 위해 if 문을 사용했다. 그러나 전체 프로젝트의 색상을 채워야합니다.VBA Excel의 조건부 조건 요구 사항

이 5 개 프로젝트이며, 이러한 요구 사항은 다음과 같습니다 5 개 프로젝트 중 하나가있는 경우

  1. 은 "R"을 선택 후 전반적인 건강은 1/5 프로젝트는 "Y"입니다
  2. 경우 "R"입니다 및 4/5 = "G"이면 전체 건강 상태는 "G"입니다
  3. 2/5 = "Y"및 3/5 "G"이면 전체 건강 상태는 "Y"입니다
  4. 3/5 = "Y"와 2/5 "G"이면 전체 건강은 "Y"
  5. 4/5 = "Y"및 1/5 "G"그러면 "Y"
  6. 프로젝트 G의 경우

그래서, 두번째 프로젝트는 Y 3 프로젝트입니다 5/5 = "G"다음 "G"경우 6,

  • 하면 5/5 = "Y"다음 "Y"
  • Y, 4 프로젝트는 G이고, 5 번째 프로젝트는 RI가 전반적인 건강을 위해 "R"을 포퓰릿으로 사용하기를 원합니다.

    if 문을 사용해 보았지만 조합의 양이 너무 많습니다.

    VBA를 사용하여 이러한 종류의 "비율"요구 사항을 만드는 방법은 무엇입니까?

    은 ELSEIF이 규칙에 따라 R, Y, 또는 g에 해당하는 셀을 설정하는 경우 간단한을 즉 각 Y, R, G는 계산을위한 변수를 생성하고 할 수있는 당신에게

  • +0

    , G 등은 가능할까요? –

    답변

    0

    감사합니다

    당신이 건강을 표시하는 숫자 값을 사용하고 단순히 하나 개의 크기는 모두 공식에 맞는 사용하는 대신 R의
    Option Explicit 
    
    Sub getcounts() 
    
    Dim g As Long 
    Dim r As Long 
    Dim y As Long 
    Dim ovrallhealth As Range 
    Dim variancerange As Range 
    Set variancerange = Sheets(1).Range("A1:A5") 
    Set ovrallhealth = Sheets(1).Range("B1") 
    
    y = Application.WorksheetFunction.CountIf(variancerange, "y") 
    g = Application.WorksheetFunction.CountIf(variancerange, "g") 
    r = Application.WorksheetFunction.CountIf(variancerange, "r") 
    
    If r > 0 Then 
        ovrallhealth = "R" 
    ElseIf y = 1 And g = 4 Then 
        ovrallhealth = "G" 
    ElseIf y = 2 And g = 3 Then 
        ovrallhealth = "Y" 
    ElseIf y = 3 And g = 2 Then 
        ovrallhealth = "Y" 
    ElseIf y = 4 And g = 1 Then 
        ovrallhealth = "Y" 
    ElseIf y = 5 Then 
        ovrallhealth = "Y" 
    ElseIf g = 5 Then 
        ovrallhealth = "G" 
    End If 
    
    End Sub 
    
    +0

    안녕 스콧, 멋진 생각입니다. 매크로에 코드를 넣으려고했지만 실행하려고하면 "변수가 정의되지 않았습니다"라는 오류 메시지가 표시되고 설정된 전체 코드가 강조 표시됩니다. 왜 이런 일이 일어나는 걸까요? 이것은 내가 작성한 것이다. varaincerange = sheets (1) .Range ("B5 : B53") overallheatlh = sheets (1) .Range ("B2") – Doolie1106

    +0

    범위로 variancerange 및 overallhealth를 설정 했습니까? 나는 또한 철자를 검사 할 것이다. 또한 시트 인덱스를 사용하는 대신 시트 ("시트 이름")를 말할 수 있습니다. 범위 ("B2") – scott

    +0

    예! 이제 작동합니다! 너무 많이 스콧 감사합니다 그것은 극단적으로 감사합니다! – Doolie1106