Выберите структуру дела - PullRequest
0 голосов
/ 01 апреля 2019

Мой вопрос следующий, следующий «Выбрать регистр», диапазон между A1: A100. После того, как я попробую следующий код, я получу только один результат из 100 необходимых мне результатов. Код, указанный ниже:

Private Sub CommandButton1_Click()

Dim score As Integer, result As String
 score = Range("A1").Value

Select Case score
    Case Is >= 80
    result = "very good"
    Case Is >= 70
    result = "good"
    Case Is >= 60
    result = "sufficient"
    Case Else
    result = "insufficient"
End Select

    Range("B1").Value = result

End Sub

Ответы [ 3 ]

2 голосов
/ 01 апреля 2019

Если вы указываете, что хотите выполнять одну и ту же функцию для каждой ячейки в определенном вами диапазоне, вы можете выполнить цикл FOR EACH следующим образом:

Private Sub CommandButton1_Click()

Dim score As range, result As String
 set score = Range("A1:a100")

for each c in score.cells

Select Case c.value
    Case Is >= 80
    result = "very good"
    Case Is >= 70
    result = "good"
    Case Is >= 60
    result = "sufficient"
    Case Else
    result = "insufficient"
End Select

    c.offset(0,1) = result  'specifies the cell 1 column to the right of the current cell

next c
End Sub
1 голос
/ 02 апреля 2019

Лично я бы не использовал цикл здесь, гораздо быстрее сделать это таким образом, чем зацикливать ячейку за раз:

Sub CommandButton1_Click()
With Range("B1:B100")
    .Formula = "=IF(A1>79,""very good"",IF(A1>69,""good"",IF(A1>59,""sufficient"",""insufficient"")))"
    .Calculate
    .Copy
    .PasteSpecial xlPasteValues
End With
End Sub

Он вводит формулу для вычисления результатов, затемвынуждает вычисление (требуется только в том случае, если для расчета задано ручное значение, в противном случае вы можете удалить эту строку), затем оно копирует и вставляет обратно в качестве значений.

Если это для школьного задания, и вам сказали использоватьтогда вы можете использовать операторы, которые вам сказали, но в противном случае я бы посоветовал избегать циклов, когда вы можете.

1 голос
/ 01 апреля 2019

Я бы так и сделал.Это довольно прямолинейно, используя цикл For ... Next для циклического перемещения по ячейкам в указанном диапазоне столбца A, а затем помещая значение из оператора Select Case в ячейку рядом со столбцом B

Private Sub CommandButton1_Click()
    Dim score As Integer
    Dim result As String
    Dim xlCell As Range
        For Each xlCell In Range("A1:A100")
            score = xlCell
            Select Case score
                Case Is >= 80
                    result = "very good"
                Case 70 To 79
                    result = "good"
                Case 60 To 69
                    result = "sufficient"
                Case Is < 60
                    result = "insufficient"
            End Select
            xlCell.Offset(0, 1) = result
        Next xlCell
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...