Excel 用三种颜色格式化数据

Excel 用三种颜色格式化数据,excel,vba,Excel,Vba,我在Excel表格中生成一定范围内的随机数据,随机生成一些异常值(此部分正在工作) 我想给这些值颜色,绿色表示正常值,黄色表示异常值,红色表示超出限值 我用最后一列测试了这个方法,表示pH值,因为看这些值,不用使用颜色就可以很容易地分辨出哪个是好的还是坏的 我使用if/elseif条件按颜色格式化值。红色的值很好,因为它在代码中是一个固定值,但是黄色和绿色是混乱的,因为我尝试过的所有东西要么全绿色,要么全黄色 我的全部密码 Sub TAB1() 'Déclaration Dim

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

我想给这些值颜色,绿色表示正常值,黄色表示异常值,红色表示超出限值

我用最后一列测试了这个方法,表示pH值,因为看这些值,不用使用颜色就可以很容易地分辨出哪个是好的还是坏的

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

我的全部密码

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
子表1()
声明
昏暗的画面(95,5)
尺寸r1、r2、r3、r4为双随机变量
双精度vNH4g、vNH4y、vNH4r、vNKg、vNKr、vNGg、vNGy、vNGr、vpHg、vpHy、vpHr

'v表示值,g表示绿色(0我不建议在单行上使用if,它限制了if中(and)的写入,请使用结构,最好理解和写入,如果需要,请尝试在不带if结尾的情况下放置单行。 我不知道我的标准是否正确!请检查! 这样试试

 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
如果pHfv=vpHr,则
范围(“E”&i+2)。内饰颜色=vbRed
其他的
如果(pHfv-vpHg),则
范围(“E”&i+2)。内饰颜色=vbYellow
其他的
如果(pHfv
很难从中看出问题的具体原因。您不能使用条件格式吗?非常感谢您的帮助和解释,它按预期工作,使用多行代码比我所做的工作更清楚!祝您度过愉快的一天谢谢