「Visual Basic for Applications/言語仕様」の版間の差分

出典: フリー教科書『ウィキブックス(Wikibooks)』
削除された内容 追加された内容
M編集の要約なし
編集の要約なし
 
125 行 125 行
* <syntaxhighlight lang="vb" inline>ByVal</syntaxhighlight>: 値渡し
* <syntaxhighlight lang="vb" inline>ByVal</syntaxhighlight>: 値渡し
* <syntaxhighlight lang="vb" inline>ByRef</syntaxhighlight>: 参照渡し
* <syntaxhighlight lang="vb" inline>ByRef</syntaxhighlight>: 参照渡し
** 参照は、必要に応じてデリファレンスされる。


== 行継続 ==
== 行継続 ==
219 行 220 行
{{節スタブ}}
{{節スタブ}}
=== 変数/配列の宣言 ===
=== 変数/配列の宣言 ===
<syntaxhighlight lang="vb" inline>Dim</syntaxhighlight>キーワードを使用して宣言する。
<syntaxhighlight lang="vb">
' Variant型
Dim implicitVariant
Dim explicitVariant As Variant
Dim anInteger as Integer
' インデックスが0-originか1-originかはOption Baseによる
Dim strings(3) as String
Dim zeroOriginStringArray(0 To 2) as String
Dim oneOriginStringArray(1 To 3) as String
</syntaxhighlight>
{{コラム|Option Base|
<syntaxhighlight lang="vb" inline>Option Base</syntaxhighlight>を使用することで、添字が0から始まるか (0-origin)、1から始まるか (1-origin) を制御することができる。使用しない場合は、0-originとなるが、上の例の{{zeroOriginStringArray}}、{{code|oneOriginStringArray}}のように個別の宣言で明示されている場合はそちらが優先される。}}
また、複数まとめて宣言することもできる:
<syntaxhighlight lang="vb" line>
' 全てVariant型
Dim v1, v2, v3
' i1のみInteger型
Dim v4, v5, i1 as Integer
' 全てInteger型
Dim i2 as Integer, i3 as Integer, i4 as Integer
</syntaxhighlight>
全ての変数をInteger型とするつもりで、4行目のように書くのは間違いである。正しくは、6行目のように全てを明示的にInteger型と宣言しなければならない。

=== Select Case...Case...End Select文 ===
Select Case...Case...End Selectは、値に応じて任意の数の分岐を行うことができる<ref>https://docs.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-select-case-statements</ref>。C言語やJavaでいうswitchに該当する。
<syntaxhighlight lang="vb">
Select Case qty
Case 1
stringify = "single"
Case 2
stringify = "double"
Case 3
stringify = "triple"
Case Else
stringify = "many"
End Select
</syntaxhighlight>
また、<syntaxhighlight lang="vb" inline>Case</syntaxhighlight>内で値を<syntaxhighlight lang="vb" inline>Is</syntaxhighlight>として参照することができる:
<syntaxhighlight lang="vb">
Select Case qty
Case 1
stringify = "single"
Case 2
stringify = "double"
Case 3
stringify = "triple"
Case Is < 10 ' qtyが10未満
stringify = "many"
Case Else
stringify = "so many"
End Select
</syntaxhighlight>
=== With...End With文 ===
<syntaxhighlight lang="vb" inline>With</syntaxhighlight>文を使用することで、同一のオブジェクトに対して複数プロパティの代入のレシーバをまとめることができる。


== 出典 ==
== 出典 ==

2020年11月24日 (火) 06:45時点における最新版

基本的にはVisual Basicと同じですが、一部違う箇所があります。

データ型[編集]

組み込みで定義されているデータ型の詳細は以下のとおりです[1]

名前 バイト数 格納可能なデータ type-declaration character
Boolean 2 True または False
Byte 1 0 から 255 までの整数
Collection 不定 不定
Currency 8 -922337203685477.5808 から 922337203685477.5807 まで @
Date 8 100年1月1日から9999年12月31日まで
Decimal 14 ±79,228,162,514,264,337,593,543,950,335を上限と下限とする、
精度が最大28桁の任意の整数あるいは実数
Dictionary 不定 不定
Double 8
(w:倍精度浮動小数点数)
#
Integer 2 -32768 から 32767 まで %
Long 4 -2147483648 から 2147483647 まで &
LongLong[2] 8 -9223372036854775808 から 9223372036854775807 まで ^
LongPtr 4[3] Long に準じる
8[2] LongLong に準じる
Object 不定 任意の32ビット空間への参照[4]
Single 4
(w:単精度浮動小数点数)
!
String 10 + (文字列の長さ) 最長約20億字の可変長文字列 $
(文字列の長さ) 最長約65400字の固定長文字列
Variant 16 実際に格納されている数値型の上限下限に準じる N/A[5]
22 + (文字列の長さ) 可変長文字列に応じる

※配列のバイト数は以下の総和である:

  • 固定で20バイト
  • (配列の次元数) × 4バイト
  • 要素が占めるバイト数の合計

暗黙の型変換[編集]

  • Boolean→数値型[6]
    • False→0
    • True→-1
  • 任意の型→Boolean[6]
    • 0→False
    • それ以外→True
  • Empty→Variant
    • 期待される型が数値型→0
    • 期待される型が文字列型→""

型付け[編集]

  • 関数の仮引数、戻り値、プロパティ、及び変数に対して型付けをすることができる
  • 型付けをしなかった場合は暗黙でVariant型となる

リテラル[編集]

  • universal date format

値渡し/参照渡し[編集]

  • ByVal: 値渡し
  • ByRef: 参照渡し
    • 参照は、必要に応じてデリファレンスされる。

行継続[編集]

  aaaa _
  bbbb _
  cccc

構文[編集]

If...Then...ElseIf...Else...End If文[編集]

Ifの後に0個以上のElseif、その後に最大1個のElse節が出現することができる[7]

If x = 1 Then
  REM ここにxが1と等しい時の処理
Elseif y = 1 Then
  REM ここにxが1と等しくなく、yが1と等しい時の処理
Else
  REM どちらでもない時の処理
End If

Do...Loop[編集]

Do...Loopは条件式を使用した繰り返しを行う。以下の種類がサポートされている[8]。以下の例で、condはループの条件式である。

'ループに入る前にcondが評価される
Do While cond
'condがTrueの間繰り返される処理
Loop

'ループに入る前にcondが評価される
Do Until cond
'condがFalseの間繰り返される処理
Loop

'ループに入って、1回目の実行が終わった後に評価される
Do
'condがTrueの間繰り返される処理
Loop While cond

'ループに入って、1回目の実行が終わった後に評価される
Do
'condがFalseの間繰り返される処理
Loop Until cond

Do...Loopから抜けるためにはExit Doを使用する。

For...Next[編集]

For...Nextは開始値、終了値、増分を指定してループを行う[9]。以下の例で、iはループ変数である。

' i = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
For i = 0 To 10
' iを使った処理...
Next i
' i = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
For i = 0 To 10 Step 1
' iを使った処理...
Next i
' i = 0, 2, 4, 6, 8, 10 
For i = 0 To 10 Step 2
' iを使った処理...
Next i
' i = 10, 8, 6, 4, 2, 0
For i = 10 To 0 Step -2
' iを使った処理...
Next i

注釈:

  • For...Nextを抜ける際にはExit Forを使う。
  • Next iはNextと同じ意味である。
  • 開始値、終了値、増分を小数にした場合は誤差で意図した回数にならないことがある。

ForEach...Next[編集]

For Each...Nextは、反復可能なオブジェクトを反復することに使われる。ユーザーが作成したクラスを反復可能にするためにはMicrosoftのドキュメントを参照。

演算子[編集]

以下に上げる演算子が存在する (完璧でないリスト)。

  • a + b: abを足す[10][11]
  • a - b: aからbを引く[10][12]
  • a * b: abを掛ける[10][13]
  • a / b: abで割る[10][14]
  • a And b: abの論理積を求める (短絡評価)。
  • a Or b: abの論理和を求める (短絡評価)。

この節は書きかけです。この節を編集してくれる方を心からお待ちしています。

変数/配列の宣言[編集]

Dimキーワードを使用して宣言する。

' Variant型
Dim implicitVariant
Dim explicitVariant As Variant
Dim anInteger as Integer
' インデックスが0-originか1-originかはOption Baseによる
Dim strings(3) as String
Dim zeroOriginStringArray(0 To 2) as String
Dim oneOriginStringArray(1 To 3) as String
Option Base

Option Baseを使用することで、添字が0から始まるか (0-origin)、1から始まるか (1-origin) を制御することができる。使用しない場合は、0-originとなるが、上の例のテンプレート:ZeroOriginStringArrayoneOriginStringArrayのように個別の宣言で明示されている場合はそちらが優先される。

また、複数まとめて宣言することもできる:

' 全てVariant型
Dim v1, v2, v3
' i1のみInteger型
Dim v4, v5, i1 as Integer
' 全てInteger型
Dim i2 as Integer, i3 as Integer, i4 as Integer

全ての変数をInteger型とするつもりで、4行目のように書くのは間違いである。正しくは、6行目のように全てを明示的にInteger型と宣言しなければならない。

Select Case...Case...End Select文[編集]

Select Case...Case...End Selectは、値に応じて任意の数の分岐を行うことができる[15]。C言語やJavaでいうswitchに該当する。

Select Case qty
  Case 1
    stringify = "single"
  Case 2
    stringify = "double"
  Case 3
    stringify = "triple"
  Case Else
    stringify = "many"
End Select

また、Case内で値をIsとして参照することができる:

Select Case qty
  Case 1
    stringify = "single"
  Case 2
    stringify = "double"
  Case 3
    stringify = "triple"
  Case Is < 10 ' qtyが10未満
    stringify = "many"
  Case Else
    stringify = "so many"
End Select

With...End With文[編集]

With文を使用することで、同一のオブジェクトに対して複数プロパティの代入のレシーバをまとめることができる。

出典[編集]