Как исправить: Если значение равно true, подсчитайте результат с другими разными результатами оператора if?

#excel #vba #if-statement

#excel #vba #if-statement

Вопрос:

Я получил несколько операторов if, они проверяют ячейки по столбцам, если есть значение «Да» или «Посредственный». Когда «Да», добавьте 1 к результату, если «Посредственный», добавьте 0,5.

Итак, моя проблема заключается в следующем: когда моему коду нужно проверить следующий столбец, ему нужно сделать то же самое, но затем добавить 1 или 0,5 к предыдущему результату в той же строке в той же ячейке.

Это должно происходить в каждой строке.

В конце концов, когда он проверил всю строку, результат должен быть в процентах: подсчитайте «да» и «посредственно», затем разделите на 9 и умножьте на 100.

Я получил изображение, каким оно должно быть ниже:

Пример того, как это должно быть

Я получил код ниже:

 Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Range("D2:L4"), Range(Target.Address)) Is Nothing Then
        'If you add (an)other row(s) edit this code above
        Call DeleteP2P4
        'If you add (an)other row(s) edit this code above
        Call SampleMacro
    End If

End Sub

Sub DeleteP2P4()
    Range("P2:P4").Select
    'If you add (an)other row(s) edit this code above
    Selection.ClearContents
End Sub

Sub SampleMacro()

    ' Get the last row
    Dim startRow As Long, lastRow As Long
    startRow = 2
    lastRow = Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Row

   For i = startRow To lastRow

    ' If there's Yes/Mediocre in D column, then append next number
    If Sheet1.Range("D" amp; i).Value = "Yes" Then
        Sheet1.Range("P" amp; i).Value = " 1"
    ElseIf Sheet1.Range("D" amp; i).Value = "Mediocre" Then
        Sheet1.Range("P" amp; i).Value = " 0.5"
    End If

    ' If there's Yes/Mediocre in E column, then append next number
    If Sheet1.Range("E" amp; i).Value = "Yes" Then
        Sheet1.Range("P" amp; i).Value = " 1"
    ElseIf Sheet1.Range("E" amp; i).Value = "Mediocre" Then
        Sheet1.Range("P" amp; i).Value = " 0.5"
    End If

'It continious here with the rest of the If statements

Next

End Sub
  

Комментарии:

1. Вы неправильно задаете значение, оно должно быть похоже на Sheet1.Range("P" amp; i).Value = Sheet1.Range("P" amp; i).Value 1

Ответ №1:

Как указано Brownish Monster, измените свой

Sheet1.Range("P" amp; i).Value = " 1"

Для

Sheet1.Range("P" amp; i).Value = val(Sheet1.Range("P" amp; i).Value) 1

и аналогично для посредственного

Sheet1.Range("P" amp; i).Value = val(Sheet1.Range("P" amp; i).Value) 0.5