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 テクニック編資料