0

このコードを実行しようとすると、「コンパイルエラー:次はForなし」が発生し続けます。しかし、すべてを何度もチェックした後、どのようにそれらの存在を認識しないのかわかりません。これは私の最初のVBAコードなので、助けていただければ幸いです。

Sub Naming()
'
' Naming Macro
' Assigns a category name in a cell based on values in a cell one column over 
'

Dim number As Double

For i = 9 To 200
    number = Cells(i, 3).Value
        If number = 0 Then
            GoTo Line1
        Else
            If number <= 199999 And number > 0 Then
            Cells(i, 2) = "EP-GEARING"
        Else    
            If number <= 399999 And number > 199999 Then
            Cells(i, 2) = "DRIVES"
        Else
            If number <= 499999 And number > 399999 Then
            Cells(i, 2) = "FLOW"
        Else
            If number <= 599999 And number > 499999 Then
            Cells(i, 2) = "SPARES"
        Else
            If number <= 699999 And number > 599999 Then
            Cells(i, 2) = "REPAIR"
        Else
            If number <= 799999 And number > 699999 Then
            Cells(i, 2) = "FS"
        Else
            If number <= 899999 Then
            Cells(i, 2) = "GC-GEARING"
        Else
            GoTo Line1
Line1:
        End If
Next i

End Sub
4

3 に答える 3

5

ElseIfVBの1つの単語です。

If number = 0 Then
    'Do nothing
ElseIf number <= 199999 And number > 0 Then
    Cells(i, 2) = "EP-GEARING"
ElseIf number <= 399999 And number > 199999 Then
    ...
Else
    'Do nothing
End If

ただし、Select Caseここの方が適しています。

Select Case number
    Case 0
        'Do nothing
    Case 1 To 199999
        Cells(i, 2) = "EP-GEARING"
    Case 200000 To 399999
        ...
    Case Else
        'Do nothing
End Select
于 2012-12-30T19:58:42.527 に答える
1

コードは次のようになります。

Sub Naming()
'
' Naming Macro
' Assigns a category name in a cell based on values in a cell one column over 
'

Dim number As Double

For i = 9 To 200
    number = Cells(i, 3).Value

    If number <= 199999 And number > 0 Then
        Cells(i, 2) = "EP-GEARING"
    ElseIf number <= 399999 And number > 199999 Then
        Cells(i, 2) = "DRIVES"
    ElseIf number <= 499999 And number > 399999 Then
        Cells(i, 2) = "FLOW"
    ElseIf number <= 599999 And number > 499999 Then
        Cells(i, 2) = "SPARES"
    ElseIf number <= 699999 And number > 599999 Then
        Cells(i, 2) = "REPAIR"
    ElseIf number <= 799999 And number > 699999 Then
        Cells(i, 2) = "FS"
    ElseIf number <= 899999 Then
        Cells(i, 2) = "GC-GEARING"
    End If

Next i

End Sub

最初に記述されたコードの問題は、Else句に関係なく、コンパイラはすべてのIfに対してEnd Ifを期待し、そこにないために混乱していることです。単一のキーワードは、最後に1つのステートメントElseIfのみを必要とします。End If

後藤さんはめったにお勧めできません。99%の確率で、後藤を使用せずに、より適切でクリーンな方法で書くことができます。

于 2012-12-30T19:33:43.643 に答える
0

他の回答は、VBAがあなたをIf認識してペアリングするようにステートメントを修正する方法を示しています。ForNext

さて、個人的にはSelect Case、ループが必要な場合は、GSergが示すように使用することをお勧めします。

しかし、これがおそらく私がすることです。CellB9に次の数式を配置します。=IF(C9=0,"",IF(C9<=199999,"EP-GEARING",IF(C9<=399999,"DRIVES",IF(C9<=499999,"FLOW",IF(C9<=599999,"SPARES",IF(C9<=699999,"REPAIR",IF(C9<=799999,"FS",IF(C9<=899999,"GC-GEARING",""))))))))次に、必要な場所にコピーします。

または、コードでそれを実行したい場合は、ループなしでサブ全体を置き換えることができます。これを1ライナーとして記述できますが、読みやすくしたかったのです。

Sub Naming()
'
' Naming Macro
' Assigns a category name in a cell based on values in a cell one column over
Dim theRange As Range
Set theRange = Range(Cells(9, 2), Cells(200, 2))
theRange.Value = "=IF(RC[1]=0,""""," & _
                "IF(RC[1]<=199999,""EP-GEARING""," & _
                "IF(RC[1]<=399999,""DRIVES""," & _
                "IF(RC[1]<=499999,""FLOW""," & _
                "IF(RC[1]<=599999,""SPARES""," & _
                "IF(RC[1]<=699999,""REPAIR""," & _
                "IF(RC[1]<=799999,""FS""," & _
                "IF(RC[1]<=899999,""GC-GEARING"",""""))))))))"
'Optional if you want only the values without the formula, uncomment next line
'theRange.Value = theRange.Value

Set theRange = Nothing

End Sub

VBAでロジックを書き出してセルをループするよりも、Excelの数式を使用してこのような問題を解決する方が、一般的に高速でクリーンです。

于 2012-12-31T03:24:34.673 に答える