Возврат текстовых значений из оператора if, который проходит по строкам - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу создать функцию if, которая возвращает текстовые значения в зависимости от цвета строк в столбце D и процентного содержания в строках в столбце EEg в зависимости от цвета в D6 и значения в E6, возвращает значение в F6, а затем перебираетстроки повторяют это.Код, который я написал, работает, но в моем листе Excel нигде не отображаются значения, это можно решить?

Sub Message_Click()

Set shr = ActiveWorkbook.Sheets("Report")
shr.Range("F6:F37").ClearContents

Dim rng2 As Range
Dim rng3 As Range
Set rng2 = ActiveSheet.Range("D6:D37")
Set rng3 = ActiveSheet.Range("E6:E37")

For RR = 1 To 33
Set rng2 = Cells(RR + 5, 3)
Set rng3 = Cells(RR + 5, 4)

If rng2.Interior.ColorIndex = 50 Then
    Range("F6:F37").Value = "Passed"
ElseIf rng2.Interior.ColorIndex = 38 And rng3 > 60 Then
    Range("F6:F37").Value = "Warning"
ElseIf rng2.Interior.ColorIndex = 38 And rng3 < 60 Then
    Range("F6:F37").Value = "Still has chances"
ElseIf rng2.Interior.ColorIndex = 38 And rng3 = 100 Then
    Range("F6:F37").Value = "Failed"
End If

Next
End Sub

1 Ответ

0 голосов
/ 15 апреля 2019

Когда вы сравниваете значение диапазона с числом, оно должно выглядеть так:

rng3.value < 60

Кроме того, имейте в виду, что вы не выполняете клеточные проверки для индекса цвета. Так что если одна ячейка в rng2 не имеет цветового индекса 50, но все остальные имеют, это:

 rng2.Interior.ColorIndex = 50

вернет FALSE для всего диапазона. Так что, в основном, вы делаете проверки по дальности.

Как сказал кто-то в комментариях, логика немного отсталая. Однако вот один из способов сделать это:

Sub Message_Click()
Dim sht As Worksheet
Dim RR As Long
Set sht = ThisWorkbook.Worksheets("Report")
sht.Range("F6:F37").ClearContents
For RR = 6 To 37 Step 1
    If sht.Cells(RR, "D").Interior.ColorIndex = 50 Then
        sht.Cells(RR, "F").Value = "Passed"
    ElseIf sht.Cells(RR, "D").Interior.ColorIndex= 38 And sht.Cells(RR, "E").Value > 60 And sht.Cells(RR, "E").Value < 100 Then
        sht.Cells(RR, "F").Value = "Warning"
    ElseIf sht.Cells(RR, "D").Interior.ColorIndex= 38 And sht.Cells(RR, "E").Value < 60 Then
        sht.Cells(RR, "F").Value = "Still has chances"
    ElseIf sht.Cells(RR, "D").Interior.ColorIndex= 38 And sht.Cells(RR, "E").Value = 100 Then
        sht.Cells(RR, "F").Value = "Failed"
    Else
        sht.Cells(RR, "F").Value = "N/A"
    End If
Next RR

End Sub

Вот пример результата:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...