■ 数値操作関数・評価関数・その他の関数について
ここでは、文字列操作1、2や、日付操作関数などで解説しなかった、VBAの重要な関数について解説します。これらの関数をマスターすれば、VBAにおける開発で必要な関数については、ほぼ網羅したことになります。あとは、必要に応じて特殊な関数をその都度マスターしていけば、ほとんどの開発シーンで困ることはなくなるでしょう。
数値操作関数
数値を切り捨てたり、四捨五入するなど、主に数値の編集に使われる関数です。
■Int関数 Fix関数
Int関数、Fix関数、ともに数値の整数部分を返します。引数の小数部分を切り捨てる動作は同じですが、負の数に対する動作が異なります。
[書式]
Int(数値)
Fix(数値)
[使用例]
Sub Test()
Debug.Print Int(1.5)
Debug.Print Fix(1.5)
Debug.Print Int(-1.5)
Debug.Print Fix(-1.5)
End Sub
コードを実行すると、「1」「1」「-2」「-1」とイミディエイトウィンドウに出力されます。引数が「-1.5」のとき、Int関数とFix関数で処理が異なります。これは、引数が負の数の場合、Int関数は絶対値が大きくなる方に、Fix関数は絶対値が小さくなる方に丸められるためです。 |
■Round関数
Round関数は、小数部分を四捨五入した結果を返します。通常の四捨五入とは、丸める動作が異なるので(銀行型の丸め)注意が必要です。
[書式]
Round(数値,丸める小数点の位置)
[使用例]
Sub Test()
Debug.Print Round(0.015, 2)
Debug.Print Round(0.025, 2)
Debug.Print Round(0.035, 2)
Debug.Print Round(0.045, 2)
End Sub
コードを実行すると、「0.02」「0.02」「0.04」「0.04」とイミディエイトウィンドウに出力されます。丸めの対象となる数値が「5」の場合、四捨五入ではなく最も近い偶数に丸められます。それ以外の動作は、四捨五入と同じです。 |
■Rnd関数 Randomize関数
Rnd関数は、0以上1未満の範囲の乱数を返します。Randomize関数は乱数の初期値を変更します。
[書式]
Rnd(数値)
Randomize(数値)
※ Rnd関数、Randomize関数の引数は、特に指定する必要はありません。
[使用例]
Sub Test()
Dim i As Long
Randomize
For i = 1 To 5
Debug.Print Int((Rnd * 10) + 1)
Next i
End Sub
コードを実行すると、「1〜10」の範囲の整数が5回ランダムにイミディエイトウィンドウに出力されます。 |
評価関数
条件分岐の条件式で、データの型を調べるときに主に使われます。
■IsNull関数 IsNumeric関数 IsDate関数
IsNull関数は、元となるデータがNull値かどうかを調べます。
IsNumeric関数は、元となるデータが数値かどうかを調べます。
IsDate関数は、元となるデータが日付かどうかを調べます。
[書式]
IsNull(元の値)
IsNumeric(元の値)
IsDate(元の値)
[使用例]
Sub Test()
Dim MyVal As Variant
MyVal = ""
Debug.Print IsNull(MyVal)
MyVal = "@@@@@"
Debug.Print IsNumeric(MyVal)
MyVal = #1/1/2009#
Debug.Print IsDate(MyVal)
End Sub
コードを実行すると、「False」「False」「True」とイミディエイトウィンドウに出力されます。変数MyValueに「""(空の文字列)」を格納したため、「IsNull(MyValue)」は「False」を返します。次に"@@@@@"の文字列を格納したため、「IsNumeric(MyValue)」は「False」を返します。次に#1/1/2009#の日付を格納したため、「IsDate(MyValue)」は「True」を返しました。 |
その他の関数
覚えておくと便利な関数です。頻繁に使用されます。
■MsgBox関数
引数に指定した文字列を画面に表示します。アイコンを表示したり、ユーザーが選択したボタンの値を取得することもできます。
[書式]
MsgBox(メッセージ,ボタン,タイトル)
MsgBox関数の引数 |
引数 |
定数 |
説明 |
メッセージ |
|
メッセージとして表示される文字列 |
ボタン(省略可) |
vbOKOnly(既定) |
[OK]ボタンを表示 |
|
vbOKCancel |
[OK][キャンセル]のボタンを表示 |
|
vbAbortRetryIgnore |
[中止][再試行][無視]のボタンを表示 |
|
vbYesNoCancel |
[はい][いいえ][キャンセル]のボタンを表示 |
|
vbYesNo |
[はい][いいえ]のボタンを表示 |
|
vbRetryCancel |
[再試行][キャンセル]のボタンを表示 |
タイトル(省略可) |
|
タイトルとして表示する文字列 |
※ 表示するアイコンを指定することができます。その場合、定数どうしを+演算子で加算します。
アイコンに関する定数 |
定数 |
アイコン |
vbCritical |
警告メッセージアイコン |
vbQuestion |
問い合わせメッセージアイコン |
vbExclamation |
注意メッセージアイコン |
vbInformation |
情報メッセージアイコン |
※ MsgBox関数は、ユーザーがクリックしたボタンの結果を返します。また結果を利用するときは、引数全体をカッコで囲みますが、結果を利用しないときはカッコで囲みません。
MsgBox関数が返す定数 |
押されたボタン |
返す定数 |
[OK]ボタン |
vbOK |
[キャンセル]ボタン |
vbCancel |
[中止]ボタン |
vbAbort |
[再試行]ボタン |
vbRetry |
[無視]ボタン |
vbIgnore |
[はい]ボタン |
vbYes |
[いいえ]ボタン |
vbNo |
[使用例]
Sub Test()
Select Case MsgBox("選択してください", vbAbortRetryIgnore + vbCritical)
Case vbAbort
MsgBox "「中止」が選択されました", vbCritical
Case vbRetry
MsgBox "「再試行」が選択されました", vbExclamation
Case vbIgnore
MsgBox "「無視」が選択されました", vbInformation
End Select
End Sub
コードを実行すると、[中止][再試行][無視]のボタンを持つメッセージが表示されます。
いずれかのボタンを押すと、押されたボタンの種類をメッセージで表示します。 |
■InputBox関数
InputBox関数は、ユーザーからの入力を受け付けるダイアログボックスを表示します。
[書式]
InputBox(メッセージ,タイトル,初期値,左端座標,上端座標)
InputBox関数の引数 |
引数 |
説明 |
メッセージ |
メッセージとして表示される文字列 |
タイトル(省略可) |
タイトルとして表示される文字列 |
初期値(省略可) |
入力欄の初期値の文字列 |
左端座標(省略可) |
左端座標。省略すると画面中央に配置 |
上端座標(省略可) |
上端座標。省略すると画面中央に配置 |
[使用例]
Sub Test()
Dim MyString As String
MyString = InputBox("IDを入力してください", "IDの入力", "Guest")
If MyString = "" Then
MsgBox "IDが入力されませんでした"
ElseIf MyString = "Guest" Then
MsgBox "Guestでログインしています"
Else
MsgBox MyString & "さん、ようこそ"
End If
End Sub
コードを実行すると、ダイアログボックスが表示されます。キャンセルすると、空の文字列が返るため、変数MyStringに「""(空の文字列)」が格納されます。何も入力せずOKボタンをクリックすると、初期値の「Guest」IDが格納されます。IDを入力して、OKボタンをクリックすると、入力されたIDがMyStringに格納されます。 |
※ InputBox関数が返す値は、あくまでString型の文字列です。数値を入力させるときは、CLng関数などで明示的に型変換を行ってください。
■LBound関数 UBound関数
LBound関数は、配列のインデックス番号の下限を返します。
UBound関数は、配列のインデックス番号の上限を返します。
[書式]
LBound(配列,次元)
UBound(配列,次元)
引数「次元」は省略できます。省略すると1番目の次元が対象になります。
[使用例]
Sub Test()
Dim MyArray(5 To 10) As String
Debug.Print LBound(MyArray)
Debug.Print UBound(MyArray)
End Sub
コードを実行すると、「5」「10」とイミディエイトウィンドウに出力されます。Toキーワードを使用して、配列変数MyArrayのインデックス番号の開始値を「5」に、終了値を「10」に設定しています。そのため、LBound(MyArray)、UBound(MyArray)の返す値は「5」「10」になります。 |
■Array関数
指定された要素からバリアント型の配列を作ります。
[書式]
Array(要素1,要素2,要素3,…)
[使用例]
Sub Test()
Dim MyVal As Variant
Dim i As Long
MyVal = Array("AAA", "BBB", "CCC")
For i = 0 To UBound(MyVal)
Debug.Print i + 1 & "番目の要素は" & MyVal(i)
Next i
End Sub
コードを実行すると、「1番目の要素はAAA」「2番目の要素はBBB」「3番目の要素はCCC」とイミディエイトウィンドウに出力されます。またこの場合、対象となるバリアント型変数は配列として宣言しないので注意してください。 |
以上、数値操作関数、評価関数、その他の関数を紹介しました。
これらの関数は、頻繁に使用されるとても重要な関数です。ぜひ、これらの関数をマスターし、プログラムの中で自由に使いこなしてください。
あなたのプログラミングテクニックは、見違えるように上達することでしょう。
|