最終更新: bokkuri_orz 2015年07月13日(月) 01:39:52履歴
Dim 変数名 As データ型
Integer | 整数型 | 2byte |
Long | 長整数型 | 4byte |
Single | 単精度小数 | 4byte |
Double | 倍精度小数 | 8byte |
Currency | 通貨型 | 8byte |
String | 文字列 | 2byte (1文字?) |
Date | 日付型 | 8byte |
Object | オブジェクト型 | 4byte |
Variant | バリアント型 | 16byte |
Boolean | 真偽値 | 2byte |
Private Const CONST_VAL_0 = 10 Public Const CONST_VAL_1 = 20 ' Public 定数は宣言できないっぽい。エラーになる。 Const CONST_STR As String = "文字列定数"
vbNullString | String型の初期値 |
Empty | Variant型の初期値。何も値が入っていない状態。 |
Null (vbNull) | Variant型に格納できる特殊な値。 |
Nothing | オブジェクト変数の初期値 |
Dim myVar As Variant Debug.Print VarType(myVar) '--> 0(定数vbEmpty)と表示される Debug.Print TypeName(myVar) '--> Empty と表示される Debug.Print IsEmpty(myVar) '--> True と表示される
Dim myVar As Variant '初期値はEmpty If myVar = 0 Then Debug.Print "True" '--> True と表示される If myVar = "" Then Debug.Print "True" '--> True と表示される
Dim myVar As Variant '初期値はEmpty myVar = Null 'Nullを代入 Debug.Print VarType(myVar) '--> 1(定数vbNull)と表示される Debug.Print TypeName(myVar) '--> Null と表示される Debug.Print IsNull(myVar) '--> True と表示される
VBはDoubleをIntegerに代入する際、四捨五入されます。
そのため、次のような計算をする際は注意が必要です。
Dim valA As Integer Dim valB As Integer Dim valC As Integer valA = 3 valB = 2 valC = valA / valB 'valC = 2 となる
Dim str As String Dim a As Integer, b As Integer a = 3 b = 1 str = IIf(a > b, "大きい", "等しいか小さい") MsgBox str
Sub Test() Dim str As String str = "text" Call SubTest(str) End Sub Sub SubText(str As String) MsgBox "テキスト : " + str End Sub
プロシージャの途中でリターンするときは、Exit Subを使う。
Call ステートメントでの呼び出しも可能。
Sub Test() Dim v As Integer v = FuncAdd(10, 20) End Sub Function FuncAdd(a As Integer, b As Integer) As Integer FuncAdd = a + b ' 計算結果を返す End Function
プロシージャの途中でリターンするときは、Exit Functionを使う。
ByVal | 値渡し | 指定しない場合はこれ |
ByRef | 参照渡し | 呼び出し元の変数を関数内で変更できる |
Sub Test() Dim str As String str = "text" Call Func(str) End Sub Sub Func(ByRef a As String) a = "suzuki" ' 受け取った値を書き換える End Sub
If ActiveCell.Value = "text" Then MsgBox "等しい" Else MsgBox "等しくない" End If If ActiveCell.Value <> "text" Then MsgBox "等しくない" Else MsgBox "等しい" End If
If InStr(ActiveCell.Value, "text") > 0 Then MsgBox "含まれている" Else MsgBox "含まれていない" End If
Like、「*」、「?」 を使って判定する。
' abc, xyz の間に任意の文字列が入ってもOK If ActiveCell.Value Like "abc*xyz" Then ' ' 1〜5で始まる文字列 If ActiveCell.Value Like "[1-5]*" Then ' 都道府県名のうち、北海道、東京都、神奈川県、和歌山県、鹿児島県 以外がtrueになる If Not c.Value Like "??[県府]" Then
文字列操作関数には最後に$記号を付けられるものがあります。
$記号なし | 返り値は Variant型 | |
$記号あり | 返り値は String型 | 戻り値の方が決まっているので、処理速度が速い |
例 Left(str As String, length As Long) Left$(str As String, length As Long) As String
Dim list As Collection Set list = New Collection ' listに要素を追加する Dim col As Integer col = 1 Do While ActiveSheet.Cells(1, col) <> "" list.Add ActiveSheet.CelllS(1, col) col = col + 1 Loop ' リストの要素を順に処理する Dim str As String str = "" For Each v In list str = str & v.Value Next
Dim dict As Scripting.Dictionary Set dict = CreateObject("Scripting.Dictionary") dict.Add "A1", ActiveSheet.Cells("A1") dict.Add "A2", ActiveSheet.Cells("A2") dict.Add "A3", ActiveSheet.Cells("A3") Dim key As Variant For Each key In dict.Keys Debug.Print key, dict(key).Value Next
●TestClass
Private v0 As Integer Private v1 As Integer Public Sub SetParam(a As Integer, b As Integer) v0 = a v1 = b End Sub Public Sub Output() MsgBox "add : " & (v0 + v1) & vbCrLf & "sub : " & (v0 - v1) End Sub
●呼び出し
Dim testClass As TestClass Set testClass = new TestClass Call testClass.SetParam(10, 20) Call testClass.Output
最新コメント