Макрос критериев ранжирования VBA — остальное без ошибки If

#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:

  1. Напишите «End if» в строке перед result = Range(«B26»)…
  2. Dim score As Double , не как целое число, ваши значения слишком высоки, и они не являются целыми числами.
  3. Это должно быть отменено:

    Диапазон («B26»). Значение = результат

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

1.Быстрый вопрос — допустим, мне нужно выбрать между двумя ячейками. Если один из них пуст, используйте другой для определения ранга. Что мне нужно было бы сделать? например. B26 или B28

2. что-то вроде этого — gist.github.com/Vitosh/b8ce6b24b0e253be0d91ef7aa90279f5

Ответ №3:

Что касается того, что сказали другие:

  1. Вы не можете использовать одну строку, если с Else или Else, если

  2. Оценка должна быть двойной

  3. Последняя строка перевернута.

и добавить

  1. Аргументы 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