Visual Basic for Applications/言語仕様

基本的には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文を使用することで、同一のオブジェクトに対して複数プロパティの代入のレシーバをまとめることができる。

出典編集