74046


下記のようにif～else ifを各ブロック1行で記載しておりますが、  
「コンパイラエラー：End ifに対応するifブロックがありません」となってしまいます。  
どのように修正すればよいでしょうか、またはこのような書き方はできないのでしょうか。

[code]

        If value = "1" Then requestType = "01"
        ElseIf value = "2" Then requestType = "12"
        ElseIf value = "3" Then requestType = "14"
        ElseIf value = "4" Then requestType = "16"
        ElseIf value = "5" Then requestType = "18"
        ElseIf value = "6" Then requestType = "19"
        End If
    
[/code]


CC BY-SA 4.0
2021-02-16T07:59:20.643
74043
2021-02-16T09:12:28.750
7626
question
vba
VBA if～else if をそれぞれ一行で記載する場合の書き方


この記事の仕様記述を見ると：  
[If...Then...Else ステートメント](https://docs.microsoft.com/ja-
jp/office/vba/language/reference/user-interface-help/ifthenelse-statement)

> 構文
[code]

>     If condition Then [ statements ] [ **Else ** elsestatements ]
>  
[/code]

>
> または、ブロック形式の構文を使用できます。
[code]

>     If condition Then
>     [ statements ]
>     [ ElseIf condition-n Then
>     [ elseifstatements ]]
>     [ Else
>     [ elsestatements ]]
>     End If
>  
[/code]

質問のソースは、まずこの1行で完結していると考えられます。  
つまり、この行は暗黙の裡に行末に`Else`や`End If`が存在するものと扱われるのでしょう。

[code]

    If value = "1" Then requestType = "01"
    
[/code]

それに続く以下の文は1行目とは別の文と考えられるので、`If`で始まっていないからエラーになるのでしょう。

[code]

    ElseIf value = "2" Then requestType = "12"
    ElseIf value = "3" Then requestType = "14"
    ElseIf value = "4" Then requestType = "16"
    ElseIf value = "5" Then requestType = "18"
    ElseIf value = "6" Then requestType = "19"
    End If
    
[/code]

こちらにすると通ります。  
最初の`If`文および成立する部分の実行行は2行に分けなければならないけれども、`ElseIf`の部分はまとめて1行に書けるようです。

[code]

    If value = "1" Then
        requestType = "01"
    ElseIf value = "2" Then requestType = "12"
    ElseIf value = "3" Then requestType = "14"
    ElseIf value = "4" Then requestType = "16"
    ElseIf value = "5" Then requestType = "18"
    ElseIf value = "6" Then requestType = "19"
    End If
    
[/code]

* * *

質問のような使い方をするなら、`Select Case ステートメント`を使った方が綺麗に書けるのではないでしょうか。  
[Select Case ステートメント](https://docs.microsoft.com/ja-
jp/office/vba/language/reference/user-interface-help/select-case-statement)  
[Select Case ステートメントの使用](https://docs.microsoft.com/ja-
jp/office/vba/language/concepts/getting-started/using-select-case-statements)

応用するとこちらになるでしょう。

[code]

    Select Case value
        Case "1"
            requestType = "01"
        Case "2"
            requestType = "12"
        Case "3"
            requestType = "14"
        Case "4"
            requestType = "16"
        Case "5"
            requestType = "18"
        Case "6"
            requestType = "19"
        Case Else:
    End Select
    
[/code]


CC BY-SA 4.0
2021-02-16T08:40:18.817
74045
2021-02-16T09:12:28.750
2021-02-16T09:12:28.750
26370
26370
74043
answer


Thenの後で改行しないとだめなようです。

[code]

        If Value = "1" Then
            requestType = "01"
        ElseIf Value = "2" Then
            requestType = "12"
        ElseIf Value = "3" Then
            requestType = "14"
        ElseIf Value = "4" Then
            requestType = "16"
        ElseIf Value = "5" Then
            requestType = "18"
        ElseIf Value = "6" Then
            requestType = "19"
        End If
    
[/code]

どうしても、条件と実行文を見た目１行にまとめて書きたいなら、以下のように書けばよいと思います。

[code]

        If Value = "1" Then requestType = "01" _
        Else: If Value = "2" Then requestType = "12" _
        Else: If Value = "3" Then requestType = "14" _
        Else: If Value = "4" Then requestType = "16" _
        Else: If Value = "5" Then requestType = "18" _
        Else: If Value = "6" Then requestType = "19"
    
[/code]


CC BY-SA 4.0
2021-02-16T08:43:34.963
74046
2021-02-16T08:43:34.963
35558
74043
answer