プロが教えるわが家の防犯対策術!

制御構造の場合、select caseとif elseの後は「:」をついか、一行でソースを書くの意味ですか。

例:
If OPTO104(1).Value = True Then
   OPTO104(1).SetFocus
Else: OPTO104(2).SetFocus
End If

宜しくお願いします。

A 回答 (4件)

制御構造とは関係なく、VBでは「:」は、「複数の行を1行にまとめて書く」為の記号です。



ですから、
--------------------------------
If OPTO104(1).Value = True Then
   OPTO104(1).SetFocus
Else: OPTO104(2).SetFocus
End If
--------------------------------
は、
--------------------------------
If OPTO104(1).Value = True Then
   OPTO104(1).SetFocus
Else
    OPTO104(2).SetFocus
End If
--------------------------------
と、同じ意味ですし、

例えば、
-------------------------------
A=1
B=2
-------------------------------

-------------------------------
A=1:B=2
-------------------------------
と書くこともできます。
    • good
    • 0

VB,VBAの解説書では、Else:の書き方は見かけません。


Else
OPTO104(2).SetFocus
EndIf
と書かれています。
:は別のステートメントを同一行に書くための行節約のための用途や
同一行に書いて関連がわかりやすいように使います。
個々で前のステートメント(文)が終わり、次に新しいステートメンとが始まることを意味します。この意味では改行と同じです。
しかし:が改行の意味があるわけではないと思います。
どういうコードの塊が1ステートメントか結構難しい。
他に継続行のスペース+アンダーバーがあります。これは行が増えます。
Case Else: MsgBox "C" などでも使えるようです。
Sub test06()
x = InputBox("x=")
If x = 1 Then
x = 1
Else
x = 2
End If
MsgBox x
End Sub
が標準の記法と思いますが(インデントの点は考えないとして)
下の行の内容を、同行に持ってきたり、:を入れたりして実行してみると、If Then Else EndIfの行位置関係は、意外にルール性の発見は難しいと思いました。
質問のケース以外の自由度はないようです。
標準の記法をお勧めします。
    • good
    • 0

If A = 1 Then B = 2: C = 3 Else B = 3: C = 2



If文を上記の様に1行ですませる事も可能ですし

For I = 0: A[I] = I * 2: Next I
↑の様に複数行を':'でつないで1行で記述する事も可能です。

質問の例では
Else: OPTO104(2).SetFocus
でも
Else OPTO104(2).SetFocus
の様に':'が無くても問題ありません。
#':'をわざわざ付ける意味が無い....

通常はソースが読みづらくなるので':'を使って1行に
する事は推奨されていません。

If A = 1 Then
  B = 2 'コメント1
  C = 3 'コメント2
Else
  B = 3 'コメント3
  C = 2 'コメント4
End if
    • good
    • 0

 まず前提知識として、VBというかMS Basic構文では、1行1ステートメントだという事を押さえておいていただきたい。



 ここで言うステートメントとは
・IF hogehoge THEN ' 1ステートメント
・FOR i = 1 TO 50 STEP 2 ' 1ステートメント
・ELSE ' 1ステートメント
・A = B ' 1ステートメント
などの事を指す。
 これらを、普通は複数行に分割して書く事はできないし、逆に1行に複数ステートメントを書く事はできない。割と縛りの多い構文規則だ。

 で、VBでは、ステートメントを複数行に分ける場合に「_と改行のペア」を用い、逆に1行に複数ステートメントを記述する場合に「:」を用いる。

 質問者のソースでは、ELSEというステートメントとOPTO104(2).SetFocusというステートメントを1行で書くために「:」を入れているという訳ですな。

 直球の回答という訳ではないが、以上の内容をご一読いただけたら。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています