【问题标题】:Formatting data with three colors用三种颜色格式化数据
【发布时间】:2020-10-27 11:04:38
【问题描述】:

我在Excel表格中生成一定范围内的随机数据,有一些随机生成的异常值(这部分工作)。

我想为这些值赋予颜色,绿色表示正常值,黄色表示异常,红色表示超出限制。

我用最后一列表示 pH 值测试了这种方法,因为查看这些值很容易判断哪个是好还是坏,而无需使用颜色。

我使用 if/else if 条件来按颜色格式化值。红色值很好,因为它在代码中是一个固定值,但是黄色和绿色搞砸了,因为我尝试过的所有东西要么全是绿色,要么全是黄色。

我的整个代码。

Sub TAB1()
    'Déclaration
    Dim Tableau(95, 5)

    Dim r1, r2, r3, r4 As Double 'random variables
    
    Dim vNH4g, vNH4y, vNH4r, vNKg, vNKy, vNKr, vNGg, vNGy, vNGr, vpHg, vpHy, vpHr As Double
    'v for value, g for green (0<v<80% of max value or +/-5%), y for yellow (80<v<99 or +/- 5<v<10%), r for red (100% and +)

    Dim NH4fv, NKfv, NGfv, pHfv As Double
    'fv for final value

    Randomize

    'Enregistrement des valeurs dans le tableau
    For i = 0 To 95
        'Variables randoms
        r1 = Rnd * 100 + 1
        r2 = Rnd * 100 + 1
        r3 = Rnd * 100 + 1
        r4 = Rnd * 100 + 1
        
        'Variables pour remplir tableau
        vNH4g = Int((10.5 - 4.75) * Rnd + 4.75)
        vNH4y = Int((11 - 4.5) * Rnd + 4.5)
        vNH4r = Int((11 - 4.5) * Rnd + 11)
        
        vNKg = Int((12.6 - 6.65) * Rnd + 6.65)
        vNKy = Int((13.2 - 6.3) * Rnd + 6.3)
        vNKr = Int((13.2 - 6.3) * Rnd + 13.2)
        
        vNGg = Int((57.75 - 52.25) * Rnd + 52.25)
        vNGy = Int((60.5 - 49.5) * Rnd + 49.5)
        vNGr = Int((60.5 - 49.5) * Rnd + 60.5)
        
        vpHg = ((6.7 - 6.2) * Rnd + 6.2)
        vpHy = ((7.37 - 5.58) * Rnd + 5.58)
        vpHr = 8.5
        
        
        'Heure
        Tableau(i, 0) = Range("A" & i + 2)
        
        
        'N-NH4+
        If r3 < 80 Then Range("B" & i + 2) = vNH4g
        If 80 < r3 < 90 Then Range("B" & i + 2) = vNH4y
        If 90 < r3 Then Range("B" & i + 2) = vNH4r
        
        Tableau(i, 1) = Range("B" & i + 2)
        
        
        'NK
        If r3 < 80 Then Range("C" & i + 2) = vNKg
        If 80 < r3 < 90 Then Range("C" & i + 2) = vNKy
        If 90 < r3 Then Range("C" & i + 2) = vNKr
                            
        Tableau(i, 2) = Range("C" & i + 2)
        
        
        'NG
        If r3 < 80 Then Range("D" & i + 2) = vNGg
        If 80 < r3 < 90 Then Range("D" & i + 2) = vNGy
        If 90 < r3 Then Range("D" & i + 2) = vNGr
        
        Tableau(i, 3) = Range("D" & i + 2)
        
        
        'pH  
        If r4 <= 80 Then Range("E" & i + 2) = vpHg
        If 80 < r4 <= 90 Then Range("E" & i + 2) = vpHy
        If r4 > 90 Then Range("E" & i + 2) = vpHr
        
        Tableau(i, 4) = Range("E" & i + 2)
        
        pHfv = Range("E" & i + 2)
                                
        If pHfv = vpHr Then Range("E" & i + 2).Interior.Color = vbRed Else If vpHy <= pHfv < vpHy Then Range("E" & i + 2).Interior.Color = vbYellow Else If vpHg <= pHfv < vpHg Then Range("E" & i + 2).Interior.Color = vbGreen      
    Next

End Sub

【问题讨论】:

  • 很难从中看出究竟是什么问题。不能使用条件格式吗?

标签: excel vba


【解决方案1】:

我不建议在单行使用if,它限制了if中(and)的写法,使用结构化,最好理解和写,如果你想那么尝试单行,不如果结束。 我不知道我如何提出标准是否正确!检查您! 试试这个方法。

 If pHfv = vpHr Then
            range("E" & i + 2).Interior.Color = vbRed
        Else
            If (pHfv <= vpHy) And (pHfv > vpHg) Then
                range("E" & i + 2).Interior.Color = vbYellow
        Else
            If (pHfv < vpHg) Then
                range("E" & i + 2).Interior.Color = vbGreen
            End If
        End If
        End If

【讨论】:

  • 非常感谢您的帮助和解释,它按预期工作,并且使用多行比我所做的更清楚!祝你有美好的一天,谢谢
猜你喜欢
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 2013-06-10
  • 2020-07-17
相关资源
最近更新 更多