• ベストアンサー

「:」について

制御構造の場合、select caseとif elseの後は「:」をついか、一行でソースを書くの意味ですか。 例: If OPTO104(1).Value = True Then    OPTO104(1).SetFocus Else: OPTO104(2).SetFocus End If 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

制御構造とは関係なく、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 ------------------------------- と書くこともできます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

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の行位置関係は、意外にルール性の発見は難しいと思いました。 質問のケース以外の自由度はないようです。 標準の記法をお勧めします。

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

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

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

 まず前提知識として、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行で書くために「:」を入れているという訳ですな。  直球の回答という訳ではないが、以上の内容をご一読いただけたら。

関連するQ&A