#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