0

以下の Excel マクロの実行にご協力ください。私は何かが欠けていると思います。ロジックが機能していません。

Sub RiskGrade()

Dim Value1 As String

Sheets("Sheet1").Select
If (Cells(10, 2) = "BX") Then Cells(12, 4) = -8
Exit Sub

ElseIf (Cells(10, 2) = "GX") Then Cells(12, 4) = -7
Exit Sub

Else
    For i = 12 To 14

        Value1 = Right(Trim(Sheet1.Cells(i, 2)), 1)
        'MsgBox Value1
        Select Case Value1
            Case "W"
                Cells(i, 4) = 1
            Case "H", "S", "R", "F", "G"
                Cells(i, 4) = 2
            Case "D"
                Cells(i, 4) = 3
            Case "C"
                Cells(i, 4) = 4
            Case "B"
                Cells(i, 4) = 5
            Case "A"
                Cells(i, 4) = 6
            Case "*"
                Cells(i, 4) = 7
            Case "M"
                Cells(i, 4) = 8
            Case "E"
                Cells(i, 4) = 9
            Case OTHER
                Cells(i, 4) = -9
        End Select
        Exit For
    Next i
End If

End Sub
4

4 に答える 4

9

IF ステートメントを開始し、同じ行にアクションを追加しました。これは、その後に END IF または ELSE を期待しないことを意味します。

VB で

IF 条件 THEN アクション

単一の IF ステートメントです。

検討

If (Cells(10, 2) = "BX") Then
  Cells(12, 4) = -8
  Exit Sub
ElseIf (Cells(10, 2) = "GX") Then
  Cells(12, 4) = -7
  Exit Sub
...
于 2012-09-24T18:09:05.147 に答える
3
  1. Case OTHERする必要がありますCase Else
  2. Exit For最初のループの後にループを終了するため、削除するか、処理を中止する場所に変更する必要があります
  3. If ... Then複数行または単一行である必要があります。

    • 複数行:
      If (Cells(10, 2) = "BX") Then
      Cells(12, 4) = -8
      Exit Sub
      ElseIf ...

    • 単一行: (同じステートメントでコマンドを区切る ために を使用することに注意してください)
      If (Cells(10, 2) = "BX") Then Cells(12, 4) = -8 : Exit Sub
      ElseIf ...

      :If

于 2012-09-24T18:47:06.953 に答える
0

OPTION EXPLICITタイプミスがキーワードに適用されたときにエラーを見つけるのに役立つため、を使用する必要があります。

Case OTHER現在の形状では、 which should beを使用して予期しない動作を指定しましたが、VBA にCase Elseはキーワードがないため、データ型の変数として解釈されますが、「それ以外の場合は ...」と正しく解釈されます。OTHEROTHERVariantCase Else

またExit Forafterを使用すると、 、13 および 14 でのSelectマクロ実行が停止し、適用されません。i=12

Option Explicit
Sub RiskGrade()

Dim Value1 As String

Sheets("Sheet1").Select

If (Cells(10, 2) = "BX") Then 
Cells(12, 4) = -8
Exit Sub

ElseIf (Cells(10, 2) = "GX") Then 
Cells(12, 4) = -7
Exit Sub

Else
    For i = 12 To 14

        Value1 = Right(Trim(Sheet1.Cells(i, 2)), 1)
        Debug.Print Value1 'CTRL+G for immediate window

        Select Case Value1
            Case "W"
                Cells(i, 4) = 1
            Case "H", "S", "R", "F", "G"
                Cells(i, 4) = 2
            Case "D"
                Cells(i, 4) = 3
            Case "C"
                Cells(i, 4) = 4
            Case "B"
                Cells(i, 4) = 5
            Case "A"
                Cells(i, 4) = 6
            Case "*" 'I don't know what behaviour in will cause, does it spot '*' only, or any char
                Cells(i, 4) = 7
            Case "M"
                Cells(i, 4) = 8
            Case "E"
                Cells(i, 4) = 9
            Case Other ' not OTHER
                Cells(i, 4) = -9
        End Select
        'Exit For ' - why exit after first iteration - guess it's unnecessary procedure ?
    Next i
End If

サブ終了

于 2014-12-17T12:05:35.930 に答える