#vba #excel #if-statement #rank
#vba #excel #if-оператор #ранг
Вопрос:
Я пытаюсь создать макрос, который возвращает заданный ранг в зависимости от значения в ячейке. Значение, на котором оно основано (B24), будет определять рейтинг и помещать его в B26. Ниже приведен рейтинг и код, который я использую. Например. Значения с более чем 2B должны приводить к «1». Как я могу заставить это работать? В настоящее время я получаю «Ошибка компиляции: Else без if»
Sub Criteria()
On Error GoTo catch_error
Worksheets("Sheet1").Activate
Dim score As Integer, result As String
score = Range("B24").Value
If score > 2000000000 Then result = "1"
ElseIf score >= 1500000000 And score <= 1999999999.99 Then result = "2"
ElseIf score >= 500000000 And score <= 1499999999.99 Then result = "3"
ElseIf score >= 250000000 And score <= 499999999.99 Then result = "4"
ElseIf score < 249999999.99 Then result = "Out Of Scope"
result = Range("B26").Value
Exit Sub
catch_error:
MsgBox "Some Error Occurred"
End Sub
Комментарии:
1. Теперь, когда у вас есть три ответа, ваша обязанность выбрать один из них как «правильный». Вы выбираете его, нажав на галочку рядом с ответом. Выберите тот, который вы считаете наиболее полезным, и / или тот, который вы использовали. Выбрав правильный ответ, он закроет ответ на этот вопрос и удалит его из очереди неотвеченных. Не принимайте это как запрос на выбор моего. Я только что добавил одну вещь к уже отличным ответам и не обижу свои чувства, если вы выберете чужие.
Ответ №1:
Однострочный If
оператор не может иметь Else
:
If score > 2000000000 Then result = "1"
Вам нужно реструктурировать его следующим образом:
If score > 2000000000 Then
result = "1"
ElseIf score >= 1500000000 And score <= 1999999999.99 Then
result = "2"
ElseIf score >= 500000000 And score <= 1499999999.99 Then
result = "3"
ElseIf score >= 250000000 And score <= 499999999.99 Then
result = "4"
ElseIf score < 249999999.99 Then
result = "Out Of Scope"
End If
Комментарии:
1. @ismphoto123 —
Dim score As Double
2. Вот как я это исправил. Спасибо!!
3. Быстрый вопрос — допустим, мне нужно выбрать между двумя ячейками. Если один из них пуст, используйте другой для определения ранга. Что мне нужно было бы сделать? например. B26 или B28
4. @ismphoto123 —
If IsEmpty(Range("B26").Value) Then score = Range("B28").Value Else score = Range("B26").Value
5. @ismphoto123 Новым вопросам нужен собственный пост. Вопросы о русской кукле здесь не одобряются. Пожалуйста, попробуйте самостоятельно, затем отправьте новый вопрос с тем, что вы пробовали, и где он терпит неудачу. Что касается этого вопроса, на него был дан ответ. Пожалуйста, выберите один из них как правильный.
Ответ №2:
- Напишите «End if» в строке перед result = Range(«B26»)…
Dim score As Double
, не как целое число, ваши значения слишком высоки, и они не являются целыми числами.-
Это должно быть отменено:
Диапазон («B26»). Значение = результат
Комментарии:
1.Быстрый вопрос — допустим, мне нужно выбрать между двумя ячейками. Если один из них пуст, используйте другой для определения ранга. Что мне нужно было бы сделать? например. B26 или B28
2. что-то вроде этого — gist.github.com/Vitosh/b8ce6b24b0e253be0d91ef7aa90279f5
Ответ №3:
Что касается того, что сказали другие:
-
Вы не можете использовать одну строку, если с Else или Else, если
-
Оценка должна быть двойной
-
Последняя строка перевернута.
и добавить
- Аргументы less than не нужны, поскольку, как только статус if находит значение true, он перестает искать.
Код:
Sub Criteria()
On Error GoTo catch_error
With Worksheets("Sheet1")
Dim score As Double, result As String
score = .Range("B24").Value
If score > 2000000000 Then
result = "1"
ElseIf score >= 1500000000 Then
result = "2"
ElseIf score >= 500000000 Then
result = "3"
ElseIf score >= 250000000 Then
result = "4"
Else
result = "Out Of Scope"
End If
.Range("B26").Value = result
Exit Sub
End With
catch_error:
MsgBox "Some Error Occurred"
End Sub