最終更新:
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


最新コメント