SAK 図書館
VB 基礎編 (その九) その他関数 declare、IsNull、hex、CDec、split、Choose
一応、基礎編最後のその他ステートメント、関数の説明です。 ■DLL 呼び出し Public Declare Function GetUserNameA Lib "advapi32" (ByVal buf as string, size as long) As Long Public Declare Function GetUserName Lib "advapi32" Alias "GetUserNameA" (ByVal buf as string, size as long) As Long Windows API、DLL 関数を呼び出す場合に定義します。 Alias を使用すると、DLL 内の関数名と別名で呼び出すことができます。 Declare 定義した後は、通常の関数と同じに呼び出せます。 尚、Windows API や C で作られた DLL のパラメタは一般に値渡しなので、 ByVal キーワードが必要です。 ■Command Windows に渡されたコマンドラインパラメタを引き取るには、次のようにする。 (コマンドライン引数) dim cmdline as string cmdline = Command ■iif c = iif(a < b, b, a) | | |_ FALSE のときの返す値 | |_ TRUE のときの返す値 |_ 評価式 Excel のシートで使う if 関数みたいなもの。 ■ubound i = ubound(a) |_ 配列 a の最大添字を返す i = ubound(b, 1) | |_ n 次元目について調べる |_ 配列 b の最大添字を返す '** 一般配列の未配列、動的配列添字上限取得サンプルコード dim a() as long print uboundsp(a) redim a(10) as long print uboundsp(a) function uboundsp(v as variant) as long on error resume next uboundsp = ubound(v) if err <> 0 then uboundsp = -1 on error goto 0 end function '** 構造体配列の未配列、動的配列添字上限取得サンプルコード ' 構造体では variant による受け取りはコンパイルエラーとなる。 ' 汎用性はなくなる。 dim a() as rec print uboundrec(a) redim a(10) as rec print uboundrec(a) type rec a as long b as long end type function uboundrec(v() as rec) as long on error resume next uboundrec = ubound(v) if err <> 0 then uboundrec = -1 on error goto 0 end function ■lbound i = lbound(a) |_ 配列 a の最小添字を返す i = lbound(b, 1) | |_ n 次元目について調べる |_ 配列 b の最小添字を返す ■Is... IsArray(変数) |_ 配列か調べる IsDate(変数) |_ 日付か調べる IsEmpty(変数) |_ 使われているか調べる IsNull(変数) |_ NULL 値か調べる IsNumeric(変数) |_ 数値か調べる IsObject(変数) |_ オブシェクトか調べる それぞれ該当する場合は TRUE が、そうでない場合は FALSE が返る。 ■nothing set obj = nothing |_ オブジェクト変数 レコードセット変数など、set で作成したオブジェクトリソースを解放する。 ■array dim a as variant a = array(1, 200, 500) msgbox a(1) '** 200 が表示される 配列として宣言していない variant 変数に配列をセットします。 配列へのアクセスは、通常の a(0)、a(1)、a(2) のように添字でします。 ■beep ポロン♪と音がなります。エラーのときなどにメッセージと合わせて使用。 ■dir ファイルの所在を調べたりできます。 尚、dir は、再帰処理には対応していない。 再帰処理する場合は、ファイルシステムオブジェクトを使用した方が良い。 dim fnm as string fnm = dir(g:\tmp\*.txt) do until fnm = "" '** ファイル毎の処理 ... ... '** 次のファイル名取得 fnm = dir() loop ■filecopy いつの間にこんなに便利なもの出来ていたんでしょう。(^◇^;) 簡単にファイルコピーできるらしいです。(^^; (^^; (^^; filecopy "g:\tmp\a.xls", "g:\tmp\b.xls" ■filelen 指定ファイルのサイズを返します。 ■freefile 標準ファイル I/O で使用するファイルハンドルの空いているハンドル番号を 返します。 ■hex 16 進文字列に数値を変換します。(16 進数変換) 【例】'** 13 を 16 進へ変換 dim h as string h = hex(13) h には、"0D" がセットされます。 【例】'** 16 進文字列を数値に変換 dim n as integer n = val("&H" & "0D") n には、13 がセットされます。 10 進数に変換するとき、16 ビット目がサインビットとなることに注意 する。(&H8000 = - 32768、&HFFFF = -1) 16 ビット符号なしとして処理する場合は、最後に & を付加する。 【例】'** 32 ビット 16 進文字列を数値に変換 dim n as long n = val("&HFFFF&") 32 ビット目をサインビットとするので、 &H8000 = 32768、&HFFFF = 65535 となる。 尚、&H8000000& の 32 ビット目のサインビットはロジックでしか 符号なし処理できない。 ■kill ファイルを削除します。 ■loc 標準ファイル I/O でオープンした現在のシーク位置を返します。 ■lof 標準ファイル I/O でオープンしたファイルサイズを返します。 ■seek 標準ファイル I/O でオープンしたファイルの指定位置にシークします。 ■name ファイル名を変更します。 ■randomize 乱数系列を初期化します。 ■rnd 乱数を発生します。 ■sqr ルートを求めます。 ■on error resume next エラーが発生しても次のステップへ行きます。 ■err エラーコードを調べます。(正常 = 0) 【注意】VB5 以上は long タイプです。 ■on error goto 0 エラートラップを禁止します。 これが実行されると err は初期化されます。 ■shell 別のプログラムを起動します。 (アプリケーション起動、他のプログラム起動) diim rcd as long rcd = shell("calc.exe", 1) ■raise オブジェクトの実行時エラーを生成します。 object.raise ecd, , ems | |_ エラーメッセージ |_ エラーコード ■データ型変換関数 データ型の変換を行います。 (数値変換、数値型変換、文字列変換、文字列型変換) a = CBool(データ) '** 論理型 a = CByte(データ) '** バイト型 a = CCur(データ) '** 通貨型 a = CDate(データ) '** 日付型 a = CDbl(データ) '** 倍精度型 a = CDec(データ) '** 10 進型 a = CInt(データ) '** 整数型 a = CLng(データ) '** 長整数型 a = CSng(データ) '** 単精度型 a = CVar(データ) '** バリアント型 a = CStr(データ) '** 文字列型 |_ 変数、または、演算結果 旧 VB 互換データ型の変換を行います。 a = CVDate(データ) '** 内部形式 Date のバリアント型 |_ VB6 では、CDate を使用する ■split 列挙データから、1 次元配列を返す。 dim a as variant a = split("abc,def,123", ",") | |_ 区切り記号 |_ データ列挙 msgbox a(1) ■SaveAs コンポーネント、プロジェクトを新しいファイル名を付けて保存する。 object.SaveAs ("g:\tmp\test.frm") |_ オブジェクト ■文字列比較 文字列の C 言語風比較を行う。 dim rcd as variant rcd = StrComp(s1, s2, md) | | | |_ -1 Option Compare 設定で比較 | | | 0 パイナリ比較 | | | 1 テキスト比較 | | | 2 MDB 格納設定で比較 | | |_ 変数2 | |_ 変数1 |_ -1 s1 < s2 0 s1 = s2 1 s1 > s2 null s1 = null or s2 = null ■Choose データのリストからの選択を行う。 dim s as variant dim i as integer i = 2 s = Choose(i, "abc", "def", "ghi") s = Choose(i, 100, 200, 300) | | |_ リスト1 (カンマでいくつものリストを指定する) | |_ インデックス 1 〜 n (最初が 1) |_ 該当するデ−タ ■Dictionary Perl のハッシュ変数と同等の機能を提供する。 dim hdata as variant Set hdata = CreateObject("Scripting.Dictionary") hdata.Add "key1", "data1" hdata.Add "key2", "data2" | |_ データ |_ キー if hdata.Exists("key2") then msgbox "あり" else msgbox "なし" end if msgbox hdata.count msgbox hdata.item("key1") hdata.Remove "key2" hdata.RemoveAll ■End VB を終了する。(プログラム終了) オープンしているファイルはクローズされる。 ウィンドウオブジェクトがある場合(フォームなど) は、一般的には unload form1 で、form_unload を呼び出して終了させる。 end は、強制終了に近い。 end ■LoadResString リソースファイル(.res .rc) のストリングテーブル(STRINGTABLE) を Windows API の LoadString(hInstance, IDS_IX, str, sizeof(str)); と 同等に読み出す。 dim s as string s = LoadResString(ix) | |_ STRINGTABLE ID |_ 文字データ ■debug.print VB 統合環境のインタプリタ実行でのみ有効なデバッグメッセージ表示機能。 debug.print "エラー" ■円周率(PI) dim pi as double pi = 3.141592654 ■TypeName 変数タイプ取得 dim a as long msgbox TypeName(a) ■VB 基礎編資料
■VB 入門編資料
■VB ビジュアル編資料
■VB テクニック編資料