「Visual Basic for Applications/言語仕様」の版間の差分
Semi-Brace (トーク | 投稿記録) M編集の要約なし |
Semi-Brace (トーク | 投稿記録) 編集の要約なし |
||
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
:a
とb
を足す[10][11]a - b
:a
からb
を引く[10][12]。a * b
:a
とb
を掛ける[10][13]。a / b
:a
をb
で割る[10][14]。a And b
:a
とb
の論理積を求める (非短絡評価)。a Or b
:a
とb
の論理和を求める (非短絡評価)。
この節は書きかけです。この節を編集してくれる方を心からお待ちしています。
変数/配列の宣言[編集]
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 |
|
また、複数まとめて宣言することもできる:
' 全て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
文を使用することで、同一のオブジェクトに対して複数プロパティの代入のレシーバをまとめることができる。
出典[編集]
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/data-type-summary 2020年10月31日閲覧。
- ^ 2.0 2.1 64ビットの実行環境のみ
- ^ 32ビットの実行環境のみ
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/glossary/vbe-glossary#empty
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/variant-data-type
- ^ 6.0 6.1 https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/boolean-data-type 2020年10月31日閲覧。
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-ifthenelse-statements
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-doloop-statements
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-fornext-statements
- ^ 10.0 10.1 10.2 10.3 暗黙の型変換で
a
やb
が数値型に変換されることがある。 - ^ https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/operator-summary
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/operator-summary
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/operator-summary
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/operator-summary
- ^ https://docs.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-select-case-statements