#Const ディレクティブの使用例

次の例は、#Const ディレクティブを使って、制御構造 #If...#Else...#End If 内で使用する条件付きコンパイル定数を宣言します。

#Const DebugVersion = 1	' #If ブロックで True に評価されます。


#If...Then...#Else ディレクティブの使用例

次の例は、どのステートメント ブロックをコンパイルするのかを判断するときに、制御構造 #If...Then...#Else 内で条件付きコンパイル定数を参照します。

' Mac が True の場合は、#If に続くステートメントを実行します。

#If Mac Then

'. Mac 専用のステートメントを、この部分に記述します。

'.

'.

' 32 ビットの Windows 専用プログラムの場合は、# ElseIf に続くステートメントを実行します。

#ElseIf Win32 Then

'. 32 ビットの Windows 専用のステートメントを、この部分に記述します。

'.

'.

' どちらでもない場合は、# Else に続くステートメントを実行します。

#Else

'. その他のプラットフォーム用のステートメントを、この部分に記述します。

'.

'.

#End If


#Const ディレクティブ

Visual Basic の条件付きコンパイラ定数を定義します。

構文

#Const constname = expression

#Const ディレクティブの構文は、次の指定項目から構成されます。

指定項目	内容
constname	必ず指定します。定数の名前を指定します。変数の標準的な名前付け規則に従って指定します。
expression	必ず指定します。リテラル値、その他の条件付きコンパイラ定数、算術演算子や論理演算子 (Is を除く) を任意に組み合わせた式を指定します。
解説

条件付きコンパイラ定数は必ず、それが定義されているモジュール内でだけ参照できるプライベート定数となります。#Const ディレクティブでパブリックなコンパイラ定数を定義することはできません。パブリックなコンパイラ定数はユーザー インターフェイス内でのみ定義できます。

引数 expression では、条件付きコンパイラ定数とリテラル値だけが使用できます。Const ステートメントで定義された通常の定数および未定義の定数を使用すると、エラーが発生します。一方、キーワード #Const で定義された定数は、条件付きコンパイル以外には使えません。

条件付きコンパイラ定数は、コード内のどこに記述したかに関係なく、必ずモジュール レベルで評価されます。


#If...Then...#Else ディレクティブ

式の値に基づいて、条件付きのコンパイルを行います。

構文

#If expression Then

statements

[#ElseIf expression-n Then

[elseifstatements]]

[#Else

[elsestatements]]

#End If

#If...Then...#Else ディレクティブの構文は、次の指定項目から構成されます。

指定項目	内容
expression	必ず指定します。真 (True) または偽 (False) を評価する、1 つまたは複数の条件付きコンパイラ定数、リテラル値、および演算子だけで構成される任意の式を指定します。
statements	必ず指定します。引数 expression が真 (True) の場合に評価される、Visual Basic のコードまたはコンパイラ ディレクティブを指定します。
expression-n	省略可能です。真 (True) または偽 (False) を評価する、1 つまたは複数の条件付きコンパイラ定数、リテラル値、および演算子だけで構成される任意の式を指定します。
Elseifstatements	省略可能です。引数 expression-n が真 (True) の場合に評価される、1 つまたは複数の Visual Basic のコードまたはコンパイラ ディレクティブを指定します。
elsestatements	省略可能です。真 (True) に評価される引数 expression または引数 expression-n がない場合に評価される、1 つまたは複数のVisual Basic のコードまたはコンパイラ ディレクティブを指定します。
解説

#If...Then...#Else ディレクティブは、If...Then...Else ステートメントと同じように動作します。ただし、#If、#Else、#ElseIf および #End If の各ディレクティブの場合、1 行形式の記述はできません。つまり、これら各ディレクティブと同じ行に他のコードを記述することはできません。通常、条件付きコンパイルは同じプログラムを異なるシステムでコンパイルするために使用します。また、デバッグ コードが実行可能ファイルに表示されるのを防ぐためにも使用します。条件付きコンパイルによって省略されたコードは、コンパイル後の実行可能ファイルからは取り除かれるため、プログラムのサイズや動作に影響しません。

#If...Then...#Else ディレクティブでは、評価結果に関係なくすべての式が評価されます。したがって、式の中で使用する定数はすべて定義しておく必要があります。未定義の定数は、Empty 値として評価されます。

メモ   Option Compare ステートメントは、#If ステートメントと #ElseIf ステートメントの式に影響しません。条件付きコンパイラ ディレクティブの式は、常に Option Compare ステートメントの Text モードの設定で評価されます。


Visual Basic の定数

Visual Basic for Applications では、プログラミングを簡単にするための定数が定義されています。次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

CallType の定数

Date の定数

Date の書式の定数

Dir、GetAttr、および SetAttr の定数

DriveType プロパティの定数

ファイル属性の定数

ファイル入出力の定数

Form の定数

IMEStatus の定数

MsgBox の定数

QueryClose の定数

Shell の定数

StrConv の定数

特殊フォルダの定数

VarType の定数

Visual Basic の定数

色の定数

カレンダーの定数

キー コードの定数

コンパイラ定数

システム カラーの定数

その他の定数

地域設定の定数

比較の定数


QueryClose の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbFormControlMenu	0	ユーザー フォームのコントロール メニューの [閉じる] がクリックされました。
vbFormCode	1	コードから Unload ステートメントが起動されました。
vbAppWindows	2	現在の Microsoft Windows のオペレーティング環境セッションが終了しました。
vbAppTaskManager	3	Windows のタスク マネージャによって、アプリケーションが閉じられました。


カレンダーの定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbCalGreg	0	グレゴリオ暦が使われていることを示します。
vbCalHijri	1	回教暦が使われていることを示します。


コンパイラ定数

Visual Basic for Applications では、#If...Then...#Else ディレクティブ専用の定数が定義されています。これらの定数は、#If...Then...#Else ディレクティブで定義される定数と機能的には同じですが、適用範囲が広く、プロジェクト内のどこでも使用できます。

16 ビットの開発環境では、コンパイラ定数は次のように定義されています。

定数	値	内容
Win16	True	開発環境が 16 ビットであることを示します。
Win32	False	開発環境が 32 ビットではないことを示します。
32 ビットの開発環境では、コンパイラ定数は次のように定義されています。

定数	値	内容
Vba6	True	開発環境が Visual Basic for Applications, Version 6.0 であることを示します。
Vba6	False	開発環境が Visual Basic for Applications, Version 6.0ではないことを示します
Win16	False	開発環境が 16 ビットではないことを示します。
Win32	True	開発環境が 32 ビットであることを示します
Mac	False	開発環境が Macintosh ではないことを示します。
Win16	False	開発環境が 16 ビットではないことを示します。
Win32	False	開発環境が 32 ビットではないことを示します。
Mac	True	開発環境が Macintosh であることを示します。
メモ   これらの定数は Visual Basic によって提供されています。どのレベルでも、これらの定数と同じ名前のユーザー定義の定数を定義できません。


Date の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

引数の値

引数 firstdayofweek の設定値は次のとおりです。

定数	値	内容
vbUseSystem	0	NLS API の設定値
vbSunday	1	日曜日 (既定値)
vbMonday	2	月曜日
vbTuesday	3	火曜日
vbWednesday	4	水曜日
vbThursday	5	木曜日
vbFriday	6	金曜日
vbSaturday	7	土曜日
引数 firstdayofyear の設定値は次のとおりです。

定数	値	内容
vbUseSystem	0	NLS API の設定値。
vbUseSystem DayOfWeek	0	システムの設定で指定された週の最初の曜日から開始します。
vbFirstJan1	1	1 月 1 日を含む週から開始します。(既定値)
vbFirstFourDays	2	新しい年の少なくとも 4 日間を含む週から開始します。
vbFirstFullWeek	3	新しい年の 1 週間を含む最初の週から開始します。
戻り値

定数	値	内容
vbSunday	1	日曜日
vbMonday	2	月曜日
vbTuesday	3	火曜日
vbWednesday	4	水曜日
vbThursday	5	木曜日
vbFriday	6	金曜日
vbSaturday	7	土曜日


Dir、GetAttr 関数、および SetAttr ステートメントの定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbNormal	0	通常ファイル (Dir 関数と SetAttr ステートメントの既定値)
vbReadOnly	1	読み取り専用ファイル
vbHidden	2	隠しファイル
vbSystem	4	システム ファイル
vbVolume	8	ボリューム ラベル
vbDirectory	16	フォルダ
vbArchive	32	アーカイブ属性 (最後にバックアップされた後で変更されたファイル)
vbAlias	64	Macintosh のエイリアス ファイル
VbNormal、vbReadOnly、vbHidden および vbAlias は Macintosh でのみ使用できます。


IMEStatus 関数の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

国別情報が日本に設定されている場合の定数は次のとおりです。

定数	値	内容
vbIMEModeNoControl	0	IME を制御しません。(既定値)
vbIMEModeOn	1	IME はオンの状態です。
vbIMEModeOff	2	IME はオフの状態です。
vbIMEModeDisable	3	IME は利用禁止状態です。
vbIMEModeHiragana	4	IME は全角ひらがな入力モードです。
vbIMEModeKatakana	5	IME は全角カタカナ入力モードです。
vbIMEModeKatakanaHalf	6	IME は半角カタカナ入力モードです。
vbIMEModeAlphaFull	7	IME は全角英数入力モードです。
vbIMEModeAlpha	8	IME は半角英数入力モードです。
国別情報が韓国に設定されている場合、IMEStatus 関数の戻り値は次のようになります。

定数	値	内容
vbIMEModeNoControl	0	IME を制御しません。(既定値)
vbIMEModeAlphaFull	7	IME は全角英数入力モードです。
vbIMEModeAlpha	8	IME は半角英数入力モードです。
vbIMEModeHangulFull	9	IME は全角ハングル モード モードです。
vbIMEModeHangul	10	IME は半角ハングル モード モードです。
国別情報が中国 (繁體字版および簡体字版) に設定されている場合、IMEStatus 関数の戻り値は次のようになります。

定数	値	内容
vbIMEModeNoControl	0	IME を制御しません。(既定値)
vbIMEModeOn	1	IME はオンの状態です。
vbIMEModeOff	2	IME はオフの状態です。


比較の定数

次の定数は Visual Basic for Applications のタイプ ライブラリで定義されており、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbUseCompareOption	-1	Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare	0	バイナリ モードで比較を行います。
vbTextCompare	1	テキスト モードで比較を行います。
vbDatabaseCompare	2	Microsoft Access を使用している場合、データベースに格納されている方法に基づいて比較を行います。


その他の定数

次の定数は Visual Basic for Applications のタイプ ライブラリで定義されており、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbCrLf	Chr(13) + Chr(10)	キャリッジ リターンとライン フィードの組み合わせ
vbCr	Chr(13)	キャリッジ リターン文字
vbLf	Chr(10)	ライン フィード文字
vbNullChar	Chr(0)	値 0 を持つ文字
vbNewLine	Chr(13) + Chr(10) または Chr(13) (Macintosh では Chr(13))	プラット フォームで指定した改行文字。現在のプラット フォームで適切ないずれかを使用します。
vbNullString	値 0 を持つ文字列	長さ 0 の文字列 ("") とは異なります。外部プロシージャを呼び出す場合に使用します。
vbTab	Chr(9)	タブ文字
vbBack	Chr(8)	バックスペース文字
vbFormFeed	Chr(12)	Microsoft Windows または Macintosh では使用できません。
vbVerticalTab	Chr(11)	Microsoft Windows または Macintosh では使用できません。


MsgBox 関数の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

MsgBox 関数の引数の値

定数	値	内容
vbOKOnly	0	(既定値) [OK] ボタンのみを表示します。
vbOKCancel	1	[OK] ボタンと [キャンセル] ボタンを表示します。
vbAbortRetryIgnore	2	[中止]、[再試行]、[無視] の 3 つのボタンを表示します。
vbYesNoCancel	3	[はい]、[いいえ]、[キャンセル] の 3 つのボタンを表示します。
vbYesNo	4	[はい] ボタンと [いいえ] ボタンを表示します。
vbRetryCancel	5	[再試行] ボタンと [キャンセル] ボタンを表示します。
vbCritical	16	警告メッセージ アイコンを表示します。
vbQuestion	32	問い合わせメッセージ アイコンを表示します。
vbExclamation	48	注意メッセージ アイコンを表示します。
vbInformation	64	情報メッセージ アイコンを表示します。
vbDefaultButton1	0	(既定値)第 1 ボタンを標準ボタンに設定します。
vbDefaultButton2	256	第 2 ボタンを標準ボタンに設定します。
vbDefaultButton3	512	第 3 ボタンを標準ボタンに設定します。
vbDefaultButton4	768	第 4 ボタンを標準ボタンに設定します。
vbApplicationModal	0	(既定値)アプリケーション モーダルに設定します。
vbSystemModal	4096	システム モーダルに設定します。
vbMsgBoxHelpButton	16384	ヘルプ ボタンを追加します。
VbMsgBoxSetForeground	65536	最前面のウィンドウとして表示します。
vbMsgBoxRight	524288	テキストを右寄せで表示します。
vbMsgBoxRtlReading	1048576	テキストを、右から左の方向で表示します。
MsgBox 関数の戻り値

定数	値	内容 (選択されたボタン)
vbOK	1	[OK]
vbCancel	2	[キャンセル]
vbAbort	3	[中止]
vbRetry	4	[再試行]
vbIgnore	5	[無視]
vbYes	6	[はい]
vbNo	7	[いいえ]


Shell 関数の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbHide	0	ウィンドウは隠されています。フォーカスは隠されたウィンドウに渡されます。
vbNormalFocus	1	ウィンドウはフォーカスを持ち、元の大きさと位置が格納されています。
vbMinimizedFocus	2	ウィンドウはフォーカスを持った状態でアイコン表示されています。
vbMaximizedFocus	3	ウィンドウはフォーカスを持った状態で最大化表示されています。
vbNormalNoFocus	4	ウィンドウの最新の大きさと位置を格納します。
VbMinimizedNoFocus	6	ウィンドウはアイコン表示されています。現在アクティブなウィンドウはアクティブなままです。
Macintosh では、vbNormalFocus、vbMinimizedFocus およびvbMaximizedFocus のいずれかを指定した場合、アプリケーションは前面に表示されます。vbHide、vbNoFocus および vbMinimizedFocus のいずれかを指定した場合はアプリケーションは背面に表示されます。


StrConv 関数の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbUpperCase	1	文字列を大文字に変換します。
vbLowerCase	2	文字列を小文字に変換します。
vbProperCase	3	文字列の各単語の先頭の文字を大文字に変換します。
vbWide	4	文字列内の半角文字 (1 バイト) を全角文字 (2 バイト) に変換します。国別設定.の設定が中国、韓国、および日本の場合に適用されます。
vbNarrow	8	文字列内の全角文字 (2 バイト) を半角文字 (1 バイト) に変換します。国別情報の設定が中国、韓国、および日本の場合に適用されます。
vbKatakana	16	文字列内のひらがなをカタカナに変換します。国別情報の設定が日本の場合のみ有効です。
vbHiragana	32	文字列内のカタカナをひらがなに変換します。国別情報の設定が日本の場合のみ有効です。
vbUnicode	64	システムの既定のコード ページを使って、文字列を Unicode に変換します。. (Macintosh では利用できません。)
vbFromUnicode	128	文字列を Unicode からシステムの既定のコード ページに変換します。 (Macintosh では利用できません。)


VarType 関数の定数 (バリアント型 (Variant) 変数の内部処理形式)

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbEmpty	0	Empty 値 (未初期化) (既定値)
vbNull	1	Null 値 (無効な値)
vbInteger	2	Integer
vbLong	3	長整数型 (Long)
vbSingle	4	単精度浮動小数点数型 (Single)
vbDouble	5	倍精度浮動小数点数型 (Double)
vbCurrency	6	通貨型 (Currency)
vbDate	7	日付型 (Date)
vbString	8	文字列型 (String)
vbObject	9	オブジェクト
vbError	10	エラー値 (Error)
vbBoolean	11	ブール型 (Boolean)
vbVariant	12	バリアント型 (Variant) (バリアント型配列にのみ使用)
vbDataObject	13	データ アクセス オブジェクト
vbDecimal	14	10 進型 (Decimal)
vbByte	17	バイト型 (Byte)
vbUserDefinedType	36	ユーザー定義型を含むバリアント型
vbArray	8192	配列


色の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbBlack	0x0	黒
vbRed	0xFF	赤
vbGreen	0xFF00	緑
vbYellow	0xFFFF	黄
vbBlue	0xFF0000	青
vbMagenta	0xFF00FF	マゼンタ
vbCyan	0xFFFF00	シアン
vbWhite	0xFFFFFF	白


キー コードの定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbKeyLButton	0x1	マウスの左ボタン
vbKeyRButton	0x2	マウスの右ボタン
vbKeyCancel	0x3	Cancel キー
vbKeyMButton	0x4	マウスの右ボタン
vbKeyBack	0x8	BackSpace キー
vbKeyTab	0x9	Tab キー
vbKeyClear	0xC	Clear キー
vbKeyReturn	0xD	Enter キー
vbKeyShift	0x10	Shift キー
vbKeyControl	0x11	Ctrl キー
vbKeyMenu	0x12	Alt キー
vbKeyPause	0x13	Pause キー
vbKeyCapital	0x14	CapsLock キー
vbKeyEscape	0x1B	Esc キー
vbKeySpace	0x20	Space キー
vbKeyPageUp	0x21	PageUp キー
vbKeyPageDown	0x22	PageDown キー
vbKeyEnd	0x23	End キー
vbKeyHome	0x24	Home キー
vbKeyLeft	0x25	← キー
vbKeyUp	0x26	↑ キー
vbKeyRight	0x27	→ キー
vbKeyDown	0x28	↓ キー
vbKeySelect	0x29	Select キー
vbKeyPrint	0x2A	PrintScreen キー
vbKeyExecute	0x2B	Execute キー
vbKeySnapshot	0x2C	Snapshot キー
vbKeyInsert	0x2D	Ins キー
vbKeyDelete	0x2E	Del キー
vbKeyHelp	0x2F	Help キー
vbKeyNumlock	0x90	NumLock キー
A ～ Z キーは、ASCII コードの A ～ Z に相当するものと同じです。

定数	値	内容
vbKeyA	65	A キー
vbKeyB	66	B キー
vbKeyC	67	C キー
vbKeyD	68	D キー
vbKeyE	69	E キー
vbKeyF	70	F キー
vbKeyG	71	G キー
vbKeyH	72	H キー
vbKeyI	73	I キー
vbKeyJ	74	J キー
vbKeyK	75	K キー
vbKeyL	76	L キー
vbKeyM	77	M キー
vbKeyN	78	N キー
vbKeyO	79	O キー
vbKeyP	80	P キー
vbKeyQ	81	Q キー
vbKeyR	82	R キー
vbKeyS	83	S キー
vbKeyT	84	T キー
vbKeyU	85	U キー
vbKeyV	86	V キー
vbKeyW	87	W キー
vbKeyX	88	X キー
vbKeyY	89	Y キー
vbKeyZ	90	Z キー
0 ～ 9 キーは、ASCII コードの 0 ～ 9 に相当するものと同じです。

定数	値	内容
vbKey0	48	0 キー
vbKey1	49	1 キー
vbKey2	50	2 キー
vbKey3	51	3 キー
vbKey4	52	4 キー
vbKey5	53	5 キー
vbKey6	54	6 キー
vbKey7	55	7 キー
vbKey8	56	8 キー
vbKey9	57	9 キー
次の定数は、テンキーの各キーを表します。

定数	値	内容
vbKeyNumpad0	0x60	0 キー
vbKeyNumpad1	0x61	1 キー
vbKeyNumpad2	0x62	2 キー
vbKeyNumpad3	0x63	3 キー
vbKeyNumpad4	0x64	4 キー
vbKeyNumpad5	0x65	5 キー
vbKeyNumpad6	0x66	6 キー
vbKeyNumpad7	0x67	7 キー
vbKeyNumpad8	0x68	8 キー
vbKeyNumpad9	0x69	9 キー
vbKeyMultiply	0x6A	アスタリスク (*) キー
vbKeyAdd	0x6B	プラス (+) キー
vbKeySeparator	0x6C	Enter キー
vbKeySubtract	0x6D	マイナス (-) キー
vbKeyDecimal	0x6E	ピリオド (.) キー
vbKeyDivide	0x6F	スラッシュ (/) キー
次の定数は、ファンクション キーの各キーを表します。

定数	値	内容
vbKeyF1	0x70	F1 キー
vbKeyF2	0x71	F2 キー
vbKeyF3	0x72	F3 キー
vbKeyF4	0x73	F4 キー
vbKeyF5	0x74	F5 キー
vbKeyF6	0x75	F6 キー
vbKeyF7	0x76	F7 キー
vbKeyF8	0x77	F8 キー
vbKeyF9	0x78	F9 キー
vbKeyF10	0x79	F10 キー
vbKeyF11	0x7A	F11 キー
vbKeyF12	0x7B	F12 キー
vbKeyF13	0x7C	F13 キー
vbKeyF14	0x7D	F14 キー
vbKeyF15	0x7E	F15 キー
vbKeyF16	0x7F	F16 キー


システム カラーの定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbScrollBars	0x80000000	スクロール バーの色
vbDesktop	0x80000001	デスクトップの色
vbActiveTitleBar	0x80000002	アクティブ ウィンドウのタイトル バーの色
vbInactiveTitleBar	0x80000003	非アクティブ ウィンドウのタイトル バーの色
vbMenuBar	0x80000004	メニューの背景色
vbWindowBackground	0x80000005	ウィンドウの背景色
vbWindowFrame	0x80000006	ウィンドウのフレームの色
vbMenuText	0x80000007	メニューの文字の色
vbWindowText	0x80000008	ウィンドウの文字の色
vbTitleBarText	0x80000009	キャプションの文字、サイズ ボックス、スクロール矢印の色
vbActiveBorder	0x8000000A	アクティブ ウィンドウの境界の色
vbInactiveBorder	0x8000000B	非アクティブ ウィンドウの境界の色
vbApplicationWorkspace	0x8000000C	マルチ ドキュメント インターフェイス (MDI) アプリケーションの背景色
vbHighlight	0x8000000D	コントロールで選択された項目の背景色
vbHighlightText	0x8000000E	コントロールで選択された項目の文字の色
vbButtonFace	0x8000000F	コマンド ボタンの表面の立体的な表示の色
vbButtonShadow	0x80000010	コマンド ボタンの端の立体的な表示の色
vbGrayText	0x80000011	淡色表示 (無効) の文字の色
vbButtonText	0x80000012	プッシュ ボタンの文字の色
vbInactiveCaptionText	0x80000013	非アクティブ キャプションの文字の色
vb3DHighlight	0x80000014	3D で最も明るく表示する要素の色
vb3DDKShadow	0x80000015	3D で最も暗く表示する要素の影の色
vb3DLight	0x80000016	vb3Dhighlight の後の 2 番目に明るく表示する要素の色
vbInfoText	0x80000017	ツール ヒントの文字の色
vbInfoBackground	0x80000018	ツール ヒントの背景色


CallType の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbMethod	1	メソッドが起動されたことを示します。
vbGet	2	Property Get プロシージャを示します。
vbLet	4	Property Let プロシージャを示します。
vbSet	8	Property Set プロシージャを示します。


Form の定数

次の定数は、実際の値の代わりにコード内のどの部分でも使うことができます。

定数	値	内容
vbModeless	0	UserForm はモードレスです。
vbModal	1	UserForm はモーダルです。(既定値)


Call ステートメントの使用例

次の例は、Call ステートメントが Private Sub プロシージャ、組み込み関数、ダイナミックリンク ライブラリ (DLL) プロシージャ、および Macintosh のコード リソース プロシージャに対して、どのように制御を渡すかを説明します。DLL は、Macintosh では使用できません。

' Private Sub プロシージャを呼び出します。

Call PrintToDebugWindow("Hello World")

' 上記のステートメントは、次の Private Sub プロシージャに制御を渡します。

Sub PrintToDebugWindow(AnyString)

Debug.Print AnyString	' イミディエイト ウィンドウに表示します。

End Sub

' 組み込み関数を呼び出します。関数の戻り値は、破棄されます。

Call Shell(AppName, 1)	' AppName には、実行可能ファイルのパスが格納されています。

' Microsoft Windows の DLL プロシージャを呼び出します。Declare ステートメントは、クラス モジュールではプライベートにする必要がありますが、標準 モジュールではプライベートにする必要はありません。

Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

Sub CallMyDll()

Call MessageBeep(0)	' Windows DLL プロシージャの呼び出し。

MessageBeep 0	' キーワード Call を省略した呼び出し。

End Sub


Choose 関数の使用例

次の例は、Choose 関数を使ってプロシージャに渡されたインデックス (引数 Ind) に対応する名前を返します。

Function GetChoice(Ind As Integer)

GetChoice = Choose(Ind, "Speedy", "United", "Federal")

End Function


DoEvents 関数の使用例

次の例は、DoEvents 関数を使って、ループを 1,000 回繰り返すたびに、オペレーティング システムに制御が返されます。DoEvents 関数は、現在開いているフォームの数を返します。ホスト アプリケーションが Visual Basic の場合のみ実行できます。

' ロード済みで現在表示されている Visual Basic のフォームの数を保持する変数を作成します。

Dim I, OpenForms

For I = 1 To 150000	' ループを開始します。

If I Mod 1000 = 0 Then 	' ループが 1,000 回繰り返されると

OpenForms = DoEvents	' オペレーティング システムに制御を渡します。

End If

Next I	' ループ カウンタを増やします。


Do...Loop ステートメントの使用例

次の例は、Do...Loop ステートメントの使い方を示しています。内側の Do...Loop ステートメントでは、ループを 10 回繰り返すとフラグの値を偽 (False) に設定し、Exit Do ステートメントを使ってループから抜けます。外側のループは、フラグの値を調べてループから抜けます。

Dim Check, Counter

Check = True: Counter = 0	' 変数を初期化します。

Do	' 外側のループ。

Do While Counter < 20	' 内側のループ。

Counter = Counter + 1	' カウンタを増やします。

If Counter = 10 Then	' 条件が True であれば

Check = False	' フラグの値を False に設定します。

Exit Do	' 内側のループから抜けます。

End If

Loop

Loop Until Check = False	' 外側のループから抜けます。


End ステートメントの使用例

次の例は、ユーザーが不正なパスワードを入力すると、End ステートメントを使ってコードの実行を終了させます。

Sub Form_Load

Dim Password, Pword

PassWord = "Swordfish"	' パスワードを設定します。

Pword = InputBox("ﾊﾟｽﾜｰﾄﾞを入力してください。")

If Pword <> PassWord Then

MsgBox "ﾊﾟｽﾜｰﾄﾞが不正です。"

End

End If

End Sub


Exit ステートメントの使用例

次の例は、Exit ステートメントを使って、For...Next ループ、Do...Loop ループおよび Private Sub プロシージャから抜け出します。

Sub ExitStatementDemo()

Dim I, MyNum

Do	' 無限ループを設定します。

For I = 1 To 1000	' ループを 1,000 回繰り返します。

MyNum = Int(Rnd * 1000)	' 乱数を発生させます。

Select Case MyNum	' 乱数を評価します。

Case 7: Exit For	' MyNum が 7 であれば、For...Next から抜け出します。

Case 29: Exit Do	' MyNum が 29 であれば、Do...Loop から抜けます。

Case 54: Exit Sub	' MyNum が 54 であれば、Private Sub プロシージャから抜け出します。

End Select

Next I

Loop

End Sub


For Each...Next ステートメントの使用例

次の例は、For Each...Next ステートメントを使って、コレクションのすべての要素の Text プロパティを対象に、文字列 "Hello" を検索します。この例では、MyObject は、文字列に関連するオブジェクトで、MyCollection コレクションの要素の 1 つです。MyObject と MyCollection は、説明する目的で一般的な名前を使っています。実際にコードを記述するときには、適切な名前に置き換えてください。

Dim Found, MyObject, MyCollection

Found = False	' 変数を初期化します。

For Each MyObject In MyCollection	' コレクションの各要素に対して繰り返します。

If MyObject.Text = "Hello" Then	' Text プロパティが "Hello" であれば、

Found = True	' Found に True を設定します。

Exit For	' For ループから抜け出します。

End If

Next


For...Next ステートメントの使用例

次の例は、0 から 9 までの一連の数字 ("0123456789") の集まりを 10 個格納する文字列を作成します。各数字の集まりの間は、半角スペースで区切られます。外側のループのカウンタは、ループを 1 回実行するごとに 1 ずつ減少します。

Dim Words, Chars, MyString

For Words = 10 To 1 Step -1 	' ループを 10 回繰り返します。

For Chars = 0 To 9	' ループを 10 回繰り返します。

MyString = MyString & Chars	' 文字列に番号を追加します。

Next Chars	' カウンタを増やします。

MyString = MyString & " "	' スペースを追加します。

Next Words


GoSub...Return ステートメントの使用例

次の例は、GoSub ステートメントを使って、Sub プロシージャの中でサブルーチンを呼び出します。サブルーチンの中に記述された Return ステートメントは、Sub プロシージャに制御を戻し、GoSub ステートメントの直後のステートメントから処理を再開します。Exit Sub ステートメントは、制御が再びサブルーチンに渡されるのを防ぎます。

Sub GosubDemo()

Dim Num

' ユーザーに数値を入力させます。

Num = InputBox("2 で除算する正の数を入力してください。")

' ユーザーが正の数値を入力した場合のみ、サブルーチンに分岐します。

If Num > 0 Then GoSub MyRoutine

Debug.Print Num

Exit Sub	' Exit Sub でエラーを防止します。

MyRoutine:

Num = Num/2	' 除算を実行します。

Return	' GoSub ステートメントの直後の

End Sub	' ステートメントに制御を戻します。


GoTo ステートメントの使用例

次の例は、GoTo ステートメントを使って、プロシージャ内の行ラベルに分岐します。

Sub GotoStatementDemo()

Dim Number, MyString

Number = 1 	' 変数を初期化します。

' Number を評価し、適切なラベルに分岐します。

If Number = 1 Then GoTo Line1 Else GoTo Line2

Line1:

MyString = "Number は 1 です。"

GoTo LastLine	' LastLine に分岐します。

Line2:

' 次のステートメントが実行されることはありません。

MyString = "Number は 2 です。"

LastLine:

Debug.Print MyString	' イミディエイト ウィンドウに "Number は 1 です。" を表示します。

End Sub


If...Then...Else ステートメントの使用例

次の例は、If...Then...Else ステートメントのブロック形式と 1 行形式の使い方をそれぞれ示します。さらに、If TypeOf...Then...Else の使い方も示します。

Dim Number, Digits, MyString

Number = 53	' 変数を初期化します。

If Number < 10 Then

Digits = 1

ElseIf Number < 100 Then

' 条件が True と評価され、次のステートメントが実行されます。

Digits = 2

Else

Digits = 3

End If

' 1 行形式の構文を使って値を代入します。

If Digits = 1 Then MyString = "One" Else MyString = "More than one"

次の例では、If TypeOf ステートメントを使って、プロシージャに渡された Control がテキスト ボックス コントロールであるかどうかを調べています。

Sub ControlProcessor(MyControl As Control)

If TypeOf MyControl Is CommandButton Then

Debug.Print TypeName(MyControl) & " コントロールです。"

ElseIf TypeOf MyControl Is CheckBox Then

Debug.Print TypeName(MyControl) & " コントロールです。"

ElseIf TypeOf MyControl Is TextBox Then

Debug.Print TypeName(MyControl) & " コントロールです。"

End If

End Sub


IIf 関数の使用例

次の例は、IIf 関数を使って、Function プロシージャ 名 CheckIt の引数 TestMe を評価します。引数 TestMe の値が 1,000 よりも大きい場合は、"Large" という文字列を返し、1,000 以下の場合は "Small" という文字列を返します。

Function CheckIt (TestMe As Integer)

CheckIt = IIf(TestMe > 1000, "Large", "Small")

End Function


On...GoSub ステートメント、On...GoTo ステートメントの使用例

次の例は、On...GoSub ステートメントを使ってサブルーチンに分岐し、On...GoTo ステートメントを使って行ラベルに分岐します。

Sub OnGosubGotoDemo()

Dim Number, MyString

Number = 2	' 変数を初期化します。

' Sub2 へ分岐します。

On Number GoSub Sub1, Sub2	' On...GoSub の次から実行を再開します。

On Number GoTo Line1, Line2	' Line2 へ分岐します。

' On...GoTo の次からは実行を再開しません。

Exit Sub

Sub1:

MyString = "Sub1 に分岐" : Return

Sub2:

MyString = "Sub2 に分岐" : Return

Line1:

MyString = "Line1 に分岐"

Line2:

MyString = "Line2 に分岐"

End Sub


Partition 関数の使用例

次の例では、運送費 (Freight) フィールド を含む、注文 (Orders) テーブルがあるものと仮定します。運送費を分類し、それに対応する注文件数を数える選択プロシージャを作成できます。ここでは、Partition 関数と SQL の Count 関数を使って、運搬費を分類しています。まず、Partition 関数で各範囲を設定し、その後 SQL の Count 関数で各範囲内の注文件数を数えます。この例では、Partition 関数の引数 start を 0、stop を 500、interval を 50 に設定します。したがって、最初の範囲は 0:49 で、上限 500 までの範囲が設定されます。

SELECT DISTINCTROW Partition([freight],0, 500, 50) AS Range,

Count(Orders.Freight) AS Count

FROM Orders

GROUP BY Partition([freight],0,500,50);


Select Case ステートメントの使用例

次の例は、Select Case ステートメントを使って、変数の値を評価します。この例では、変数の値は必ず 2 番目の Case 節と一致します。したがって、2 番目の Case 節に記述されたステートメントだけが実行されます。

Dim Number

Number = 8	' 変数を初期化します。

Select Case Number	' Number を評価します。

Case 1 To 5	' Number の値が 1 ～ 5 の場合。

Debug.Print "1 から 5 の間"

' この例では、Number に 8 を代入しているため、True と評価されるのは次の Case 節だけです。

Case 6, 7, 8	' Number の値が 6 ～ 8 の場合。

Debug.Print "6 から 8 の間"

Case 9 To 10 And Number < 11	' Number の値が 9 または 10 の場合。

Debug.Print "9 または 10"

Case Else	' その他の値の場合。

Debug.Print "1 から 10 以外の数値"

End Select


Shell 関数の使用例

次の例は、Shell 関数を使って、ユーザーが指定したアプリケーションを実行します。Macintosh でファイル名が変わってしまったアプリケーションを実行するには、MacID 関数を使用すると確実です。Macintosh では、既定のドライブ名は "HD:" です。パス名は、円記号 (\) ではなくコロン (:) で区切ります。また、Windows フォルダの代わりに Macintosh フォルダを指定します。

' Microsoft Windows では、2 番目の引数に 1 を指定すると、

' アプリケーションが通常のサイズで開かれ、そのアプリケーションに

' フォーカスが移ります。

Dim RetVal

RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)	' 電卓を実行します。

' Macintosh では、次のいずれのステートメントでも、Microsoft Excel を実行します。

RetVal = Shell("Microsoft Excel")	' ファイル名を指定します。

RetVal = Shell(MacID("XCEL"))	' シグネチャを指定します。


Stop ステートメントの使用例

次の例は、Stop ステートメントを使って、For...Next ループを繰り返すごとに中断します。

Dim I

For I = 1 To 10	' For...Next ループを開始します。

Debug.Print I	' カウンタ変数 I をデバッグ ウィンドウに表示します。

Stop	' ループを繰り返すごとに中断します。

Next I


Switch 関数の使用例

次の例は、Switch 関数を使って、指定された都市で使用されている言語を返します。

Function MatchUp (CityName As String)

Matchup = Switch(CityName = "ロンドン", "英語", CityName _

= "ローマ", "イタリア語", CityName = "パリ", "フランス語")

End Function


While...Wend ステートメントの使用例

次の例は、While...Wend ステートメントを使って、カウンタ変数 (Counter) の値を増加させます。ループ内に記述されたステートメントは、条件の評価が真 (True) の間、実行されます。

Dim Counter

Counter = 0	' 変数を初期化します。

While Counter < 20	' Counter の値を評価します。

Counter = Counter + 1	' Counter の値を増やします。

Wend	' Counter > 19 であれば、While ループを終了します。

Debug.Print Counter	' デバッグ ウィンドウに 20 を表示します。


With ステートメントの使用例

次の例は、With ステートメントを使って、単一のオブジェクトに対する一連のステートメントを実行します。MyObject とそのプロパティ名は、説明する目的で一般的な名前を使っています。実際にコードを記述するときには、適切な名前に置き換えてください。

With MyObject

.Height = 100	' MyObject.Height = 100 と同じです。

.Caption = "Hello World"	' MyObject.Caption = "Hello World" と同じです。

With .Font

.Color = Red	' MyObject.Font.Color = Red と同じです。

.Bold = True	' MyObject.Font.Bold = True と同じです。

End With

End With


Call ステートメント

Sub プロシージャ、Function プロシージャ、ダイナミック リンク ライブラリ (DLL) プロシージャに制御を渡すフロー制御ステートメントです。

構文

[Call] name [argumentlist]

Call ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Call	省略可能なキーワードです。指定するときは、次に示すように引数リスト (引数 argumentlist) をかっこで囲む必要があります。
	Call MyProc(0)
name	必ず指定します。呼び出すプロシージャの名前を指定します。
argumentlist
解説

プロシージャを呼び出すとき、キーワード Call は省略できます。キーワード Call を使って、引数が必要なプロシージャを呼び出す場合は、引数リスト (引数 argumentlist) をかっこで囲む必要があります。キーワード Call を省略するときは、引数リストを囲むかっこも省略しなければなりません。Call 構文で組み込み関数またはユーザー定義型関数を呼び出す場合、その関数の戻り値を取得することはできません。

配列全体を引数として渡す場合は、配列名の後ろに空のかっこを付けてください。


Choose 関数

引数のリストから値を選択して返します。

構文

Choose(index, choice-1[, choice-2, ... [, choice-n]])

Choose 関数の構文は、次の指定項目から構成されます。

指定項目	内容
index	必ず指定します。1 から利用可能な選択肢の数までの範囲内の値を返す数式またはフィールドを指定します。
choice	必ず指定します。選択肢のいずれかを格納するバリアント型 (Variant) の式を指定します。
解説

Choose 関数は、引数 index の値に基づいて選択肢のリストから値を返します。引数 index が 1 の場合は、Choose 関数はリストに含まれる最初の選択肢を返し、引数 index が 2 の場合は、2 番目の選択肢を返します。以下同様に続きます。

Choose 関数を使うと、選択可能な値のリストから特定の値を検索することができます。たとえば、choice-1 = "one"、choice-2 = "two"、choice-3 = "three" である場合に引数 index に指定した式が 3 を返すと、Choose 関数は "three" を返します。この機能は、引数 index がオプション グループの値を表す場合に特に便利です。

Choose 関数では、選択肢が 1 つだけ返されますが、評価はリストに含まれるすべての選択肢に対して行われます。このため、Choose 関数を使うと、予期しない結果が起きることがあります。たとえば、すべての選択肢において MsgBox 関数が式の一部として使用されていれば、Choose 関数が単独の値を返す場合でも、各選択肢が評価されるたびにメッセージ ボックスが表示されます。

引数 index が 1 未満の場合や、リストに含まれる選択肢の数を超える場合は、Choose 関数の戻り値は Null 値 になります。

引数 index が整数でない場合は、最も近い整数に丸められてから評価されます。


DoEvents 関数

発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。

構文

DoEvents( )

解説

Visual Basic Learning Edition など、単体で実行される Visual Basic では、DoEvents 関数は開かれているフォームの数を示す整数型 (Integer) の値を返します。他のすべてのアプリケーションでは、DoEvents 関数は 0 を返します。

DoEvents 関数は、オペレーティング システムに制御を渡します。オペレーティング システムがキュー (処理の待ち行列) に入っているイベントの処理を終了し、SendKeys ステートメントのキューに入っているすべてのキー入力が送られるまで制御は戻りません。

DoEvents 関数は、ファイルの検索などで処理が開始された後で、ユーザーがキャンセルできるようにするときに役立ちます。処理の実行が長い場合、処理プログラムで行う方が、タイマーを使ったり、ActiveX コンポーネントにタスクを渡すよりよい方法です。後の場合、アプリケーションから独立させてタスクを続行できます。そしてオペレーティング システムでは、マルチタスクと時間分割を利用します。

注意   イベント プロシージャから一時的な処理が発生するときは、最初に呼び出した処理から制御が戻ってくるまでは、プロシージャがプログラムの別の場所で実行されることがないように注意する必要があります。別の場所で実行された場合、結果は予測できません。また、制御をオペレーティング システムに渡している間、他のアプリケーションが、確認できない方法でプロシージャとやり取りを行う可能性があるときは、DoEvents 関数は使わないでください。


Do...Loop ステートメント

指定した条件が真 (True) である間、または条件が真 (True) になるまで、一連のステートメントを繰り返し実行するフロー制御ステートメントです。

構文

Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]

Loop

または、次の構文を使用できます。

Do
[statements]
[Exit Do]
[statements]

Loop [{While | Until} condition]

Do...Loop ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
condition	省略可能です。真 (True) または偽 (False) を評価する数式、あるいは文字列式を指定します。引数 condition の値が Null 値の場合、引数 condition は偽 (False) であるとみなされます。
statements	引数 condition が真 (True) である間、または引数 condition が真 (True) になるまで繰り返し実行される、任意の行数のステートメントを記述します。
解説

Do...Loop ステートメントから抜け出す別の方法として、Do...Loop ステートメント内に任意の数の Exit Do ステートメントを指定することができます。通常、Exit Do ステートメントはいくつかの条件を評価した後で使用します。たとえば、If...Then ステートメントを評価した後で Exit Do ステートメントを実行して、制御をキーワード Loop の次のステートメントに直ちに移します。

Do...Loop ステートメントはネスト (入れ子) 構造にすることができます。つまり、Do...Loop ステートメントの内部に別の Do...Loop ステートメントを入れることができます。ネスト (入れ子) 構造にしたときに Exit Do が実行されると、その Exit Do を囲んでいる 1 番内側のループから抜け出します。


End ステートメント

プロシージャやブロック (一連のステートメントの集まり) を終了させるフロー制御ステートメントです。

構文

End

End Function

End If

End Property

End Select

End Sub

End Type

End With

各 End ステートメントは次のとおりです。

ステートメント	内容
End	プログラムの実行を終了させます。この場合、End ステートメントは必ずしも必要ではありませんが、プロシージャ内の任意の場所に指定できます。コードの実行を終了させたり、Open ステートメントで開いたファイルを閉ることができます。また、変数の値をクリアすることもできます。
End Function	Function ステートメントを終了させます。
End If	ブロック形式の If...Then...Else ステートメントを終了させます。
End Property	Property Let、Property Get、または Property Set プロシージャを終了させます。
End Select	Select Case ステートメントを終了させます。
End Sub	Sub ステートメントを終了させます。
End Type	ユーザー定義型 の定義 (Type ステートメント) を終了させます。
End With	With ステートメントを終了させます。
解説

End ステートメントを実行すると、すべてのモジュール内のすべてのモジュール レベル変数および静的変数が初期化されます。デバッグを行うときなど、これらの変数の値を保持する必要がある場合は、End ステートメントの代わりに Stop ステートメントを使用してください。変数の値を保持したまま、実行を再開できます。

メモ   End ステートメントは、Unload、QueryUnload、および Terminate イベントまたはその他の Visual Basic コードが起動しなくても、即時にコードの実行を停止します。フォームおよびクラス モジュールの Unload、QueryUnload、および Terminate イベントに記述されたコードは実行されません。クラス モジュールで作成されたオブジェクトは破壊され、Open ステートメントを使って開かれたファイルは閉じられ、プログラムで使われていたメモリは解放されます。他のプログラムが保持しているオブジェクトへの参照は、無効になります。

End ステートメントは、プログラムを強制的に停止させる手段を提供しています。Visual Basic プログラムの通常の終了の場合は、すべてのフォームをアンロードしなければなりません。パブリックなクラス モジュールで作成されたオブジェクトへの参照を保持しているプログラムおよび実行中のコードがなくなると、すぐにプログラムは終了します。


Exit ステートメント

Do...Loop ループ、For...Next ループ、Function、Sub、または Property の各プロシージャを抜けるフロー制御ステートメントです。

構文

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

各 Exit ステートメントは次のとおりです。

ステートメント	内容
Exit Do	Do...Loop ループを抜け、Loop ステートメントの次のステートメントに制御を移します。Do...Loop ステートメントの中でだけ使用できます。Do...Loop ステートメントがネスト (入れ子) 構造になっているときは、Exit Do のあるループの 1 つ外側のループに制御を移します。
Exit For	For Each...Next ループまたは For...Next ループを抜け、Next ステートメントの次のステートメントに制御を移します。For Each...Next ループまたは For...Next ループの中でだけ使用できます。For Each...Next ループまたは For...Next ループがネスト (入れ子) 構造になっているときは、Exit For のあるループの 1 つ外側のループに制御を移します。
Exit Function	このステートメントのある Function プロシージャを直ちに抜けます。制御は Function プロシージャを呼び出したステートメントの次のステートメントに移ります。
Exit Property	このステートメントのある Property プロシージャを直ちに抜けます。制御は Property プロシージャを呼び出したステートメントの次のステートメントに移ります。
Exit Sub	このステートメントのある Sub プロシージャを直ちに抜けます。制御は Sub プロシージャを呼び出したステートメントの次のステートメントに移ります。
解説

Exit ステートメントと End ステートメントの違いに気を付けてください。Exit ステートメントは構造の終わりを定義するものではありません。


For Each...Next ステートメント

配列やコレクションの各要素に対して、一連のステートメントを繰り返し実行するフロー制御ステートメントです。

構文

For Each element In group
[statements]
[Exit For]
[statements]

Next [element]

For Each...Next ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
element	必ず指定します。コレクションや配列の各要素を繰り返す変数を指定します。コレクションの場合、引数 element にはバリアント型 (Variant) 変数、総称オブジェクト型変数、または任意の固有オブジェクト型のオブジェクトの変数を指定できます。また、配列の場合は、引数 element にはバリアント型のみ指定できます。
group	必ず指定します。オブジェクト コレクション名または配列名 (ユーザー定義型の配列を除く) を指定します。
statements	省略可能です。引数 group の各メンバに対して実行するステートメントを指定します。
解説

引数 group に要素が 1 つでもある場合、For Each ブロックは始まります。ループがいったん開始されると、引数 group の最初の要素に対して、ループ内のすべてのステートメントは実行されます。引数 group の中に要素がある限り、ループ内のステートメントは、各要素に対して実行を続けます。引数 group の中にもう要素がなくなったとき、ループは終了し、Next ステートメントの次のステートメントに実行が移ります。

ループから抜け出す別の方法として、ループ内に任意の数の Exit For ステートメントを指定することができます。通常、Exit For ステートメントはいくつかの条件を評価した後で使用します。たとえば、If...Then ステートメントを評価した後で、制御をキーワード Next の次のステートメントに直ちに移します。

For Each...Next ループはネスト (入れ子) 構造にすることができます。つまり、For Each...Next ループの内部に別の For Each...Next ループを入れることができます。ループをネスト (入れ子) 構造にするときは、それぞれの引数 element に別の変数名を指定してください。

メモ   Next ステートメントの引数 element を省略すると、引数 element が指定されているかのように実行を継続します。Next ステートメントが対応する For ステートメントよりも前にあると、エラーが発生します。

For... Each ステートメントをユーザー定義型の配列に使用することはできません。バリアント型は、ユーザー定義型の配列を持つことができないためです。


For...Next ステートメント

指定した回数だけ、一連のステートメントを繰り返すフロー制御ステートメントです。

構文

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]

Next [counter]

For...Next ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
counter	必ず指定します。カウンタに使う数値変数を指定します。配列変数およびブール型 (Boolean) に含まれる変数は指定できません。
start	必ず指定します。引数 counter の初期値を指定します。
end	必ず指定します。引数 counter の最終値を指定します。
step	省略可能です。ループを繰り返すごとに引数 counter に加算される値を指定します。引数 step を省略すると、ループを繰り返すごとに引数 counter には 1 が加算されます。
statements	省略可能です。ループ内で実行される一連のステートメントで、For と Next の間に記述します。ここに記述したステートメントは、For...Next ステートメントで指定した回数だけ実行されます。
解説

引数 step には正の数または負の数を指定できます。引数 step で指定した値によりループの実行は次のように制御されます。

値	実行条件
正の数または 0	counter <= end
負の数	counter >= end
ループ内の一連のステートメントがすべて実行されると、引数 step の値が引数 counter に加算されます。この時点で、終了条件が満たされていない場合にはループ内のステートメントが再び実行され、それ以外は、ループから抜け出して Next ステートメントの次のステートメントに制御が移ります。

ヒント   ループ内で引数 counter の値を変えると、プログラムの内容の理解やデバッグが困難になりますので注意してください。

ループから抜け出す別の方法として、ループ内に任意の数の Exit For ステートメントを指定することができます。通常、Exit For ステートメントはいくつかの条件を評価した後で使用します。たとえば、If...Then ステートメントを評価した後で、制御をキーワード Next の次のステートメントに直ちに移します。

For...Next ループはネスト (入れ子) 構造にすることができます。つまり、For...Next ループの内部に別の For...Next ループを入れることができます。ループをネスト (入れ子) させるときは、それぞれの引数 counter に別の変数名を指定してください。正しいステートメントの例を次に示します。

For I = 1 To 10

For J = 1 To 10

For K = 1 To 10

...

Next K

Next J

Next I

メモ   Next ステートメントの引数 counter を省略すると、引数 counter が指定されているかのように実行を継続します。Next ステートメントが対応する For ステートメントよりも前にあると、エラーが発生します。


GoSub...Return ステートメント

プロシージャ内のサブルーチンへの分岐と復帰を行うフロー制御ステートメントです。

構文

GoSub line
...
line
...

Return

引数 line には、任意の行ラベルまたは行番号を指定します。

解説

GoSub ステートメント と Return ステートメントはプロシージャの任意の位置に指定することができますが、GoSub ステートメントとそれに対応する Return ステートメントは同じプロシージャ内になければなりません。1 つのサブルーチン内に複数の Return ステートメントを記述してもかまいません。ただし、プログラムの流れは最初の Return ステートメントによって最後に実行された GoSub ステートメントの直後のステートメントに戻ります。

メモ   GoSub...Return ステートメントを使用して Sub プロシージャに入ったり、Sub プロシージャから抜け出すことはできません。GoSub ステートメントは、サブルーチンに制御を移すために使用するステートメントであり、Sub ステートメントで定義される Sub プロシージャを呼び出すものでないことに注意してください。

ヒント   GoSub...Return ステートメントを使うよりも、独立した 1 つのプロシージャ (Sub プロシージャまたはFunction プロシージャ) を作成して呼び出す方が、より構造化された方法といえます。


GoTo ステートメント

プロシージャ内の指定した行に無条件に分岐するフロー制御ステートメントです。

構文

GoTo line

引数 line は必ず指定します。引数 line には、任意の行ラベルまたは行番号を指定します。

解説

GoTo ステートメントの分岐先は、同じプロシージャ内だけです。他のプロシージャには分岐できません。

メモ   GoTo ステートメントを多用するとプログラムは読みにくくなり、デバッグが困難になります。できる限り構造化された制御ステートメント (Do...Loop、For...Next、If...Then...Else、または Select Case) を使ってください。


If...Then...Else ステートメント

式の値に基づいて、条件付きの実行を行うフロー制御ステートメントです。

構文

If condition Then [statements][Else elsestatements]

または、次に示すブロック形式の構文を使用することもできます。

If condition Then
[statements]

[ElseIf condition-n Then
[elseifstatements] ...

[Else
[elsestatements]]

End If

If...Then...Else ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
condition	必ず指定します。次の 2 種類の式のいずれかを指定します。
	真 (True) か偽 (False) を評価する数式または文字列式を指定します。引数 condition の値が Null 値 の場合、引数 condition は偽 (False) であるとみなされます。
	TypeOf objectname Is objecttype 形式の式を指定します。引数 objectname は任意のオブジェクトの参照であり、引数 objecttype は任意の有効なオブジェクト型です。この式は、引数 objectname が引数 objecttype で指定されたオブジェクト型 (Object)であれば真 (True) を返し、それ以外のときには偽 (False) を返します。
statements	ブロック形式の場合は省略可能です。Else 節を含まない単一行形式の場合は、必ず指定します。引数 condition が真 (True) のとき、実行されます。コロン (:) で区切られた一連のステートメントを指定します。
condition-n	省略可能です。引数 condition に同じ。
elseifstatements	省略可能です。引数 condition-n が真 (True) のときに実行される一連のステートメントを指定します。
elsestatements	省略可能です。Else 以前に定義されている条件 (引数 condition または引数 condition-n) がどれも真 (True) でないときに実行される一連のステートメントを指定します。
解説

単一行形式の If...Then...Else ステートメント (第 1 の構文) は、短く簡単な条件判断を行うときに使用します。ブロック形式の If...Then...Else ステートメント (第 2 の構文) は、単一行形式の構文に比べ、より構造化された柔軟な記述ができます。また、コードの読みやすさや保守性が向上し、デバッグも行いやすくなります。

メモ   単一行形式の If...Then...Else ステートメントを使用すると、If...Then ステートメントの判断結果として、複数のステートメントを実行することができます。同じ行にすべてのステートメントをコロン (:) で区切って指定します。次にこのステートメントの例を示します。

If A > 10 Then A = A + 1 : B = B + A : C = C + B

ブロック形式の If...Then...Else ステートメントでは、If ステートメントを行の先頭のステートメントとして指定する必要があります。ステートメント内の Else 節、ElseIf 節、および End If 節には、これら前に行番号または行ラベルのみ指定できます。ブロック形式の If ステートメントは、End If ステートメントで終了させる必要があります。

ブロック形式の If ステートメントかどうかを判断する場合、キーワード Then の後に何が続くかが調べられます。キーワード Then と同じ行の後ろの部分にコメント以外のものがあると、ステートメントは単一行形式の If ステートメントとして扱われます。

Else 節と ElseIf 節はどちらも必要に応じて定義します。また、ブロック形式の If ステートメントでは、ElseIf 節はいくつ指定してもかまいません。ただし、Else 節の後ろには ElseIf 節を指定することはできません。また、ブロック形式の If ステートメントはネスト (入れ子) 構造にすることができます。

ブロック形式の If ステートメント (第 2 の構文) を実行すると、引数 condition がテストされます。引数 condition が 真 (True) の場合、Then の次のステートメントが実行されます。引数 condition が偽 (False) の場合、ElseIf 節に条件が指定されているときは、この条件が代わりに評価されます。真 (True) に評価される条件が見つかると、その条件に関連付けられている Then の次のステートメントが実行されます。どの ElseIf 節の条件も真 (True) でない場合、または ElseIf 節がない場合は、Else の次のステートメントが実行されます。Then または Else の次のステートメントを実行した後、End If の次のステートメントが続いて実行されます。

ヒント   1 つの条件式の値によって、複数の処理のいずれかを実行させるには、Select Case ステートメントの方が適しています。ただし、TypeOf objectname Is objecttype 節を Select Case ステートメントと共に使用することはできません。

メモ   TypeOf には、長整数型、整数型などのオブジェクト型以外の引数は使用できません。


IIf 関数

式の評価結果によって、2 つの引数のうち 1 つを返します。

構文

IIf(expr, truepart, falsepart)

IIf 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
expr	必ず指定します。評価対象の式を指定します。
truepart	必ず指定します。名前付き引数 expr が真 (True) の場合に返す値または式を指定します。
falsepart	必ず指定します。名前付き引数 expr が偽 (False) の場合に返す値または式を指定します。
解説

IIf 関数では、名前付き引数 truepart または名前付き引数 falsepart のいずれか一方だけが返されますが、評価は両方の引数に対して行われます。このため、IIf 関数を使うと、予期しない結果が起きることがあります。たとえば、名前付き引数 falsepart を評価した結果 0 による除算エラーが発生する場合は、名前付き引数 expr が真 (True) であってもエラーが発生します。


On...GoSub、On...GoTo ステートメント

式の値に応じて、指定した複数の行のうちのいずれかに分岐させるフロー制御ステートメントです。

構文

On expression GoSub destinationlist

On expression GoTo destinationlist

On...GoSub ステートメントおよび On...GoTo ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
expression	必ず指定します。0 ～ 255 の範囲の値に評価される任意の数式を指定します。式は、On...GoSub ステートメントや On...GoTo ステートメントが評価される前に整数値に丸められます。引数 expression の値により、引数 destinationlist 中のどの行に分岐するかが決まります。
destinationlist	必ず指定します。カンマ (,) で区切った分岐先を示す行番号または行ラベルのリストを指定します。
解説

引数 expression の値は、引数 destinationlist のどの行に分岐させるかを決めます。引数 expression の値が 1 未満か、引数 destinationlist で指定された項目数以上のときは、次のように処理されます。

expression の値	結果
0	プログラムの制御が On...GoSub ステートメントまたは On...GoTo ステートメントの次のステートメントに移ります。
destinationlist の項目数以上	プログラムの制御が On...GoSub ステートメントまたは On...GoTo ステートメントの次のステートメントに移ります。
負の数	エラーが発生します。
256 以上	エラーが発生します。
行番号と行ラベルを同じ引数 destinationlist に混在させることができます。On...GoSub... ステートメントおよび On...GoTo ステートメントには、任意の数の行ラベルと行番号を指定できます。ただし 1 行に含めることができない数の行番号または行ラベルを指定する場合は、行継続文字を使って物理的な次の行を論理的な継続行として指定しなくてはなりません。

ヒント   条件によって複数の分岐を行うときは、Select Case ステートメントを使うと、より構造化された柔軟なプログラムを作成できます。


Partition 関数

ある数値が、区切られた複数の範囲のうち、どの範囲に含まれるかを示すバリアント型 (内部処理形式 String の Variant) の文字列を返します。

構文

Partition(number, start, stop, interval)

Partition 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
number	必ず指定します。範囲に対して評価する整数を指定します。
start	必ず指定します。対象となる範囲全体の先頭となる整数を指定します。0 未満の整数を指定することはできません。
stop	必ず指定します。対象となる範囲全体の末尾となる整数を指定します。名前付き引数 stop には、名前付き引数 start に指定した整数よりも大きい整数を指定しなければなりません。
解説

Partition 関数は、名前付き引数 number に指定した整数が属する特定の範囲を算出し、その範囲を示すバリアント型 (内部処理形式 Stringの Variant) の文字列を返します。Partition 関数は、クエリーの作成に特に役立ちます。たとえば、受注番号の各範囲 (1 ～ 1,000、1,001 ～ 2,000 など) に含まれる注文の数を示す選択クエリーを作成することが可能です。

次の表では、名前付き引数 start、stop、および interval の値の組み合わせを 3 とおり示し、その結果得られる範囲を示しています。「最初の範囲」の列と「最後の範囲」の列は、Partition 関数が返す文字列を示しています。範囲を示す文字列は、範囲内の最小値と最大値をコロンで区切って、最大値 : 最小値の形式で返されます。

start	stop	interval	最初の範囲の直前	最初の範囲	最後の範囲	最後の範囲の直後
0	99	5	"   :-1"	"      0:  4"	"     95: 99"	"   100:   "
20	199	10	"   :  19"	"    20:  29"	"   190: 199"	"   200:   "
100	1010	20	"   :   99"	"  100:  119"	" 1000: 1010"	" 1011:   "
この表の 3 行目には、名前付き引数 start と名前付き引数 stop で定義される数列が名前付き引数 interval の値で等分できない場合の結果が示されています。名前付き引数 interval の値は 20 ですが、最後の範囲は名前付き引数 stop に指定された整数値で終わっているため、その長さは 11 になっています。

Partition 関数は、コロンの両側に名前付き引数 stop で指定した整数の桁数に 1 を加えた文字数を設定し、先頭に十分なスペースを持った範囲を返します。こうすることによって、何回か他の数値を指定して Partition 関数を実行しても、同じ文字数の文字列が返されるので、その後の並べ替え処理で適切に文字列を処理することができます。

名前付き引数 interval に 1 を指定すると、名前付き引数 start および名前付き引数 stop の値に関係なく、範囲は number:number として返されます。たとえば、名前付き引数 number に 100 を指定し、名前付き引数 stop に 1,000 を指定した場合に、名前付き引数 interval に 1 を指定すると、"  100:  100" という範囲が返されます。

引数のいずれかに Null 値を指定すると、Null 値が返されます。


Select Case ステートメント

条件式の値に従って、複数のステートメント ブロックのいずれかを実行させるフロー制御ステートメントです。

構文

Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]

End Select

Select Case ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
testexpression	必ず指定します。任意の数式または文字列式を指定します。
expressionlist-n	Case 節がある場合は、必ず指定します。次の形式で指定します。また、複数指定するときは、カンマ (,) で区切ります。 expression expression To expression Is comparisonoperator expression 引数 expression には数式または文字列を、引数 comparisonoperator には比較演算子を指定します。キーワード To は、値の範囲を指定するキーワードです。キーワード To を使って値の範囲を指定するときは、小さい方の値を先 (左側) に指定してください。キーワード Is は、値の範囲を指定するキーワードで、Is 演算子と Like 演算子以外の比較演算子と共に使われます。キーワード Is は指定しなくても自動的に設定されます。
statements-n	省略可能です。引数 testexpression が引数 expressionlist-n のいずれかと一致するとき、一致した引数 statements-n のステートメントが実行されます。
elsestatements	省略可能です。引数 testexpression が Case 節のいずれとも一致しないとき、引数 elsestatements のステートメントが実行されます。
解説

引数 testexpression が Case 節の引数 expressionlist のいずれかの式に一致すると、Case 節の次のステートメントがその次の Case 節まで実行されます。Case 節が最後の節の場合は、End Select まで実行されます。ブロックの実行が終わると、制御は End Select の次のステートメントに移ります。引数 testexpression が複数の Case 節に一致するときは、最初に一致した Case 節に続くステートメントだけが実行されます。

Case Else 節を使用して引数 testexpression がどの Case 節の引数 expressionlist にも一致しなかったときに実行する引数 elsestatements を指定します。Case Else ステートメントは必ずしも必要ではありませんが、予測できない引数 testexpression の値を処理するために、Select Case ブロックに Case Else ステートメントを記述することをお勧めします。どの Case 節の引数 expressionlist も引数 testexpression と一致しない場合に Case Else ステートメントが存在しないと、End Select の次のステートメントまで実行が継続します。

Case 節には複数の式や範囲を指定できます。たとえば、次の行は有効なステートメントです。

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

メモ   比較演算子 Is と Select Case ステートメントで使われるキーワード Is は、同じものではありません。

また、文字列の範囲や複数の文字列式を指定することもできます。次に示す Case 節では、"everything" と、アルファベット順に並んだ "nuts" から "soup" の間にある文字列、TestItem の現在の値のいずれかに等しい文字列が一致します。

Case "everything", "nuts" To "soup", TestItem

Select Case ステートメントはネスト (入れ子) 構造にすることができます。このとき、各 Select Case ステートメントには、それぞれ対応する End Select ステートメントが必要です。


Shell 関数

実行可能プログラムを実行し、実行が完了するとプログラムのタスク ID を示すバリアント型 (内部処理形式 Double の Variant) の値を返します。プログラムの実行に問題が発生した場合は、0 を返します。

構文

Shell(pathname[,windowstyle])

Shell 関数は、次の名前付き引数から構成されます。

指定項目	内容
pathname	必ず指定します。バリアント型 (内部処理形式 String の Variant) の値を指定します。実行するプログラム名と必要な引数名またはコマンド ラインのスイッチを指定します。また、フォルダ、またはドライブを含めて指定できます。Macintosh では、MacID 関数を使ってアプリケーションの名前の代わりにシグネチャを指定できます。次の例は、Microsoft Word のシグネチャを使用したものです。 Shell MacID("MSWD")
windowstyle	省略可能です。実行するプログラムのウィンドウの形式に対応するバリアント型 (内部処理形式 Integer の Variant) の値を指定します。引数 windowstyle を省略すると、プログラムはフォーカスを持った状態で最小化され、実行を開始します。Macintosh (System 7.0 以降) では、windowstyle は、アプリケーションの実行中に、そのアプリケーションがフォーカスを取得できるかどうかを指定するだけです。
名前付き引数 windowstyle には、次の値を指定します。

定数	値	内容
vbHide	0	フォーカスを持ち、非表示にされるウィンドウ。定数 vbHide は、Macintosh では使用できません。
vbNormalFocus	1	フォーカスを持ち、元のサイズと位置に復元されるウィンドウ
vbMinimizedFocus	2	フォーカスを持ち、最小化表示されるウィンドウ
vbMaximizedFocus	3	フォーカスを持ち、最大化表示されるウィンドウ
vbNormalNoFocus	4	最後にウィンドウを閉じたときのサイズと位置に復元されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。
vbMinimizedNoFocus	6	最小化表示されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。
解説

指定したプログラムが問題なく実行できると、プログラムのタスク ID が返されます。タスク ID は、実行中のプログラムを識別する重複しない番号です。指定されたプログラムが実行できないと、エラーが発生します。Microsoft Windows 上で、MacID 関数を使用するとエラーが発生します。

Macintosh では、vbNormalFocus、vbMinimizedFocus、vbMaximizedFocus はすべてアプリケーションをフォアグラウンドで実行し、vbHide、vbNoFocus、vbMinimizeFocus はすべてアプリケーションをバックグラウンドで実行します。

メモ   既定の設定では、Shell 関数はプログラムを非同期的に実行します。したがって、Shell 関数を使用して実行を開始したプログラムが終了しなくても、Shell 関数の次のステートメントは実行されます。


Stop ステートメント

実行を中断するフロー制御ステートメントです。

構文

Stop

解説

Stop ステートメントは、プロシージャ内の任意の場所に置くことができます。Stop ステートメントは、プログラム コードのブレークポイントと同じ働きをします。

Stop ステートメントはプログラムの実行を中断しますが、End ステートメントと異なり、コンパイル済みの実行可能ファイル (.EXE) の内部でない限り、ファイルを閉じたり、変数をクリアすることはありません。


Switch 関数

式のリストを評価し、リストの中で真 (True) となる最初の式に関連付けられたバリアント型 (Variant) の値または式を返します。

構文

Switch(expr-1, value-1[, expr-2, value-2 ... [, expr-n,value-n]])

Switch 関数の構文は、次の指定項目から構成されます。

指定項目	内容
expr	必ず指定します。評価対象となるバリアント型 (Variant) の式を指定します。
value	必ず指定します。対応する式が真 (True) のときに返す値または式を指定します。
解説

Switch 関数の引数リストでは、式と値を対にして指定します。式は左から右の順序で評価され、最初に真 (True) に評価された値が返されます。式と値が正しく対になっていなければ、実行時エラーが発生します。たとえば、引数 expr-1 が真 (True) の場合、引数 value-1 が返されます。引数 expr-1 が偽 (False) で、引数 expr-2 が真 (True) の場合には、引数 value-2 が返されます。

以下の場合は、Null 値が返されます。

・ いずれの式も真 (True) と評価されない場合。

・ 真 (True) と評価された最初の式に Null 値が関連付けられている場合。

Switch 関数では、リスト内の式のいずれか 1 つだけが返されますが、評価はリスト内のすべての式に対して行われます。このため、Switch 関数を使うと、予期しない結果が起きることがあります。たとえば、評価すると 0 による除算エラーが発生する式が 1 つでも含まれていれば、エラーになります。


While...Wend ステートメント

指定した条件が真 (True) である間、一連のステートメントの実行を繰り返すフロー制御ステートメントです。

構文

While condition
[statements]

Wend

While...Wend ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
condition	必ず指定します。真 (True) または偽 (False) を評価する数式あるいは文字列式を指定します。引数 condition の値が Null 値 の場合、引数 condition は偽 (False) であるとみなされます。
statements	省略可能です。引数 condition が真 (True) の間に実行する 1 つまたは複数のステートメントを指定します。
解説

引数 condition が真 (True) の場合、Wend ステートメントまでのすべての引数 statements が実行されます。実行が Wend ステートメントに達すると、制御は再び While ステートメントに戻り、引数 condition が調べられます。引数 condition が真 (True) の場合は、このプロセスが繰り返されます。偽 (False) の場合は、Wend ステートメントの次のステートメントに制御が移ります。

While...Wend ループは任意のレベルでネスト (入れ子) 構造にすることができます。Wend ステートメントは最後に実行された While ステートメントに対応します。

ヒント   Do...Loop ステートメントを使うと、より構造化された柔軟なループを記述することができます。


With ステートメント

オブジェクトやユーザー定義型に対して、一連のステートメントを実行するフロー制御ステートメントです。

構文

With object
[statements]

End With

With ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
object	必ず指定します。オブジェクト名またはユーザー定義型名を指定します。
statements	省略可能です。引数 object に対して、実行するステートメントを指定します。複数のステートメントを記述できます。
解説

With ステートメントは、指定したオブジェクトに対してオブジェクト名を再定義することなく、一連のステートメントを実行することができます。たとえば、単一のオブジェクトに対して複数の異なるプロパティを変更する場合、With 制御構造内にプロパティを割り当てるステートメントを指定します。With ステートメントを使用する場合、オブジェクトへの参照はプロパティを割り当てるたびに指定するのではなく、一度だけ指定します。次の例では、With ステートメントを使って、1 つのオブジェクトに複数のプロパティを設定しています。

With MyLabel

.Height = 2000

.Width = 2000

.Caption = "これは MyLabel です"

End With

メモ   1 つの With ブロックで指定できる引数 object は、1 つだけです。したがって、単一の With ステートメントを使って、複数のオブジェクトに対する操作を行うことはできません。

With 制御構造の内部に別の With 制御構造を入れて、ネスト (入れ子) 構造にすることができます。ただし、同じオブジェクトに対する処理をネスト構造にすることはできません。ネスト構造にする場合は、それぞれの With ステートメントに異なるオブジェクトを指定する必要があります。

メモ   With ステートメントを呼び出さずに With 制御構造内のステートメントを呼び出したり、End With ステートメントを呼び出さずに With 制御構造外のステートメントを呼び出さないようにしてください。


Asc 関数の使用例

次の例は、Asc 関数を使って、文字列の最初の文字の文字コードを返します。

Dim MyNumber

MyNumber = Asc("A")	' 65 を返します。

MyNumber = Asc("a")	' 97 を返します。

MyNumber = Asc("Apple")	' 65 を返します。


CBool 関数の使用例

次の例は、CBool 関数を使って、式をブール型 (Boolean) に変換します。式が 0 のときは、CBool 関数は、偽 (False) を返します。それ以外は真 (True) を返します。

Dim A, B, Check

A = 5: B = 5	' 変数を定義します。

Check = CBool(A = B)	' Check には、True が入ります。

A = 0	' 変数を定義します。

Check = CBool(A)	' Check には、False が入ります。


CByte 関数の使用例

次の例は、CByte 関数を使って、式をバイト型 (Byte) に変換します。

Dim MyDouble, MyByte

MyDouble = 125.5678	' MyDouble は、倍精度浮動小数点数型です。

MyByte = CByte(MyDouble)	' MyByte には、125 が入ります。


CDate 関数の使用例

次の例は、CDate 関数を使って、文字列を日付型 (Date) に変換します。一般的には、この例のように文字列で日付/時刻を表すことはお勧めできません。文字列の代わりに、日付リテラルや時刻リテラル (#2/12/1969# および #4:45:23 PM# など) を使ってください。

Dim MyDate, MyShortDate, MyTime, MyShortTime

MyDate = "February 12, 1969"	' 日付を定義します。

MyShortDate = CDate(MyDate)	' 日付型に変換します。

MyTime = "4:35:47 PM"	' 時間を定義します。

MyShortTime = CDate(MyTime)	' 日付型に変換します。


CCur 関数の使用例

次の例は、CCur 関数を使って、式を通貨型 (Currency) に変換します。

Dim MyDouble, MyCurr

MyDouble = 543.214588	' MyDouble は、倍精度浮動小数点数型です。

MyCurr = CCur(MyDouble * 2)	' MyDouble * 2 の結果 (1086.429176) を

' 通貨型の値 (1086.4292) に変換します。


CDbl 関数の使用例

次の例は、CDbl 関数を使って、式を倍精度浮動小数点数型 (Double) に変換します。

Dim MyCurr, MyDouble

MyCurr = CCur(234.456784)	' MyCurr は、通貨型です。

MyDouble = CDbl(MyCurr * 8.2 * 0.01)	' 倍精度浮動小数点数型に変換します。


CInt 関数の使用例

次の例は、CInt 関数を使って、値を整数型 (Integer) に変換します。

Dim MyDouble, MyInt

MyDouble = 2345.5678	' MyDouble は、倍精度浮動小数点数型です。

MyInt = CInt(MyDouble)	' MyInt には、2346 が入ります。


CLng 関数の使用例

次の例は、CLng 関数を使って、値を長整数型 (Long) に変換します。

Dim MyVal1, MyVal2, MyLong1, MyLong2

MyVal1 = 25427.45: MyVal2 = 25427.55

' MyVal1、MyVal2 は、倍精度浮動小数点数型です。

MyLong1 = CLng(MyVal1)	' MyLong1 には、25427 が入ります。

MyLong2 = CLng(MyVal2)	' MyLong2 には、25428 が入ります。


CSng 関数の使用例

次の例は、CSng 関数を使って、値を単精度浮動小数点数型 (Single) に変換します。

Dim MyDouble1, MyDouble2, MySingle1, MySingle2

' MyDouble1、MyDouble2 は、倍精度浮動小数点数型です。

MyDouble1 = 75.3421115: MyDouble2 = 75.3421555

MySingle1 = CSng(MyDouble1)	' MySingle1 には、75.34211 が入ります。

MySingle2 = CSng(MyDouble2)	' MySingle2 には、75.34216 が入ります。


CStr 関数の使用例

次の例は、CStr 関数を使って、数値を文字列型 (String) に変換します。

Dim MyDouble, MyString

MyDouble = 437.324	' MyDouble は、倍精度浮動小数点数型です。

MyString = CStr(MyDouble)	' MyString には、"437.324" が入ります。


CVar 関数の使用例

次の例は、CVar 関数を使って、式をバリアント型 (Variant) に変換します。

Dim MyInt, MyVar

MyInt = 4534	' MyInt は、整数型です。

MyVar = CVar(MyInt & "000")	' MyVar には、文字列 "4534000" が入ります。


CVErr 関数の使用例

次の例は、CVErr 関数を使って、バリアント型 (Variant) のエラー値 (VarType 10) を返します。ユーザー定義の Function プロシージャ CalculateDouble は、数値以外の引数を渡されるとエラー値を返します。CVErr 関数は、ユーザー定義のプロシージャからユーザー定義のエラー番号を返すため、あるいは、実行時エラーの処理を延期するために使います。値がエラー値であるかを調べるときは、IsError 関数を使用してください。

' エラーが発生する値 (ここでは、文字列) を引数として指定し、Function プロシージャ CalculateDouble を呼び出します。

Sub Test()

Debug.Print CalculateDouble("345.45robert")

End Sub

' Function プロシージャ CalculateDouble を定義します。

Function CalculateDouble(Number)

If IsNumeric(Number) Then	' 受け取った値が数値であれば、

CalculateDouble = Number * 2	' 結果を返します。

Else	' 数値以外のときは、

CalculateDouble = CVErr(2001)	' ユーザー定義のエラー値を返します。

End If

End Function


Val 関数の使用例

次の例は、Val 関数を使って、文字列に含まれている数値を返します。

Dim MyValue

MyValue = Val("2457")	' 2457 を返します。

MyValue = Val(" 2 45 7")	' 2457 を返します。

MyValue = Val("24 and 57")	' 24 を返します。


CDec 関数の使用例

次の例は、CDec 関数を使って、数値を 10 進型に変換します。

Dim MyDecimal, MyCurr

MyCurr = 10000000.0587	' MyCurr の値は通貨型です。

MyDecimal = CDec(MyCurr) 	' MyDecimal の値は 10 進型になります。


変換関数

Asc 関数

CBool 関数

CByte 関数

CCur 関数

CDate 関数

CDec 関数

CDbl 関数

Chr 関数

CInt 関数

CLng 関数

CSng 関数

CStr 関数

CVar 関数

CVErr 関数

Format 関数

Hex 関数

Oct 関数

Str 関数

Val 関数


Asc 関数

整数型 (Integer) の値を返します。指定した文字列内にある先頭の文字の文字コードを返す変換関数です。

構文

Asc(string)

引数 string には、任意の文字列式を指定します。この引数は必ず指定します。引数 string に文字が含まれていないときは、実行時エラーが発生します。

解説

DBCS を使用していないシステムでは、0 ～ 225 の範囲の値が返されます。DBCS を使用しているシステムでは、-32768 ～ 32767 の範囲の値が返されます。

メモ   文字列に含まれたバイト データを取得するには、AscB 関数を使用します。AscB 関数は、最初の文字の文字コードではなく、最初のバイト データを返します。AscW 関数は、Unicode 文字セットの文字を返します。Unicode をサポートしていないプラットフォームでは、Asc 関数と同じ文字コードを返します。

メモ   Visual Basic for the Macintosh では、Unicode 文字列をサポートしていません。したがって、AscW(n) 関数は、Windows 環境では 128 ～ 65535 の範囲のすべての Unicode 文字を返すことができますが、Macintosh 環境では正確な Unicode 文字を返すことができません。このため、 Macintosh 環境では AscW 関数を使用しないようにしてください。


CVErr 関数

ユーザーが指定した数値 (エラー番号) を、バリアント型 (Variant) の内部処理形式であるエラー値に変換した値を返す変換関数です。

構文

CVErr(errornumber)

引数 errornumber には、任意の数値 (エラー番号) を指定します。この引数は必ず指定します。

解説

CVErr 関数を使用して、作成したプロシージャ内でユーザー定義のエラーを作成できます。たとえば、複数の引数を受け取り、1 つの文字列を返す関数を作成したときに、入力された引数の値が許容範囲内にあるかどうかを評価することができます。引数が許容範囲内にない場合、作成した関数は予期する値を返しません。このような場合、CVErr 関数を使用することにより、どのような動作が行われたのかを知らせるエラー番号を返すことができます。

エラー番号のデータ型を暗黙的に変換することはできません。たとえば、CVErr 関数の戻り値をバリアント型以外の変数に直接代入することはできません。ただし、CVErr 関数の戻り値を明示的に変換 (CInt 関数、CDbl 関数などを使用して変換) することにより、適切なデータ型の変数に代入することができます。


Val 関数

指定した文字列に含まれる数値を適切なデータ型に変換して返します。

構文

Val(string)

引数 string には、任意の文字列式を指定します。この引数は必ず指定します。

解説

文字列中に数字以外の文字が見つかると、Val 関数は読み込みを中止します。円記号 (\) やカンマ (,) など、通常は数値の一部とみなされる記号や文字も、Val 関数は数値として解釈しません。ただし、Val 関数は基数を示すプリフィックス &O (8 進数) や &H (16 進数) は認識します。引数の文字列中に含まれるスペース、タブ、ライン フィードは無視されます。

次のように指定すると、Val 関数は 1615198 という値を返します。

Val("    1615 198th Street N.E.")

次のコードでは、Val 関数は 16 進数の値を 10 進数の -1 にして返します。

Val("&HFFFF")

メモ   Val 関数は、ピリオド (.) だけを有効な小数点の記号として認識します。ピリオドと異なる小数点の記号が使われている可能性があるときは、Val 関数で文字列を数値に変換する代わりに、CDbl 関数を使用してください。


データ型変換関数

各関数は式を特定のデータ型に変換します。

構文

CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CSng(expression)

CVar(expression)

CStr(expression)

引数 expression には任意の文字列式または数式を指定します。この引数は必ず指定します。

戻り値のデータ型

次に示すように関数名によって戻り値のデータ型が異なります。

関数	戻り値のデータ型	引数 expression の範囲
CBool	ブール型 (Boolean)	任意の有効な文字列または数式
CByte	バイト型 (Byte)	0 ～ 255
CCur	通貨型 (Currency)	-922,337,203,685,477.5808 ～ 922,337,203,685,477.5807
CDate	日付型 (Date)	任意の有効な日付式
CDbl	倍精度浮動小数点数型 (Double)	-1.79769313486231E308 ～ -4.94065645841247E-324 (負の値)。 4.94065645841247E-324 ～ 1.79769313486232E308 (正の値)。
CDec	10 進型 (Decimal)	小数点以下が 0 桁 (小数部分を持たない数値) の場合、-79,228,162,514,264,337,593,543,950,335 ～ 79,228,162,514,264,337,593,543,950,335。 小数点以下 28 桁の数値の場合、 -7.9228162514264337593543950335 ～ 7.9228162514264337593543950335。 絶対値の最小値は 0 を除いた場合、0.0000000000000000000000000001 です。
CInt	整数型 (Integer)	-32,768 ～ 32,767。小数部分は丸められます。
CLng	長整数型 (Long)	-2,147,483,648 ～ 2,147,483,647。小数部分は丸められます。
CSng	単精度浮動小数点数型 (Single)	-3.402823E38 ～ -1.401298E-45 (負の値)、および 1.401298E-45 ～ 3.402823E38 (正の値)。
CVar	バリアント型 (Variant)	数値の場合は倍精度浮動小数点数型の範囲と同じ。数値以外の場合は、文字列型の範囲と同じ。
CStr	文字列型 (String)	CStr 関数の戻り値は引数 expression により異なります。
解説

関数に渡された引数 expression の値が変換されるデータ型の範囲を超えている場合、エラーが発生します。

通常、既定のデータ型ではなく、特定のデータ型で処理結果を表す必要がある場合に、データ型変換関数を使用してコードを記述します。たとえば、単精度、倍精度、または整数で計算を行うような場合に、CCur 関数を使用して通貨の演算を強制的に行います。

各国の言語に対応するようにあるデータから別のデータに変換する場合は、Val 関数の代わりにデータ型変換関数を使用します。たとえば CCur 関数を使用すると、異なる小数点記号と 1000 単位の区切り記号、およびさまざまな通貨記号がコンピュータの国別情報の設定に応じて正しく処理されます。

小数部分がちょうど 0.5 のとき、CInt 関数および CLng 関数は常に最も近い偶数に値を丸めます。たとえば、0.5 を 0 に、1.5 を 2 にそれぞれ丸めます。CInt 関数および CLng 関数は、数値の小数部分を切り捨てずに丸めるという点で Fix 関数および Int 関数とは異なります。また、Fix 関数および Int.関数は引き渡された値と同じデータ型で常に値を返します。

IsDate 関数を使用すると、引数 date を日付または時刻に変換できるかどうかを調べることができます。CDate 関数は、日付リテラル、時刻リテラル、および有効な日付の範囲に該当する数値を引数として受け取ります。数値を日付に変更する場合、整数部が日付に変換されます。小数点以下の値は、午前 0 時から始まる時刻に変換されます。

CDate 関数は、国別情報に基づいて日付の形式を認識します。認識できない形式で指定された日付がある場合、年、月、および日の正しい順序を判断できないことがあります。また、曜日を表す文字列を含む長い日付形式も認識できません。

Visual Basic の以前のバージョンとの互換性を保つため、CVDate 関数も用意されています。CVDate 関数の構文は、CDate 関数と同じです。ただし、CVDate 関数は日付型ではなく、内部処理形式が Date のバリアント型の値を返します。現在はデータ型として日付型が用意されているので、CVDate 関数は今後必要なくなります。日付型に式を変換し、バリアント型に割り当てることにより、CVDate 関数と同じ戻り値を得ることができます。他のデータ型をバリアント型の内部処理形式に変換する場合も、同じ方法で変換します。

メモ   CDec 関数は独立したデータ型で値を返しません。常に内部処理形式 Decimal のバリアント型で値を返します。


CStr 関数の戻り値

引数 expression	CStr 関数の戻り値
ブール型 (Boolean)	真 (True) または偽 (False) を表す文字列。
日付型 (Date)	国別情報で設定されている短い日付を表す文字列。
Null 値	実行時エラーが発生します。
Empty 値	長さ 0 の文字列 ("")。
エラー値	"エラー値" という文字列とエラー番号。
その他の数値	数値を表す文字列。


ブール型 (Boolean)

ブール型 (Boolean) の変数は、16 ビット (2 バイト) の変数です。ブール型変数が格納できる値は、真 (True) または偽 (False) だけです。ブール型変数は、Print # ステートメントを呼び出して出力すると、True または False の文字列が表示されます。Write # ステートメントを呼び出して出力すると、#TRUE# または #FALSE# の文字列が表示されます。ブール型変数に真または偽の状態を代入する場合は、キーワード True または False を使用します。

他の数値型をブール型の値に変換すると、0 は偽 (False) になり、0 以外の値はすべて真 (True) になります。一方、ブール型の値を他のデータ型に変換すると、偽 (False) は 0、真 (True) は -1 になります。


バイト型 (Byte)

バイト型 (Byte) の変数は、8 ビット (1 バイト) の変数です。0 ～ 255 の範囲の単精度の正の数値を格納します。

バイト型 (Byte) は、バイナリ データを格納するためのデータ型として使用します。


通貨型 (Currency)

通貨型 (Currency) の変数は、64 ビット (8 バイト) の変数です。整数形式で表され、10,000 倍されて整数として記憶された、15 桁の整数部分と 4 桁の小数部分を持つ固定小数点数です。-922,337,203,685,477.5808 ～ 922,337,203,685,477.5807 の範囲の値をとります。通貨型の型宣言文字は、アット マーク (@) です。

通貨型 (Currency) は、金額に関連する計算に役立つデータ型です。また、固定小数点を含む計算にも役立ちます。


データ型の概要

次の表は、Visual Basic で使用できるデータ型と、それぞれの記憶領域のサイズおよび値の範囲を示します。

データ型	記憶領域のサイズ	範囲
バイト型 (Byte)	1 バイト	0 ～ 255
ブール型 (Boolean)	2 バイト	真 (True) または偽 (False)
整数型 (Integer)	2 バイト	-32,768 ～ 32,767
長整数型 (Long)	4 バイト	-2,147,483,648 ～ 2,147,483,647
単精度浮動小数点数型 (Single)	4 バイト	-3.402823E38 ～ -1.401298E-45 (負の値)。 1.401298E-45 ～ 3.402823E38 (正の値)。
倍精度浮動小数点数型 (Double)	8 バイト	-1.79769313486231E308 ～ -4.94065645841247E-324 (負の値)。 4.94065645841247E-324 ～ 1.79769313486232E308 (正の値)。
通貨型 (Currency)	8 バイト	-922,337,203,685,477.5808 ～ 922,337,203,685,477.5807
10 進型 (Decimal)	14 バイト	小数部分を持たない数値の場合、 -79,228,162,514,264,337,593,543,950,335 ～ 79,228,162,514,264,337,593,543,950,335 の範囲の値をとります。 小数点以下 28 桁の数値の場合、 -7.9228162514264337593543950335 ～ 7.9228162514264337593543950335 の範囲の値をとります。 絶対値の最小値は 0 を除いた場合、 0.0000000000000000000000000001 です。
日付型 (Date)	8 バイト	西暦 100 年 1 月 1 日～西暦 9999 年 12 月 31 日
オブジェクト型 (Object)	4 バイト	オブジェクトを参照するデータ型
文字列型 (String) (可変長)	10 バイト + 文字列の長さ	0 ～ 2GB
文字列型 (固定長)	文字列の長さ	1 ～ 2GB
バリアント型 (Variant) (数値)	16 バイト	倍精度浮動小数点数型の範囲と同じ。
バリアント型 (Variant) (文字列)	22 バイト + 文字列の長さ	可変長の文字列型の範囲と同じ。
ユーザー定義型	要素に依存	それぞれの要素の範囲はそのデータ型の範囲と同じ。
メモ   どのデータ型の配列にも、20 バイトのメモリ、各配列の次元ごとに 4 バイト、およびデータそのものが占めるバイト数を合計したメモリが必要です。データが占めるメモリのバイト数は、要素数に各要素のサイズを掛けて計算することができます。たとえば、それぞれ 2 バイトの 4 つの整数型の要素からなる 1 次元配列のデータは、8 バイトを占めます。データに必要な 8 バイトとオーバーヘッドの 24 バイトの和により、この配列の合計メモリ必要量は 32 バイトになります。

配列を含むバリアント型には、配列のみのときに比べて 12 バイト大きいメモリが必要です。

メモ   文字列型のデータのデータ型を変更するには、StrConv 関数を使用します。


日付型 (Date)

日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。西暦 100 年 1 月 1 日～西暦 9999 年 12 月 31 日の範囲の日付と、0:00:00 ～ 23:59:59 の範囲の時刻を表すことができます。日付型の変数には、日付リテラルとして認識可能な任意の値を代入できます。日付リテラルの形式は、#1993 January 1# または #93 Jan 1 # のようにシャープ記号 (#) で囲む必要があります。

日付型の変数では、日付はコントロール パネルで設定されている短い日付形式に従って表示されます。時刻はコントロール パネルで設定されている時刻の形式 (12 時間制か 24 時間制) に従って表示されます。

日付型以外の数値型の変数を日付型に変換すると、整数部の値は日付、小数部の値は時刻として表されます。午前 0 時は 0、正午は 0.5 です。負の整数は 1899 年 12 月 30 日より前の日付を表します。


10 進型 (Decimal)

10 進型 (Decimal) の変数は、96 ビット (12 バイト) の変数です。10 の累乗が変化することにより大きさの変化する符号ありの整数です。10 の累乗の指数によって、小数点の右側の桁数が指定されます。小数点以下の桁数は、0 ～ 28 の範囲の値です。小数点以下の桁数が 0 の場合 (小数部分を持たない場合)、絶対値の最大値は 79,228,162,514,264,337,593,543,950,335 です。小数点以下 28 桁の場合、絶対値の最大値は 7.9228162514264337593543950335 です。絶対値の最小値は 0 を除いた場合、0.0000000000000000000000000001 です。

メモ   現在、10 進型はバリアント型 (Variant) の内部処理形式でのみ使用できます。変数を 10 進型として宣言することはできません。ただし、CDec 関数を使用することにより、内部処理形式 Decimal のバリアント型 (Variant) の変数を作成することができます。


倍精度浮動小数点数型 (Double)

倍精度浮動小数点数型 (Double) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。負の値は -1.79769313486231E308 ～ -4.94065645841247E-324、正の値は 4.94065645841247E-324 ～ 1.79769313486232E308 の範囲の値をとります。倍精度浮動小数点数型の型宣言文字はシャープ記号 (#) です。


整数型 (Integer)

整数型 (Integer) の変数は、16 ビット (2 バイト) の変数で、-32,768 ～ 32,767 の範囲の値をとります。整数型の型宣言文字はパーセント記号 (%) です。

整数型の変数を列挙型の値として使うこともできます。列挙値には、プログラムの内部において特定の意味を持つ、一定数の数値を定義できます。列挙値を用いることによって、一定数の選択肢を表現しやすくなります。たとえば、0 を黒、1 を白と定義しておきます。列挙型のそれぞれの値を Const ステートメントで定数として定義すると、読みやすいコードを作成できます。


長整数型 (Long)

長整数型 (Long) の変数は、32 ビット (4 バイト) の変数です。-2,147,483,648 ～ 2,147,483,647 の範囲の値をとります。長整数型の型宣言文字はアンパサンド (&) です。


オブジェクト型 (Object)

オブジェクト型 (Object) の変数は、32 ビット (4 バイト) の変数です。オブジェクトを参照するためのアドレスを格納します。オブジェクト型として宣言した変数には、Set ステートメントを使用してオブジェクトへの参照を代入することができます。

メモ   オブジェクト型として宣言した変数には任意のオブジェクトへの参照を格納することができますが、変数と参照先のオブジェクトとのバインディングが遅くなります (実行時バインディング)。事前バインディング (コンパイル時バインディング)を実行するには、固有のクラス名を指定して宣言した変数にオブジェクトへの参照を代入します。


単精度浮動小数点数型 (Single)

単精度浮動小数点数型 (Single) の変数は、IEEE 32 ビット (4 バイト) の浮動小数点数の変数です。負の値は -3.402823E38 ～ -1.401298E-45、正の値は 1.401298E-45 ～ 3.402823E38 の範囲の値をとります。単精度浮動小数点数型の型宣言文字はエクスクラメーションマーク (!) です。


文字列型 (String)

文字列には、可変長文字列と固定長文字列の 2 種類があります。

•	可変長文字列には、約 2GB (2^31) までの文字を格納することができます。

•	固定長文字列には、1 ～ 約 2GB (2^31) の文字を格納することができます。

メモ   クラス モジュールでは、キーワード Public を使って固定長文字列を宣言できません。

文字列型 (String) のデータは、すべて文字コードで構成されます。文字列型 (String) の型宣言文字は、ドル記号 ($) です。


ユーザー定義型

Type ステートメントを使って、異なるデータ型を組み合わせた独自のデータ型を作成できます。ユーザー定義型には 1 つまたは複数のデータ型の要素、配列、または事前に定義したユーザー定義型を格納することができます。次に例を示します。

Type MyType

MyName As String	' 文字列型変数に名前を格納します。

MyBirthDate As Date	' 日付型変数に生年月日を格納します。

MySex As Integer	' 整数型変数 に性別 (0 が女性で、1 が男性) を格納します。

End Type


バリアント型 (Variant)

バリアント型 (Variant) は、Private ステートメント、Public ステートメント、または Static ステートメントを使用して明示的にデータ型が宣言されていない、すべての変数に割り当てられます。バリアント型には型宣言文字がありません。

バリアント型は特殊なデータ型で、固定長の文字列型 (String) データとユーザー定義型を除く、あらゆる種類のデータを格納することができます。また、バリアント型には、特殊な値 Empty 値、Null 値、およびエラー値や Nothing なども格納することができます。バリアント型のデータがどのように処理されるかは、VarType 関数または TypeName 関数を使って調べることができます。

バリアント型として格納されている数値データは、-1.797693134862315E308 ～ -4.94066E-324 (負の値)、4.94066E-324 ～ 1.797693134862315E308 (正の値) の範囲のすべての整数または実数の値をとることができます。通常、数値データはバリアント型として格納される場合でも、その数値本来のデータ型でバリアント型の変数に格納されます。たとえば、整数型 (Integer) の値をバリアント型の変数に代入した場合、続く操作でその変数は整数型として処理されます。ただし、バイト型 (Byte)、整数型、長整数型 (Long)、単精度浮動小数点数型 (Single) のいずれかの数値データを含むバリアント型の変数を演算処理したとき、演算結果が元の数値本来のデータ型の範囲を超えた場合、バリアント型の内部処理形式として、その値を保持できるデータ範囲を持つ、より大きなデータ型が割り当てられます。つまり、バイト型は整数型になり、整数型は長整数型になり、長整数型および単精度浮動小数点数型は倍精度浮動小数点数型 (Double) になります。バリアント型に含まれている通貨型 (Currency)、10 進型 (Decimal)、および倍精度浮動小数点数型の値が有効範囲を超えるとエラーが発生します。

特定のデータ型の代わりにバリアント型を用いることにより、より柔軟な方法でデータを処理できます。バリアント型変数の内容が数値である場合、次のように状況に応じて数値を文字列として表していたり、実際の値を示していることがあります。

Dim MyVar As Variant

MyVar = 98052

上の例で、MyVar が保持している値は、"数字" (98052) です。このように数値とも数字 (文字列) とも解釈できる値をバリアント型の変数が保持している場合でも、この変数に対して数値演算を正常に行うことができます。たとえば、+ 演算子を使って数値データを保持している他のバリアント型変数や通常の数値型を持つ変数を MyVar に加えると、その結果は 2 つの値の合計になります。

Empty 値は、初期化されていない (初期値が代入されていない) バリアント型の変数を示します。Empty 値を含むバリアント型の変数は、数値データと共に使われるときは 0、文字列データと共に使われるときは長さ 0 の文字列 ("") として扱われます。

Empty 値を Null 値と混同しないでください。Null 値は、バリアント型変数に有効なデータが意図的に格納されていないことを示します。

バリアント型では、エラー値はプロシージャ内でエラー条件が発生したことを示すために使われる特殊な値です。ただし、他のエラーとは異なり、通常のアプリケーション レベルのエラー処理は行われません。このため、ユーザーまたはアプリケーション自体が、エラー値に基づいて代替操作を実行できます。エラー値は、CVErr 関数を使って実数を変換することにより作成します。


Date 関数の使用例

次の例は、Date 関数を使って、現在のシステムの日付を取得します。

Dim MyDate

MyDate = Date	' MyDate に現在のシステムの日付が格納されます。


Date ステートメントの使用例

次の例は、Date ステートメントを使って、システムの日付を設定します。開発環境時には、日付リテラルはコード記述時の国別情報で設定されている短い日付の形式で表示されます。

Dim MyDate

MyDate = #February 12, 1985#	' 日付を代入します。

Date = MyDate	' システムの日付を変更します。


DateAdd 関数の使用例

次の例は、ユーザーに日付とそれに加算する月数の入力を求めた後、DateAdd 関数を使って加算後の日付を表示します。

Dim FirstDate As Date	' 変数を宣言します。

Dim IntervalType As String

Dim Number As Integer

Dim Msg

IntervalType = "m"	' "m" によって追加する時間間隔として、月を指定します。

FirstDate = InputBox("日付を入力してください。")

Number = InputBox("加算する月数を入力してください。")

Msg = "新しい日付: " & DateAdd(IntervalType, Number, FirstDate)

MsgBox Msg


DateDiff 関数の使用例

次の例は、DateDiff 関数を使って、指定された日付までの日数を取得します。

Dim TheDate As Date	' 変数を宣言します。

Dim Msg

TheDate = InputBox("日付を入力してください。")

Msg = "今日からの日数: " & DateDiff("d", Now, TheDate)

MsgBox Msg


DatePart 関数の使用例

次の例は、ユーザーに日付の入力を求めた後、DatePart 関数を使って、その日付が四半期のうちのどの期に当たるかを調べます。

Dim TheDate As Date	' 変数を宣言します。

Dim Msg

TheDate = InputBox("日付を入力してください。")

Msg = "第 " & DatePart("q", TheDate) & " 四半期"

MsgBox Msg


DateSerial 関数の使用例

次の例は、DateSerial 関数を使って、指定された年、月、日に対応する日付を取得します。

Dim MyDate

' MyDate には、1969 年 2 月 12 日の日付が代入されます。

MyDate = DateSerial(1969, 2, 12)	' 日付を返します。


DateValue 関数の使用例

次の例は、DateValue 関数を使って、文字列を日付に変換します。日付リテラルを使って、バリアント型 (Variant) や日付型 (Date) の変数に日付を直接代入することもできます (たとえば MyDate = #02/12/69#)。

Dim MyDate

MyDate = DateValue("February 12, 1969")	' 日付を返します。


Day 関数の使用例

次の例は、Day 関数を使って、指定された日付の "日" で表される部分を取得します。開発環境時には、日付リテラルはコード記述時の国別情報で設定されている短い日付の形式で表示されます。

Dim MyDate, MyDay

MyDate = #February 12, 1969#	' 日付を代入します。

MyDay = Day(MyDate)	' MyDay には、12 が代入されます。


Hour 関数の使用例

次の例は、Hour 関数を使って、指定された時刻の "時" で表される部分を取得します。開発環境時には、時刻リテラルはコード記述時の国別情報で設定されている短い時刻の形式で表示されます。

Dim MyTime, MyHour

MyTime = #4:35:17 PM#	' 時刻を代入します。

MyHour = Hour(MyTime)	' MyHour には、16 が代入されます。


Minute 関数の使用例

次の例は、Minute 関数を使って、指定された時刻の "分" で表される部分を取得します。開発環境時には、時刻リテラルはコード記述時の国別情報で設定されている短い時刻の形式で表示されます。

Dim MyTime, MyMinute

MyTime = #4:35:17 PM#	' 時刻を代入します。

MyMinute = Minute(MyTime)	' MyMinute には、35 が代入されます。


Month 関数の使用例

次の例は、Month 関数を使って、指定された日付の "月" で表される部分を取得します。開発環境時には、日付リテラルはコード記述時の国別情報で設定されている短い日付の形式で表示されます。

Dim MyDate, MyMonth

MyDate = #February 12, 1969#	' 日付を代入します。

MyMonth = Month(MyDate)	' MyMonth には、2 が代入されます。


Now 関数の使用例

次の例は、Now 関数を使って、現在のシステムの日付と時刻を取得します。

Dim Today

Today = Now	' 現在のシステムの日付と時刻を代入します。


Second 関数の使用例

次の例は、Second 関数を使って、指定された時刻の "秒" で表される部分を取得します。開発環境時には、時刻リテラルはコード記述時の国別情報で設定されている短い時刻の形式で表示されます。

Dim MyTime, MySecond

MyTime = #4:35:17 PM#	' 時刻を代入します。

MySecond = Second(MyTime)	' MySecond には、17 が代入されます。


Time 関数の使用例

次の例は、Time 関数を使って、現在のシステムの時刻を求めます。

Dim MyTime

MyTime = Time	' 現在のシステムの時刻を返します。


Time ステートメントの使用例

次の例は、Time ステートメントを使って、システムの時刻を設定します。

Dim MyTime

MyTime = #4:35:17 PM#	' 時刻を代入します。

Time = MyTime	' システムの時刻を MyTime に合わせます。


Timer 関数の使用例

次の例は、Timer 関数を使って、プログラムの実行を中断します。この例では、DoEvents ステートメントを使って、プログラムが中断している間も他のプロセスを割り込みで処理できます。

Dim PauseTime, Start, Finish, TotalTime

If (MsgBox("[はい] をクリックすると、ﾌﾟﾛｸﾞﾗﾑの実行が 5 秒間中断されます。", 4)) = vbYes Then

PauseTime = 5	' 中断時間を設定します。

Start = Timer	' 中断の開始時刻を設定します。

Do While Timer < Start + PauseTime

DoEvents	' 他のプロセスに制御を渡します。

Loop

Finish = Timer	' 中断の終了時刻を設定します。

TotalTime = Finish - Start	' 実際の中断時間を計算します。

MsgBox "実行を " & TotalTime & " 秒間中断しました。"

Else

End

End If


TimeSerial 関数の使用例

次の例は、TimeSerial 関数を使って、指定された時間、分、秒で表される時刻を求めます。

Dim MyTime

MyTime = TimeSerial(16, 35, 17)

' MyTime には、午後 4 時 35 分 17 秒を表すシリアル値が代入されます。


TimeValue 関数の使用例

次の例は、TimeValue 関数を使って、文字列を時刻に変換します。時刻リテラルを使って、バリアント型 (Variant) や日付型 (Date) の変数に時刻を直接代入することもできます。たとえば、MyTime = #4:35:17 PM# のように指定します。

Dim MyTime

MyTime = TimeValue("4:35:17 PM")	' 時刻を返します。


Weekday 関数の使用例

次の例は、Weekday 関数を使って、指定された日付の曜日を取得します。

Dim MyDate, MyWeekDay

MyDate = #February 12, 1969#	' 日付を代入します。

MyWeekDay = Weekday(MyDate)

' MyDate が木曜日を表すので、MyWeekDay には、4 が代入されます。


Year 関数の使用例

次の例は、Year 関数を使って、指定された日付の "年" で表される部分を取得します。開発環境時には、日付リテラルはコード記述時の国別情報で設定されている短い日付の形式で表示されます。

Dim MyDate, MyYear

MyDate = #February 12, 1969#	' 日付を代入します。

MyYear = Year(MyDate)	' MyYear には、1969 が代入されます。


Date 関数

現在のシステムの日付を含むバリアント型 (内部処理形式 Date の Variant) の値を返します。

構文

Date

解説

現在の日付を設定するには、Date ステートメントを使います。

Calendar プロパティの設定がグレゴリオ暦の場合、Date 関数および Date$ 関数は通常の形式で表される値を返します。Calendar プロパティの設定が回教暦の場合、Date$ 関数は mm-dd-yyyy という 10 文字の書式で表される値を返します。mm は 01 ～ 12、dd は 01 ～ 30、yyyy は 1400 ～ 1523 の範囲の値が有効で、それぞれ回教暦の月、日、年を表します。回教暦の 1400 年 1 月 1 日 ～ 1523 年 12 月 30 日は、グレゴリオ暦の 1980 年 1 月 1 日 ～ 2099 年 12 月 31 日に対応します。


Date ステートメント

現在のシステムの日付を設定するステートメントです。

構文

Date = date

Microsoft Windows 95 で実行されるシステムの場合は、1980 年 1 月 1 日～2099 年 12 月 31 日の範囲の日付を指定する必要があります。Microsoft Windows NT で実行されるシステムの場合は、1980 年 1 月 1 日～2079 年 12 月 31 日の範囲の日付を指定する必要があります。Macintosh の場合には date に1904 年 1 月 1 日 ～ 2040 年 2 月 5 日の範囲の日付を指定する必要があります。.


DateAdd 関数

指定された時間間隔を加算した日付をバリアント型 (内部処理形式 String の Variant) の値で返します。

構文

DateAdd(interval, number, date)

DateAdd 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
interval	必ず指定します。追加する時間間隔を表す文字列式を指定します。
number	必ず指定します。追加する時間間隔の数を表す数式を指定します。将来の日時を取得するには正の数を指定します。過去の日時を取得するには負の数を指定します。
date	必ず指定します。時間間隔を追加する日付を表すバリアント型 (内部処理形式 Date の Variant) の値またはリテラル文字列を指定します。
設定値

名前付き引数 interval の設定値は次のとおりです。

設定値	内容
yyyy	yyyy
q	四半期
m	月
y	年間通算日
d	日
w	週日
ww	週
h	時
n	分
s	秒
解説

DateAdd 関数を使うと、ある日付に対して指定した時間間隔を、加えたり引いたりすることができます。たとえば、現在から 30 日後の日付や、現在から 45 分後の時刻などを計算できます。

名前付き引数 date に日数を加えるには、年間通算日 ("y")、日 ("d")、週日 ("w") のいずれかを指定します。

DateAdd 関数が無効な日付を返すことはありません。次の例では、31-Jan-95 の日付に 1 か月を加えています。

DateAdd("m", 1, "31-Jan-95")

この場合、31-Feb-95 ではなく、28-Feb-95 が返されます。名前付き引数 date が 31-Jan-96 であれば、1996 年は閏年なので 29-Feb-96 が返されます。

計算の結果、日付が西暦 100 年以前になる場合 (名前付き引数 date に指定した年よりも大きな年を引いた場合) は、エラーが発生します。

名前付き引数 number に指定した値が長整数型 (Long) でない場合は、最も近い整数値に丸められてから評価されます。

メモ   DateAdd の戻り値の書式は、引数 date に指定する日付の書式ではなく、[コントロール パネル] の設定によって決まります。

メモ   Calendar プロパティの設定がグレゴリオ暦の場合、引数 date にはグレゴリオ暦で表される日付を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には回教暦で表される日付を指定する必要があります。月の名前として数値以外の名称が使われている場合、この名前は現在の Calendar プロパティの設定と一致する必要があります。月の名前と Calendar プロパティの設定を競合しないようにするには、短い日付形式の数値を使って日付を表すようにします。


DateDiff 関数

2 つの指定した日付の時間間隔を表すバリアント型 (内部処理形式 Date の Variant) の値を指定します。

構文

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DateDiff 関数の構文は、次の名前付き引数で構成されます。

指定項目	内容
interval	必ず指定します。名前付き引数 date1 と date2 の間隔を計算するための、時間単位を表す文字列式を指定します。
date1, date2	必ず指定します。この名前付き引数はバリアント型 (内部処理形式 Date の Variant) のデータ形式で指定します。間隔を計算する 2 つの日付を指定します。
firstdayofweek	省略可能です。週の始まりの曜日を表す定数を指定します。省略すると、日曜日を指定したものとみなされます。
firstweekofyear	省略可能です。年度の第 1 週を表す定数を指定します。省略すると、1 月 1 日を含む週が第 1 週とみなされます。
設定値

名前付き引数 interval の設定値は次のとおりです。

設定値	内容
yyyy	年
q	四半期
m	月
y	年間通算日
d	日
w	週日
ww	週
h	時
n	分
s	秒
名前付き引数 firstdayofweek の設定値は次のとおりです。

定数	値	内容
vbUseSystem	0	NLS API の設定値を使います。
vbSunday	1	(既定値) 日曜
vbMonday	2	月曜
vbTuesday	3	火曜
vbWednesday	4	水曜
vbThursday	5	木曜
vbFriday	6	金曜
vbSaturday	7	土曜
名前付き引数 firstweekofyear の設定値は次のとおりです。

定数	値	内容
vbUseSystem	0	NLS API の設定値を使います。
vbFirstJan1	1	(既定値) 1 月 1 日を含む週を年度の第 1 週として扱います。
vbFirstFourDays	2	7 日のうち少なくとも 4 日が新年度に含まれる週を年度の第 1 週として扱います。
vbFirstFullWeek	3	全体が新年度に含まれる最初の週を年度の第 1 週として扱います。
解説

DateDiff 関数を使うと、指定した時間単位で 2 つの日付の時間間隔を調べることができます。たとえば、2 つの日付の間の日数や、現在から年末までの週の数などを求めることができます。

名前付き引数 date1 と date2 の間の日数を求めるには、年間通算日 ("y") か、日 ("d") のいずれかを指定します。名前付き引数 interval に週日 ("w") を指定すると、2 つの日付の間の週の数が計算されます。名前付き引数 date1 が月曜日の場合は、名前付き引数 date2 までの間の月曜日の数が返されます。このとき名前付き引数 date2 の月曜日は計算に入りますが、名前付き引数 date1 の月曜日は計算に入りません。一方、名前付き引数 interval に週 ("ww") を指定した場合は、2 つの日付の間の暦上の週の数が計算されます。つまり、名前付き引数 date1 と date2 の間の日曜日の数が返されます。名前付き引数 date2 に指定した日付が日曜日であれば、名前付き引数 date2 は計算に入りますが、名前付き引数 date1 は日曜日であっても計算に入りません。

名前付き引数 date2 よりも時間的に後の日付を名前付き引数 date1 に指定すると、DateDiff 関数は負の数を返します。

名前付き引数 firstdayofweek は、名前付き引数 interval に週 ("ww") を指定した場合の計算値に影響します。

名前付き引数 date1 または date2 に日付リテラルを指定した場合、指定した年が日付の固定部分となります。ただし、名前付き引数 date1 または date2 をダブル クォーテーション (" ") で囲み、年を省略すると、名前付き引数 date1 または date2 の式が評価されるたびにコードに現在の年が挿入されます。これを利用すると、異なる年度で使用できるコードを記述することが可能になります。

12 月 31 日とその次の年の 1 月 1 日を比較すると、DateDiff 関数の年 ("yyyy") は、1 日後であっても、1 を返します。

メモ   Calendar プロパティの設定がグレゴリオ暦の場合、引数 date1 および date2 にはグレゴリオ暦で表される日付を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date1 および date2 には回教暦で表される日付を指定する必要があります。


DatePart 関数

日付の指定した部分を含むバリアント型 (内部処理形式 Integer の Variant) の値を返します。

構文

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

DatePart 関数の構文は、次の名前付き引数で構成されます。

指定項目	内容
interval	必ず指定します。時間間隔の単位を表す文字列式を指定します。
date	必ず指定します。評価するバリアント型 (内部処理形式 Date の Variant) の値を指定します。
firstdayofweek	省略可能です。週の始まりの曜日を表す定数を指定します。省略すると、日曜日を指定したものとみなされます。
firstweekofyear	省略可能です。年度の第 1 週を表す定数を指定します。省略すると、1 月 1 日を含む週が第 1 週とみなされます。
設定値

名前付き引数 interval の設定値は次のとおりです。

設定値	内容
yyyy	年
q	四半期
m	月
y	年間通算日
d	日
w	週日
ww	週
h	時
n	分
s	秒
名前付き引数 firstdayofweek の設定値は次のとおりです。

定数	値	内容
vbUseSystem	0	NLS API の設定値を使います。
vbSunday	1	(既定値) 日曜
vbMonday	2	月曜
vbTuesday	3	火曜
vbWednesday	4	水曜
vbThursday	5	木曜
vbFriday	6	金曜
vbSaturday	7	土曜
名前付き引数 firstweekofyear の設定値は次のとおりです。

定数	値	内容
vbUseSystem	0	NLS API の設定値を使います。
vbFirstJan1	1	(既定値) 1 月 1 日を含む週を年度の第 1 週として扱います。
vbFirstFourDays	2	7 日のうち少なくとも 4 日が新年度に含まれる週を年度の第 1 週として扱います。
vbFirstFullWeek	3	全体が新年度に含まれる最初の週を年度の第 1 週として扱います。
解説

DatePart 関数を使うと、日付を評価し、特定の時間間隔部分を取得できます。たとえば、週日や現在の時刻などを計算できます。

名前付き引数 firstdayofweek は、名前付き引数 interval に週 ("ww") を指定した場合の計算値に影響します。

名前付き引数 date に日付リテラルを指定した場合、指定した年が日付の固定部分となります。ただし、名前付き引数 date をダブル クォーテーション (" ") で囲み、年を省略すると、名前付き引数 date の式が評価されるたびにコードに現在の年が挿入されます。これを利用すると、異なる年度で使用できるコードを記述することが可能になります。

メモ   Calendar プロパティの設定がグレゴリオ暦の場合、引数 date にはグレゴリオ暦で表される日付を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には回教暦で表される日付を指定する必要があります。

返される日付の部分は、現在のアラビア暦の時間間隔の単位で返されます。たとえば、現在のカレンダーが回教暦で、返される日付の部分が年の場合、その年の値は回教暦の年になります。


DateSerial 関数

引数に指定した年、月、日に対応するバリアント型 (内部処理形式 Date の Variant) の値を返す関数です。

構文

DateSerial(year, month, day)

DateSerial 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
year	必ず指定します。この名前付き引数は整数型 (Integer) のデータ形式で指定します。年を表す 100 ～ 9999 の範囲の数値または数式を指定します。
month	必ず指定します。この名前付き引数は整数型 (Integer) のデータ形式で指定します。月を表す 1 ～ 12 の範囲の数値または任意の数式を指定します。
day	必ず指定します。この名前付き引数は整数型 (Integer) のデータ形式で指定します。日を表す 1 ～ 31 の範囲の数値または任意の数式を指定します。
解説

DateSerial 関数の各引数に指定する数値は、それぞれ正しい範囲内になければなりません。月については 1 ～ 12、日については 1 ～ 31 です。また、ある日付からの相対的な年、月、日を表す数式を引数に指定することもできます。

次の例では、直接日付を指定するのではなく、数式を用いて相対的に指定しています。1990 年の 10 年前 (1990 - 10) の 8 月から 2 か月前 (8 - 2) の最初の日の前日 (1 - 1) の日付、1980 年 5 月 31 日を返します。

DateSerial(1990 - 10, 8 - 2, 1 - 1)

Windows 98 または Windows 2000 では、名前付き引数 year に 0 ～ 99 の範囲の数値を指定すると、既定の設定では 0 ～ 29 の場合は 2000 ～ 2029、30 ～ 99 の場合は 1939 ～ 1999 と読み替えられます。これ以外の数値を名前付き引数 year に指定する場合は、4 桁の数値 (たとえば 1800) を指定してください。

以前のバージョンの Windows では、名前付き引数 year に 0 ～ 99 の範囲の数値を指定すると、1900 ～ 1999 と読み替えられます。関数が正確な値を返すようにするには、4 桁の数値を使用してください。

各引数に指定する値が正しい範囲内にない場合、指定された値は引数に従って加算されます。たとえば、名前付き引数 day に 35 を指定すると、指定した年と月によって、1 か月とその月から超過する分の日数として扱われます。ただし、各引数の値が -32,768 ～ 32,767 の範囲を超える場合、エラーが発生します。3 つの引数で指定した日付が正しい日付の範囲内にない場合には、エラーが発生します。

メモ      Calendar プロパティの設定がグレゴリオ暦の場合、引数 year、month、および day にはグレゴリオ暦で表される日付を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 year、month、および day には回教暦で表される日付を指定する必要があります。

返される日付の部分は、現在の Visual Basicカレンダーの時間の範囲で返されます。たとえば、現在のカレンダーが回教暦で、返される日付の部分が年の場合、その年の値は回教暦の年になります。また、引数 year に 0 ～ 99 の範囲の数値を指定すると、1400 ～ 1499 と読み替えられます。これ以外の数値を引数 year に指定する場合は、完全な 4 桁の数値 (たとえば 1520) を指定してください。


DateValue 関数

日付を表すバリアント型 (内部処理形式 Date の Variant) の値を返します。

構文

DateValue(date)

引数 date は必ず指定します。引数 date には、通常、100 年 1 月 1 日から 9999 年 12 月 31 日までの範囲の日付を表す文字列式を指定します。また、この範囲内の日付や時刻、または日付と時刻の両方を表す任意の式を指定することもできます。

解説

引数 date が有効な日付の区切り文字によって区切られた数字だけが含まれる場合、DateValue 関数はコントロール パネルで設定した短い日付の書式に従って、年、月、および日の順序を認識します。また DateValue 関数は、日付に月の名前がそのまま記述してあっても、また省略した形式であっても認識します。たとえば、"1991/12/30" や "91/12/30" だけでなく、"平成 3 年 12 月 30 日"、"H3 - 12 - 30" などの形式で指定することもできます。

引数 date を指定するときに年を省略すると、DateValue 関数はシステムの日付を現在の年として使用します。

引数 date に時刻の値を含むとき、DateValue 関数はその時刻を戻り値として返しません。ただし、引数 date に不正な時刻 (たとえば "89:89") を指定したときには、エラーが発生します。

メモ   Calendar プロパティの設定がグレゴリオ暦の場合、引数 date にはグレゴリオ暦で表される日付を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には回教暦で表される日付を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には 1/1/100 (グレゴリオ暦 Aug 2, 718) ～ 4/3/9666 (グレゴリオ暦 Dec 31, 9999) の範囲の日付を表す文字列を指定できます。


Day 関数

月の何日かを表す 1～31 の範囲の整数を表すバリアント型 (内部処理形式 Integer の Variant) の値を返します。

構文

Day(date)

引数 date は必ず指定します。引数 date には、日付を表す任意のバリアント型 (Variant) の値、数式、文字列式、またはこれらを任意に組み合わせた値を指定します。引数 date が有効な値を含まない場合は、Null 値を返します。

メモ   Calendar プロパティの設定がグレゴリオ暦の場合、引数 date にはグレゴリオ暦で表される日を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には回教暦で表される日を指定する必要があります。


Hour 関数

1 日の時刻を表す 0～23 の範囲の整数を表すバリアント型 (内部処理形式 Integer の Variant) の値を返します。

Syntax

Hour(time)

引数 time は必ず指定します。引数 time には、時刻を表す任意のバリアント型 (Variant) の値、数式、文字列式、またはこれらを組み合わせた値を指定します。引数 time が有効な値を含まない場合は、Null 値を返します。


Minute 関数

時刻の分を表す 0～59 の範囲の整数を表すバリアント型 (内部処理形式 Integer の Variant) の値を返します。

構文

Minute(time)

引数 time は必ず指定します。引数 time には、時刻の分を表す任意のバリアント型 (Variant) の値、数式、文字列式、またはこれらを組み合わせた値を指定します。引数 time が有効な値を含まない場合は、Null 値を返します。


Month 関数

1 年の何月かを表す 0～12 の範囲の整数を表すバリアント型 (内部処理形式 Integer の Variant) の値を返します。

構文

Month(date)

引数 date は必ず指定します。引数 date には、日付を表すバリアント型 (Variant) の値、数式、文字列式、またはこれらを組み合わせた値を指定します。引数 date が有効な値を含まない場合は、Null 値を返します。

メモ   Calendar プロパティの設定がグレゴリオ暦の場合、引数 date にはグレゴリオ暦で表される月を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には回教暦で表される月を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には 1/1/100 (グレゴリオ暦 Aug 2, 718) ～ 4/3/9666 (グレゴリオ暦 Dec 31, 9999) の範囲の日付を表す数式を指定できます。


Now 関数

コンピュータのシステムの日付と時刻の設定に基づいて、現在の日付と時刻を表すバリアント型 (内部処理形式 Date の Variant) の値を返します。

構文

Now


Second 関数

時間の秒を表す 0～59 の範囲の整数を表すバリアント型 (内部処理形式 Integer の Variant) の値を返します。

構文

Second(time)

引数 time は必ず指定します。引数 time には、時間の秒を表すバリアント型 (Variant) の値、数式、文字列式、またはこれらを組み合わせた値を指定します。引数 time が 有効な値を含まない場合は、Null 値を返します。


Time 関数

現在のシステムの時刻を表すバリアント型 (内部処理形式 Date の Variant) の値を返します。

構文

Time

解説

システムの時刻を設定するときは、Time ステートメントを使います。


Time ステートメント

システムの時刻を設定するステートメントです。

構文

Time = time

引数 time は必ず指定します。引数 time には、時刻を表す数式または文字列式を指定します。

解説

引数 time が文字列の場合、Time ステートメントはコントロール パネルで設定した時刻の区切り記号に従って引数を時刻に変換します。変換できない場合には、エラーが発生します。


Timer 関数

午前 0 時 (真夜中) から経過した秒数を表す単精度浮動小数点数型 (Single) の値を返します。

構文

Timer

解説

Microsoft Windows では、Timer 関数は小数点以下の値も返します。Macintosh では、小数点以下の値は返されません。


TimeSerial 関数

引数で指定した時、分、および秒に対応する時刻を含むバリアント型 (内部処理形式 Dateの Variant) の値を返します。

構文

TimeSerial(hour, minute, second)

TimeSerial 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
hour	必ず指定します。この名前付き引数はバリアント型 (内部処理形式 Integer の Variant) のデータ形式で指定します。時を表す 0 (12:00 AM) ～ 23 (11:00 PM) の範囲の数値または数式を指定します。
minute	必ず指定します。この名前付き引数はバリアント型 (内部処理形式 Integer の Variant) のデータ形式で指定します。分を表す 0 ～ 59 の範囲の数値または任意の数式を指定します。
second	必ず指定します。この名前付き引数はバリアント型 (内部処理形式 Integer の Variant) のデータ形式で指定します。秒を表す 0 ～ 59 の範囲の数値または任意の数式を指定します。
解説

TimeSerial 関数の各引数は、それぞれ正しい範囲内になければなりません。時の範囲は 0 ～ 23、分および秒の範囲は 0 ～ 59 です。また、ある時刻からの相対的な時、分、および秒を表す数式を引数に指定することもできます。

次の例では、直接日付を指定せずに、式を用いて相対的に指定しています。正午の 6 時間前 (12 - 6) から 15 分前 (0 - 15) の時刻、午前 5:45:00 を返します。

TimeSerial(12 - 6, -15, 0)

各引数に指定する値が正しい範囲内にない場合、指定された値は引数に従って加算されます。たとえば、名前付き引数 minute に 75 を指定すると、1 時間と 15 分として扱われます。ただし、各引数の値が -32,768 ～ 32,767 の範囲を超える場合、エラーが発生します。3 つの引数で指定した時刻が時刻として正しい範囲内にない場合には、エラーが発生します。


TimeValue 関数

時刻を表すバリアント型 (内部処理形式 Date の Variant) の値を返します。

構文

TimeValue(time)

引数 time は必ず指定します。引数 time には、通常 0:00:00 (12:00:00 AM) ～ 23:59:59 (11:59:59 PM) の範囲の時刻を表す文字列式を指定します。また、この範囲で時刻を表す任意の式を指定することもできます。引数 time に Null 値が含まれると、Null 値を返します。

解説

12 時間制または24 時間制のどちらを使って時刻を指定してもかまいません。たとえば、"2:24PM" と "14:24" は、両方とも有効な引数となります。

引数 time が日付の値を含む場合、TimeValue 関数はその日付を戻り値に含めません。ただし、引数 time に正しくない値を指定したときには、エラーが発生します。


Weekday 関数

何曜日であるかを表す整数を表すバリアント型 (内部処理形式 Integer の Variant) の値を返します。

構文

Weekday(date, [firstdayofweek])

Weekday 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
date	必ず指定します。日付を表す数式または文字列式を指定します。名前付き引数 date が Null 値を含む場合は、Null 値を返します。
firstdayofweek	省略可能です。週の第 1 日目の曜日を指定する定数です。この定数を指定しない場合は、定数 vbSunday を指定したとみなされます。
設定値

名前付き引数 firstdayofweek の設定値は次のとおりです。

定数	値	内容
vbUseSystem	0	NLS APIの 設定値を使います。
vbSunday	1	(既定値) 日曜
vbMonday	2	月曜
vbTuesday	3	火曜
vbWednesday	4	水曜
vbThursday	5	木曜
vbFriday	6	金曜
vbSaturday	7	土曜
戻り値

Weekday 関数は、次のいずれかの値を返します。

定数	値	内容
vbSunday	1	日曜
vbMonday	2	月曜
vbTuesday	3	火曜
vbWednesday	4	水曜
VbThursday	5	木曜
VbFriday	6	金曜
VbSaturday	7	土曜
解説

Calendar プロパティの設定がグレゴリオ暦の場合、引数 date にはグレゴリオ暦で表される曜日を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には回教暦で表される曜日を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には 1/1/100 (グレゴリオ暦 Aug 2, 718) ～ 4/3/9666 (グレゴリオ暦 Dec 31, 9999) の範囲の日付を表す数式を指定できます。


Year 関数

年を表すバリアント型 (内部処理形式 Integer の Variant) の値を返します。

構文

Year(date)

引数 date は必ず指定します。引数 date には、日付を表すバリアント型 (Variant) の値、数式、文字列式、またはこれらを組み合わせた値を指定します。引数 date が有効な値を含まない場合は、Null 値を返します。

メモ   Calendar プロパティの設定がグレゴリオ暦の場合、引数 date にはグレゴリオ暦で表される年を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には回教暦で表される年を指定する必要があります。Calendar プロパティの設定が回教暦の場合、引数 date には 1/1/100 (グレゴリオ暦 Aug 2, 718) ～ 4/3/9666 (グレゴリオ暦 Dec 31, 9999) の範囲の日付を表す数式を指定できます。


Array 関数

配列が格納されたバリアント型 (Variant) の値を返します。

構文

Array(arglist)

引数 arglist は、必ず指定します。引数 arglist には、値のリストをカンマ (,) で区切って指定します。指定した値は、バリアント型 (Variant) に格納されている配列の要素に代入されます。引数 arglist を指定しない場合は、長さ 0 の配列が作成されます。

解説

配列の要素を参照するには、変数名の後にかっこを付け、かっこの中に参照する要素のインデックス番号を指定します。次の例の最初のステートメントでは、バリアント型 (Variant) の変数 A を宣言しています。2 番目のステートメントでは、変数 A に配列を代入しています。最後のステートメントでは、配列の 2 番目の要素に格納されている値を、別の変数に代入しています。

Dim A As Variant

A = Array(10,20,30)

B = A(2)

Array 関数を使用して作成した配列のインデックスの最小値は、常に 0 です。ほかの種類の配列とは異なり、Option Base ステートメントに最小値を指定しても影響を受けません。

メモ   配列として宣言していないバリアント型 (Variant) に、配列を格納することができます。また、バリアント型変数には、固定長文字列およびユーザー定義型以外の型の配列を格納できます。配列を格納したバリアント型は、バリアント型の要素を持つ配列とは概念的に異なりますが、各要素に対する処理方法は同じです。


CallByName 関数

指定した オブジェクトのメソッドの実行、あるいはプロパティの値の取得や設定を行います。

構文

CallByName(object, procname, calltype,[args()])

CallByName 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
object	必ず指定します。バリアント型およびオブジェクト型のいずれかを指定できます。この関数の実行対象となるオブジェクトの名前を指定します。
procname	必ず指定します。バリアント型および文字列型のいずれかを指定できます。オブジェクトのプロパティ名およびメソッド名を含む文字列式を指定します。
calltype	必ず指定します。定数値を指定します。呼び出されるプロシージャの種類を表す vbCallType のメンバを指定します。
args()	省略可能です。バリアント型および配列を指定できます。
解説

CallByName 関数は、実行時に、指定したオブジェクトのプロパティの設定と取得、およびメソッドの実行を行います。

次の例では、まず最初の行で、CallByName 関数を使用してテキスト ボックスの MousePointer プロパティを設定し、2 行目で MousePointer プロパティの値を取得してから、3 行目でテキスト ボックスに対して Move メソッドを実行しています。

CallByName Text1, "MousePointer", vbLet, vbCrosshair

Result = CallByName (Text1, "MousePointer", vbGet)

CallByName Text1, "Move", vbMethod, 100, 100


Const ステートメント

リテラル値の代わりに使う定数を宣言します。

構文

[Public | Private] Const constname [As type] = expression

Const ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。すべてのモジュール内のすべてのプロシージャから参照可能な定数を宣言するために、モジュール レベルで使用するキーワードです。プロシージャ内では、指定できません。
Private	省略可能です。宣言が行われたモジュール内のプロシージャからのみ参照できる定数を宣言するときに指定するキーワードです。モジュール レベルで使用します。プロシージャ内では指定できません。
constname	必ず指定します。定義する定数の名前を指定します。変数の標準的な名前付け規則に従って指定します。
type	省略可能です。定数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点型 (Single)、倍精度浮動小数点数型 (Double)、10 進数型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String)、またはバリアント型 (Variant) のいずれかを指定できます。宣言する各変数に対して、As type 節を個別に指定します。
expression	必ず指定します。リテラル値、その他の定数、Is を除く算術演算子や論理演算子を組み合わせた式を指定します。
解説

既定では、定数はプライベートになります。プロシージャ内では、定数は常にプライベート定数として扱われて、適用範囲 (スコープ) は変更できません。標準モジュールでは、モジュール レベル定数の既定の適用範囲をキーワード Public で変更できます。一方、クラス モジュールでは、定数はプライベート定数としてのみ使用でき、キーワード Public では適用範囲を変更できません。

複数の定数宣言を 1 行にまとめるには、定数定義をカンマ (,) で区切ります。このようにして複数の定数を 1 行で宣言した場合、キーワード Public やキーワード Private を指定すると、すべての定数定義に対してキーワードが適用されます。

定数に代入する式の中では、変数、ユーザー定義関数、Chr などの Visual Basic の組込み関数は、使えません。

メモ   定数を使うと、プログラムがわかりやすく、修正も容易になります。変数とは異なり、定数はプログラムの実行中に値を変更できません。

As type で定数のデータ型を明示的に宣言しない場合、代入する式の評価結果に最適なデータ型が割り当てられます。

Sub プロシージャ、Function プロシージャ、または Property プロシージャ内で宣言した定数は、そのプロシージャ内でのみ参照できます。プロシージャの外で宣言された定数は、宣言されたモジュール内であれば、どこからでも参照できます。定数は、式が記述できる位置であれば、どこでも使えます。


CreateObject 関数

ActiveX オブジェクトへの参照を作成して、返します。

構文

CreateObject(class,[servername])

CreateObject 関数の構文は、次の指定項目から構成されます。

指定項目	内容
class	必ず指定します。内部処理形式が文字型 (String) のバリアント型 (Variant) の値を指定します。作成するオブジェクトのクラスとアプリケーションの名前を指定します。
servername	省略可能です。内部処理形式が文字型 (String) のバリアント型 (Variant) の値を指定します。作成するオブジェクトを保存するネットワーク サーバの名前を指定します。ローカル マシンで使用する場合は、空の文字列 ("") を指定します。
引数 class は、appname.objecttype の形式で指定します。

指定項目	内容
appname	必ず指定します。内部処理形式が文字型 (String) のバリアント型 (Variant) の値を指定します。オブジェクトを提供しているアプリケーションの名前を指定します。
objecttype	必ず指定します。内部処理形式が文字型 (String) のバリアント型 (Variant) の値を指定します。作成するオブジェクトの種類またはクラスを指定します。
解説

オートメーションに対応しているアプリケーションでは、少なくとも 1 種類のオブジェクトが提供されています。たとえば、ワード プロセッサの場合、アプリケーション (Application) オブジェクト、文書 (Document) オブジェクト、ツールバー (Toolbar) オブジェクトなどが提供されます。

ActiveX オブジェクトを作成するには、CreateObject 関数の戻り値をオブジェクト変数に代入します。

' オブジェクトへの参照を格納するためにオブジェクト変数を宣言します。

' Dim as Object で宣言すると、実行時バインディングが行われます。

Dim ExcelSheet As Object

Set ExcelSheet = CreateObject("Excel.Sheet")

このコードを実行すると、オブジェクトを作成するアプリケーションが起動します。この場合は、Microsoft Excel のワークシートが作成されます。一度オブジェクトが作成されると、定義したオブジェクト変数を使って、コード中のオブジェクトを参照できます。次の例では、オブジェクト変数 ExcelSheet を使用して、新しく作成したオブジェクトのプロパティおよびメソッドを操作します。また、Application オブジェクト、Cells コレクションなどのほかの Microsoft Excel のオブジェクトも使用しています。

' Application オブジェクトから Excel のワークシートを表示します。

ExcelSheet.Application.Visible = True

' シートの最初のセルに文字列を入力します。

ExcelSheet. Application.Cells(1, 1).Value = "これは列 A、行 1 です。"

' ワークシートをファイル C:\test.xls に保存します。

ExcelSheet.SaveAs "C:\ TEST.XLS"

' Application オブジェクトの Quit メソッドで Excel を終了します。

ExcelSheet.Application.Quit

' オブジェクト変数を解放します。

Set ExcelSheet = Nothing

As Object 節を使用してオブジェクト変数を宣言すると、任意の種類のオブジェクトへの参照を格納できる変数を作成できます。ただし、このような変数を使用してオブジェクトを操作する場合は、実行時バインディングが行われます。つまり、プログラムの実行時にバインディングが行われます。これに対し、事前バインディングは、プログラムのコンパイル時にバインディングが行われます。事前バインディングを行うオブジェクト変数を作成するには、特定のクラス ID を指定してオブジェクト変数を宣言します。たとえば、次のような Microsoft Excel への参照を宣言して作成できます

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.WorkSheet

Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets(1)

事前バインディングを行う変数を使用して参照した方が、パフォーマンスが良くなります。ただし、これらの変数に格納できるのは、宣言のときに指定したクラスへの参照のみです。

また、CreateObject 関数から返ったオブジェクトを、引数としてオブジェクトが必要な関数に渡せます。たとえば、次のコードは、Excel.Application オブジェクトへの参照を作成して引き渡します。

Call MySub (CreateObject("Excel.Application"))

CreateObject 関数の引数 servername にコンピュータの名前を指定すると、リモート ネットワーク コンピュータにオブジェクトを作成できます。その名前は、共有名のマシン名の部分と同じになります。たとえば、共有名が "\\MyServer\Public," の場合、servername は "MyServer" になります。

メモ   リモート ネットワーク コンピュータに作成できるアプリケーションについては、Microsoft Developer Network の COM のドキュメント参照してください。アプリケーションのレジストリ キーに追加することをお勧めします。

次の例では、MyServer という名前のリモート コンピュータで実行されている Excel インスタンスのバージョン番号を返します。

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application", "MyServer")

Debug.Print xlApp.Version

リモート サーバーが存在しないか、無効の場合は、実行時エラーが発生します。

メモ   オブジェクトの現在のインスタンスがないときは、CreateObject 関数を使います。オブジェクトのインスタンスが既に実行されているときは、新しいインスタンスが起動されて、指定した型のオブジェクトが作成されます。現在のインスタンスを使用する場合、またはアプリケーションを起動してファイルを読み込む場合には、GetObject 関数を使います。

複数のインスタンスを作成できないオブジェクトとして登録されているオブジェクトの場合には、CreateObject 関数を何回実行しても、そのオブジェクトのインスタンスは 1 つしか作成されません。


Declare ステートメント

ダイナミック リンク ライブラリ (DLL) の外部プロシージャへの参照を宣言します。モジュール レベルで使います。

構文 1

[Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])]

構文 2

[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

Declare ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。モジュール内のすべてのプロシージャから参照できるプロシージャを宣言するときに指定します。
Private	省略可能です。宣言が行われたモジュール内でのみ参照できるプロシージャを宣言するときに指定します。
Sub	省略可能です。ただし、Sub を省略する場合には、Function を指定する必要があります。プロシージャが値を返さないことを示します。
Function	省略可能です。ただし、Function を省略する場合には、Sub を指定する必要があります。プロシージャが値を返し、式の中で使えることを示します。
name	必ず指定します。任意の有効なプロシージャ名を指定します。DLL のエントリ ポイントは大文字小文字を区別して指定することに注意してください。
Lib	必ず指定します。宣言するプロシージャが DLL またはコード リソースに含まれていることを示します。Lib 節は、すべての宣言で必要です。
libname	必ず指定します。宣言するプロシージャが含まれている DLL またはコード リソースの名前を指定します。
Alias	省略可能です。呼び出すプロシージャが、DLL の中で別の名前を持っていることを示します。外部プロシージャの名前が Visual Basic のキーワードと同じ場合に役に立ちます。DLL プロシージャの名前が、パブリック変数、パブリック定数、または適用範囲内のほかのプロシージャの名前と同じ場合でも、Alias を使えます。また、Alias は、DLL の名前付け規則に合っていない文字が DLL プロシージャ名に含まれている場合にも使えます。
aliasname	省略可能です。DLL またはコード リソース内のプロシージャの名前を指定します。先頭の文字がシャープ記号 (#) でない場合、引数 aliasname には DLL 内で定義されているプロシージャのエントリ ポイント名を指定します。先頭の文字がシャープ記号 (#) の場合は、2 文字目以降の文字にはプロシージャのエントリ ポイントの序数を指定します。
arglist	省略可能です。プロシージャを呼び出すときに、プロシージャに渡す引数を表す変数のリストを指定します。
type	省略可能です。Function プロシージャの戻り値のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、バリアント型 (Variant)、ユーザー定義型、オブジェクト型のいずれかを指定できます。
引数 arglist は、次の形式で指定します。

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]

指定項目	内容
Optional	省略可能です。指定した引数が省略可能であることを示します。これを指定した場合は、引数 arglist 内のこれ以降の引数も省略可能でなければならず、すべてキーワード Optional を付けて宣言する必要があります。キーワード ParamArray を使う場合は、どの引数に対してもキーワード Optional は指定できません。
ByVal	省略可能です。その引数が、値渡しで渡されることを示します。
ByRef	その引数が、参照渡しで渡されることを示します。Visual Basic では、既定値はキーワード ByRef です。
ParamArray	省略可能です。引数 arglist の最後に指定する引数としてのみ指定でき、その引数がバリアント型の要素を持つ省略可能 (Optional) な配列であることを示します。キーワード ParamArray を使うと、任意の数の引数を渡すことができます。キーワード ParamArray は、ByVal、ByRef、Optional の各キーワードと共に使うことはできません
varname	必ず指定します。プロシージャに渡す引数を表す変数の名前を指定します。変数の標準的な名前付け規則に従って指定します。
( )	配列変数に対しては、必ず指定します。引数 varname が配列であることを示します。
type	省略可能です。プロシージャに渡す要素のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、オブジェクト型のいずれかを指定できます。
解説

Function プロシージャでは、プロシージャのデータ型が戻り値のデータ型になります。関数の戻り値のデータ型は、引数 arglist の後の As 節で指定します。引数 arglist 内では、As 節を使ってプロシージャに渡す引数のデータ型を指定できます。さらに、引数 arglist 内では、標準のデータ型以外に As Any も指定できます。Any を指定すると、データ型のチェックを抑止し、任意のデータ型をプロシージャに渡せます。

空のかっこは、Sub プロシージャまたは Function プロシージャに引数がないことを示し、プロシージャには何も渡されません。次の例では、Sub プロシージャ First には引数がありません。引数を指定して First を呼び出すと、エラーが発生します。

Declare Sub First Lib "MyLib" ()

引数リストを指定すると、プロシージャが呼び出されるたびに引数の個数とデータ型がチェックされます。次の例では、Sub プロシージャ First は長整数型 (Long) の引数を 1 つ受け取ります。

Declare Sub First Lib "MyLib" (X As Long)

メモ   Declare ステートメントの引数リストに固定長文字列を指定することはできません。プロシージャに渡せるのは可変長文字列だけです。プロシージャの引数として固定長文字列を指定すること自体は可能ですが、その固定長文字列は、プロシージャに渡される前に可変長文字列に変換されます。

メモ   値が 0 の文字列を必要とする外部プロシージャを呼び出す場合は、定数 vbNullString を使います。値が 0 の文字列は、長さ 0 の文字列 ("") とは異なります。


Deftype ステートメント

変数、プロシージャに渡す引数、および Function プロシージャや Property Get プロシージャの戻り値について、指定した文字で始まる名前に対する既定のデータ型を設定します。このステートメントは、モジュール レベルで使えます。

構文

DefBool letterrange[, letterrange] . . .

DefByte letterrange[, letterrange] . . .

DefInt letterrange[, letterrange] . . .

DefLng letterrange[, letterrange] . . .

DefCur letterrange[, letterrange] . . .

DefSng letterrange[, letterrange] . . .

DefDbl letterrange[, letterrange] . . .

DefDec letterrange[, letterrange] . . .

DefDate letterrange[, letterrange] . . .

DefStr letterrange[, letterrange] . . .

DefObj letterrange[, letterrange] . . .

DefVar letterrange[, letterrange] . . .

必須の引数 letterrange の指定形式は次のとおりです。

letter1[-letter2]

既定のデータ型が適用される名前の頭文字の範囲を、引数 letter1 から引数 letter2 の範囲に設定します。両引数の値は、変数名、引数名、Function プロシージャ名、または Property Get プロシージャ名の頭文字に適用されます。任意の英字を指定できます。また、大文字と小文字の区別はありません。

解説

各ステートメント名が適用されるデータ型を次に示します。

ステートメント	データ型
DefBool	ブール型 (Boolean)
DefByte	バイト型 (Byte)
DefInt	整数型 (Integer)
DefLng	長整数型 (Long)
DefCur	通貨型 (Currency)
DefSng	単精度浮動小数点数型 (Single)
DefDbl	倍精度浮動小数点数型 (Double)
DefDec	10 進型 (Decimal) (現在はサポートされていません)
DefDate	日付型 (Date)
DefStr	文字列型 (String)
DefObj	オブジェクト型 (Object)
DefVar	バリアント型 (Variant)
たとえば、次のコードでは、Message は文字列型の変数になります。

DefStr A-Q

. . .

Message = "Out of stack space."

Deftype ステートメントは、Deftype ステートメントを記述したモジュール内でのみ有効です。たとえば、あるモジュールに記述した DefInt ステートメントは、そのモジュールで宣言されている変数、プロシージャへの引数、Function プロシージャおよび Property Get プロシージャの戻り値の型に対してのみ有効で、ほかのモジュールで宣言されている変数、引数、戻り値の型には適用されません。Deftype ステートメントを用いて明示的に宣言しない場合には、変数、引数、Function プロシージャ、および Property Get プロシージャのデータ型の既定値は、バリアント型 (Variant) になります。

データ型を適用する文字の範囲を指定すると、通常、文字セットの最初の 128 文字のいずれかが頭文字として使われている変数にデータ型が定義されます。ただし、文字の範囲に A-Z を指定した場合は、文字コードの拡張部分 (128-255) から構成される各種言語の文字で始まる変数も含め、すべての変数に対して指定した既定のデータ型が設定されます。

範囲に A-Z を指定すると、Deftype ステートメントを使ってさらにほかの変数の範囲を定義することはできなくなります。ある範囲を指定した後で、既に指定されている文字を含む範囲を別の Deftype ステートメントで指定すると、エラーが発生します。ただし、Dim ステートメントの As type 節でデータ型を使えば、定義済みの変数であってもなくても、明示的にデータ型を指定できます。たとえば、次のコードをモジュール レベルで記述すれば、既定のデータ型が整数型 (Integer) に指定されている変数 TaxRate でも、明示的に倍精度浮動小数点数型 (Double) として定義できます。

DefInt A-Z

Dim TaxRate As Double

ユーザー定義型の要素は、データ型を明示的に宣言しなければならないため、Deftype ステートメントの設定は適用されません。


Dim ステートメント

変数を宣言し、メモリ領域を割り当てます。

構文

Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .

Dim ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
WithEvents	省略可能です。引数 varname が ActiveX オブジェクトによって起動されるイベントへの対応に使われるオブジェクト変数であることを示すキーワードです。クラス モジュール内でのみ有効です。キーワード WithEvents を使用して任意の数の変数を個別に宣言できます。ただし、配列は作成できません。また、キーワード New はキーワード WithEvents と共には使用できません。
varname	必ず指定します。定義する変数の名前を指定します。変数の標準的な名前付け規則に従って指定します。
subscripts	省略可能です。配列変数の次元を指定します。指定できる次元数の最大値は 60 です。引数 subscripts の構文は次のとおりです。
	[lower To] upper [, [lower To] upper] . . .
	引数 lower を省略した場合、配列のインデックス番号の最小値は Option Base ステートメントによって決まります。Option Base ステートメントが記述されていない場合、インデックス番号の最小値は 0 になります。
New	省略可能です。このキーワードを指定すると、オブジェクトを暗黙的に作成できます。オブジェクト変数を宣言するときにキーワード New を指定した場合は、オブジェクトを最初に参照したときにオブジェクトの新しいインスタンスが作成されるので、Set ステートメントを使ってオブジェクトへの参照を代入する必要はありません。キーワード New を使って、固有のデータ型の変数の宣言、または従属オブジェクトのインスタンスの宣言はできません。また、キーワード New は、キーワード WithEvents と共に使用できません。
type	省略可能です。変数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長の場合)、固定長の場合は String * length、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、オブジェクト型のいずれかを指定できます。As type 節は宣言する各変数に対して個別に指定します。
解説

Dim ステートメントを使ってモジュール レベルで宣言された変数は、宣言したモジュール内のすべてのプロシージャから参照できます。プロシージャ レベルで宣言した変数は、宣言したプロシージャ内でのみ参照できます。

変数のデータ型を宣言するには、モジュール レベルまたはプロシージャ レベルで Dim ステートメントを記述します。次の例では、整数型 (Integer) の変数を宣言しています。

Dim NumberOfEmployees As Integer

Dim ステートメントは、変数のオブジェクトの種類を宣言するときにも使います。次の例では、ワークシートの新しいインスタンスを表す変数を宣言しています。

Dim X As New Worksheet

オブジェクト変数を宣言するときにキーワード New を指定しない場合は、オブジェクトを参照する変数を使用する前に、Set ステートメントを使用して変数に既存のオブジェクトを代入する必要があります。オブジェクトが代入されるまで、宣言されたオブジェクト変数には Nothing という特殊な値が設定されます。この値は、変数がオブジェクトの特定のインスタンスを参照していないことを示します。

Dim ステートメントで空のかっこを使うと、動的配列を宣言できます。宣言した後で、動的配列の次元と要素の数をプロシージャ内で定義するには、ReDim ステートメントを使います。ただし、Private ステートメント、Public ステートメント、または Dim ステートメントで明示的にサイズを指定した配列変数の次元を再び宣言しようとすると、エラーが発生します。

データ型やオブジェクトの種類の指定がなく、さらにモジュール内で Deftype ステートメントが記述されていない場合、変数は既定のバリアント型 (Variant) になります。

変数の初期化では、数値変数は 0、可変長文字列は長さ 0 の文字列 ("") が設定されて、固定長文字列には 0 が埋められます。また、バリアント型変数は Empty 値に初期化されます。ユーザー定義型変数の各要素は、個別の変数として初期化されます。

メモ   プロシージャ内で Dim ステートメントを使用する場合は、通常、Dim ステートメントをプロシージャの最初で記述します。


Enum ステートメント

列挙型 (Enum) を宣言します。

構文

 [Public | Private] Enum name

membername [= constantexpression]

membername [= constantexpression]

. . .

End Enum

Enum ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。列挙型 (Enum) が、プロジェクト全体から参照可能であることを指定します。列挙型の既定値は、Public です。
Private	省略可能です。列挙型 (Enum) が、宣言されているモジュール内でのみ参照可能であることを指定します。
name	必ず指定します。列挙型 (Enum) の名前を指定します。引数 name は Visual Basic において有効な識別子でなければなりません。この名前は、列挙型の変数またはパラメータの宣言において、データ型として指定されます。
membername	必ず指定します。定数の名前を指定する Visual Basic において有効な識別子です。この名前により、列挙型 (Enum) の構成要素であることが認識されます。
constantexpression	省略可能です。長整数型 (Long) として評価される、要素の値を指定します。ほかの列挙型 (Enum) と同じ値も指定できます。先頭の membername に対して引数 constantexpression を指定しないと、0 が割り当てられます。2 番目以降の membername に対して引数 constantexpression を指定しないと、直前の membername の値より 1 だけ大きな値が割り当てられます。
解説

列挙変数は、列挙型 (Enum) を用いて宣言する変数です。変数とパラメータのどちらも、列挙型で宣言できます。列挙型の要素は、Enum ステートメントにおいて指定された定数値に初期化されます。割り当てられた値は、実行時には変更できません。正の値でも、負の値でも設定できます。次は、列挙型の使用例です。

Enum SecurityLevel

IllegalEntry = -1

SecurityLevel1 = 0

SecurityLevel2 = 1

End Enum

Enum ステートメントは、モジュール レベルでのみ記述できます。列挙型 (Enum) が宣言されると、その列挙型を使って、変数、パラメータ、または列挙型を返すプロシージャを宣言できます。列挙型の名前は、モジュール名では修飾できません。クラス モジュール内のパブリックな列挙型 (Public Enum) は、クラスのメンバではありません。ただし、それらはタイプ ライブラリに書き込まれます。標準モジュールにおいて定義された列挙型 (Enum) は、タイプ ライブラリには書き込まれません。同じ名前のパブリックな列挙型 (Public Enum) は同じ名前空間を共有するので、このような列挙型は標準モジュールとクラス モジュールでは定義できません。異なる種類のライブラリの中の 2 つの列挙型 (Enum) に同じ名前が付けられていて、その要素が異なる場合、その型の変数への参照においてどちらの列挙型が使われるかは、その参照においてどちらの種類のライブラリが高い優先順位を持つかで決まります。

列挙型 (Enum) は、With ブロックの対象としては使えません。


Erase ステートメント

固定サイズの配列の場合は要素を再初期化し、動的配列の場合は割り当てたメモリを解放します。

構文

Erase arraylist

必須の引数 arraylist には、消去する配列変数を指定します。複数指定する場合は、カンマ (,) で区切ります。

解説

配列が固定サイズの配列 (通常の配列) であるか、または動的配列であるかによって、Erase ステートメントの動作は異なります。固定サイズの配列の場合、Erase ステートメントはメモリを解放しません。固定配列の要素は、次のように設定されます。

配列の型	Erase ステートメントの実行結果
静的数値配列	要素はすべて 0 に設定されます。
静的文字列配列 (可変長)	要素はすべて長さ 0 の文字列 ("") に設定されます。
静的文字列配列 (固定長)	要素はすべて 0 に設定されます。
静的バリアント型 (Variant) 配列	要素はすべて Empty 値に設定されます。
ユーザー定義型配列	各要素は、別個の変数として設定されます。
オブジェクト配列	要素はすべて特別な値 Nothing に設定されます。
Erase ステートメントは、動的配列が使っていたメモリを解放します。プログラムでこの配列を再度参照するには、ReDim ステートメントを使って、再びこの配列変数の次元を宣言する必要があります。


Event ステートメント

ユーザー定義のイベントを宣言します。

構文

[Public] Event procedurename [(arglist)]

Event ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。宣言したイベントが、プロジェクト全体から参照可能であることを指定します。イベントの種類の既定値は、パブリック (Public) です。イベントを発生させられるのは、イベントを宣言したモジュールの中だけです。
procedurename	必ず指定します。イベントの名前です。標準的な変数の名前付け規則に従って指定します。
引数 arglist は、次の形式で指定します。

[ByVal | ByRef] varname[( )] [As type]

指定項目	内容
ByVal	省略可能です。その引数が、値渡しで渡されることを示します。
ByRef	省略可能です。その引数が、参照渡しで渡されることを示します。Visual Basic では、既定値はキーワード ByRef です。
varname	必ず指定します。プロシージャに渡す引数を表す変数の名前を指定します。変数の標準的な名前付け規則に従って指定します。
type	省略可能です。プロシージャに渡す引数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長の場合のみ)、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、またはオブジェクトの種類を指定できます。
解説

イベントが宣言されると、RaiseEvent ステートメントを使って、イベントを発行できます。標準モジュール内で Event ステートメントを記述すると、構文エラーになります。イベントには、戻り値は指定できません。次のコード例は、イベントの標準的な宣言と発行の方法です。

' クラス モジュールのモジュール レベルにおいて、イベントを宣言します。

Event LogonCompleted (UserName as String)

Sub

RaiseEvent LogonCompleted("AntoineJan")

End Sub


Function ステートメント

Function プロシージャの名前、引数、および本体部分を構成するコードを宣言します。

構文

[Public | Private | Friend] [Static] Function name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]

End Function

Function ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。すべてのモジュールのすべてのプロシージャから参照できる Function プロシージャを宣言するときに指定します。Option Private ステートメントが記述されているモジュール内で使用した場合、その Function プロシージャは、プロジェクトの外からは参照できません。
Private	省略可能です。Function プロシージャを記述したモジュール内のほかのプロシージャからのみ参照できるプロシージャを宣言するときに指定します。
Friend	省略可能です。クラス モジュール内でのみ使用できます。このキーワードを指定した Function プロシージャは、プロジェクト全体から参照できますが、オブジェクトのインスタンスのコントローラからは参照できません。
Static	省略可能です。Function プロシージャ内のローカル変数が、次に呼び出されるまで保持されることを示します。Function プロシージャの外部で宣言された変数は、Function プロシージャの中で使われている場合でも、Static による影響は受けません。
name	必ず指定します。定義する Function プロシージャの名前を指定します。変数の標準的な名前付け規則に従って指定します。
arglist	省略可能です。Function プロシージャを呼び出すときに渡す引数を表す変数のリストを指定します。複数の変数を指定するときは、カンマ (,) で区切ります。
type	省略可能です。Function プロシージャから返る値のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant)、または任意のユーザー定義型のいずれかを指定できます。
statements	省略可能です。Function プロシージャ内で実行される一連のステートメントを指定します。
expression	省略可能です。Function プロシージャの戻り値を指定します。
引数 arglist は、次の形式で指定します。

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

指定項目	内容
Optional	省略可能です。指定した引数が省略可能であることを示します。このキーワードを指定した場合、引数 arglist のそれ以降の引数も省略可能でなければならず、すべてキーワード Optional を付けて宣言する必要があります。キーワード ParamArray を使った場合は、どの引数に対してもキーワード Optional は指定できません。
ByVal	省略可能です。その引数が、値渡しで渡されることを示します。
ByRef	省略可能です。その引数が、参照渡しで渡されることを示します。Visual Basic では、既定値は ByRef です。
ParamArray	省略可能です。引数 arglist の最後の引数でのみ使用できます。その引数がバリアント型 (Variant) の要素を持つ省略可能 (Optional) な 配列であることを示します。キーワード ParamArray を使うと、任意の数の引数を渡すことができます。ByVal、ByRef、Optional の各キーワードと共に使うことはできません。
varname	必ず指定します。引数を表す変数名を指定します。変数の標準的な名前付け規則に従って指定します。
type	省略可能です。プロシージャに渡す引数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant) のいずれかを指定できます。パラメータにキーワード Optional が指定されていない場合は、ユーザー定義型またはオブジェクトの種類を指定することもできます。
defaultvalue	省略可能です。任意の定数または定数式を指定します。キーワード Optional を指定したパラメータに対してのみ有効です。データ型がオブジェクト型 (Object) の場合、明示的な既定値は Nothing だけです。
解説

キーワード Public、キーワード Private、またはキーワード Friend を指定しない場合、Function プロシージャはパブリックが既定値になります。キーワード Static を指定しない場合、ローカル変数の値は Function プロシージャの実行が終了すると破棄されます。キーワード Friend は、クラス モジュール内でのみ使えます。ただし、Friend を指定したプロシージャは、プロジェクト内のすべてのモジュールのプロシージャから呼び出せます。Friend を指定したプロシージャは、親クラスのタイプ ライブラリには書き込まれません。また、実行時バインディングは行えません。

メモ   Function プロシージャは、再帰的な使用、つまり、ある機能を実行するためにプロシージャ自体を呼び出すことができます。ただし、再帰呼び出しを行うと、スタックがオーバーフローする可能性があります。通常、キーワード Static は、再帰的な Function プロシージャでは使いません。

実行可能なコードは、すべてプロシージャ内に記述する必要があります。Function プロシージャは、ほかの Function プロシージャ、Sub プロシージャ、Property プロシージャの中では、定義できません。

Exit Function ステートメントは、Function プロシージャを直ちに終了します。プログラムの実行は、その Function プロシージャを呼び出したステートメントの次のステートメントから継続されます。Exit Function ステートメントは、Function プロシージャ内の任意の場所で必要に応じていくつでも指定できます。

Sub プロシージャと同様に、Function プロシージャは、引数を受け取り、一連のステートメントを実行して、引数の値を変更します。ただし、Sub プロシージャとは異なり、Function プロシージャは、Sqr、Cos、Chr などの組み込み関数と同じように、式の右辺に記述して、関数の戻り値を使うことができます。

式の中で Function プロシージャを呼び出すには、関数名の後にかっこで囲んだ引数リストを付けて使います。Function プロシージャを呼び出す方法については、Call ステートメントを参照してください。

Function プロシージャから値を返すには、値を Function プロシージャ名に代入します。プロシージャ名には、Function プロシージャ内の任意の場所で、必要に応じて何回でも値を代入できます。プロシージャ名 name に値を代入しない場合、既定の戻り値が返されます。既定の戻り値は、Function プロシージャが数値型の場合は 0、文字列型の場合は長さ 0 の文字列 ("")、バリアント型の場合は Empty 値です。オブジェクトへの参照を返す Function プロシージャでは、プロシージャ内で Set ステートメントを使ってプロシージャ名 name にオブジェクトへの参照を代入しない場合は、Nothing が返されます。

次の例では、BinarySearch という名前の Function プロシージャに戻り値を代入しています。ここでは、値が見つからなかったことを示す偽 (False) をプロシージャ名に代入しています。

Function BinarySearch(. . .) As Boolean

. . .

' 値が見つからないときは偽 (False) を返します。

If lower > upper Then

BinarySearch = False

Exit Function

End If

. . .

End Function

Function プロシージャで使う変数には、Function プロシージャ内で明示的に宣言される変数と、それ以外の変数の 2 種類があります。プロシージャ内で Dim などのステートメントで明示的に宣言された変数 (ローカル変数) は、そのプロシージャの中だけで有効です。プロシージャ内で明示的に宣言されていない変数も、そのプロシージャの外部のさらに上のレベルで明示的に宣言されていない限り、ローカル変数となります。

メモ   プロシージャ内で明示的に宣言されていない変数をプロシージャ内で使うことは可能ですが、その変数と同じ名前の変数などがモジュール レベルで定義されている場合、名前の競合が発生します。あるプロシージャから、ほかのプロシージャ、定数または変数のいずれかと同じ名前を持つ未宣言の変数を参照した場合、そのモジュール レベルの名前を参照しているものと見なされます。変数を明示的に宣言すれば、このような名前の競合は避けられます。Option Explicit ステートメントを使うと、変数の明示的な宣言が強制されます。

メモ   Visual Basic では、演算効率を高めるために数式が自動的に並べ替えられることがあります。数式の中で使用している変数の値を変えてしまうような Function プロシージャは、同じ数式の中で実行しないようにしてください。


GetObject 関数

ファイルから取得した ActiveX オブジェクトへの参照を返します。

構文

GetObject([pathname] [, class])

GetObject 関数の呼び出しでは、次の名前付き引数を指定します。

指定項目	内容
pathname	省略可能です。バリアント型 (内部処理形式 String の Variant) の値を指定します。取得するオブジェクトが含まれているファイルの絶対パスとファイル名を指定します。pathname を省略する場合は、class を必ず指定する必要があります。
class	省略可能です。バリアント型 (内部処理形式 String の Variant) の値を指定します。オブジェクトのクラスを表す文字列を指定します。
引数 class は、appname.objecttype の形式で指定します。

指定項目	内容
appname	必ず指定します。バリアント型 (内部処理形式 String の Variant) の値を指定します。オブジェクトを提供するアプリケーションの名前を指定します。
objecttype	必ず指定します。バリアント型 (内部処理形式 String の Variant) の値を指定します。作成するオブジェクトの種類またはクラスを指定します。
解説

ファイルから取得した ActiveX オブジェクトにアクセスし、取得したオブジェクトへの参照をオブジェクト変数に代入するには、GetObject 関数を使います。GetObject 関数で取得したオブジェクトをオブジェクト変数に代入するには、Set ステートメントを使います。次に例を示します。

Dim CADObject As Object

Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

このコードを実行すると、引数 pathname に指定したファイルに関連付けられているアプリケーションが起動されて、指定したファイル内のオブジェクトがアクティブになります。

引数 pathname に長さ 0 の文字列 ("") を指定すると、GetObject 関数は、指定した種類の新しいオブジェクト インスタンスを返します。引数 pathname を省略すると、GetObject 関数は、指定した種類で現在アクティブになっているオブジェクトを返します。指定した種類のオブジェクトが存在しない場合は、エラーが発生します。

ファイルの一部をアクティブにできるアプリケーションもあります。ファイルの一部をアクティブにするには、ファイル名の後に感嘆符 (!) を付け、アクティブにする部分を表す文字列をその後に指定します。この文字列の指定方法に関する詳細については、そのオブジェクトを作成するアプリケーションのマニュアルを参照してください。

たとえば、描画アプリケーションでは、1 つのファイルに格納されている描画が、複数の階層に分かれていることがあります。その場合、次のように記述すると、SCHEMA.CAD という描画ファイル内の 1 つの階層をアクティブにできます。

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

引数 class でオブジェクトのクラスを指定しない場合、オートメーションが、指定したファイル名に基づいて、起動するアプリケーションおよびアクティブにするオブジェクトを決めます。ただし、ファイルによっては、複数のオブジェクトのクラスがサポートされています。たとえば、ある描画アプリケーションでは、3 つの異なる種類のオブジェクト、Application オブジェクト、Drawing オブジェクト、および Toolbar オブジェクトがサポートされていて、どのオブジェクトも同じファイル内にあるものと仮定します。このような場合、ファイル内でアクティブにするオブジェクトを指定するには、省略可能な引数 class を使います。次に例を示します。

Dim MyObject As Object

Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

この例では、FIGMENT は描画アプリケーションの名前で、DRAWING は FIGMENT がサポートしているオブジェクトの種類の 1 つです。

オブジェクトがアクティブになれば、定義したオブジェクト変数を使って、そのオブジェクトを参照できます。上の例の場合、オブジェクト変数 MyObject を使って、アクティブになったオブジェクトのプロパティやメソッドにアクセスできます。次に例を示します。

MyObject.Line 9, 90

MyObject.InsertText 9, 100, "Hello, world."

MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

メモ   オブジェクトにカレント インスタンスがある場合、または、既に読み込まれたファイルを使ってオブジェクトを作成する場合は、GetObject 関数を使います。カレント インスタンスがなく、ロードされたファイルを使ってオブジェクトを作成しない場合は、CreateObject 関数を使います。

複数のインスタンスを作成できないオブジェクトの場合は、CreateObject 関数を繰り返し実行しても、そのオブジェクトのインスタンスは 1 つしか作成されません。また、単一インスタンス オブジェクトの場合、長さ 0 の文字列 ("") を指定して GetObject 関数を呼び出すと、常に同じインスタンスが返り、引数 pathname を省略すると、エラーが発生します。GetObject 関数では、Visual Basic が作成するクラスを参照できません。


Implements ステートメント

クラス モジュール内にインプリメントされるインターフェイスまたはクラスを指定します。

構文

Implements [InterfaceName | Class]

必ず指定する引数 InterfaceName または Class には、タイプ ライブラリ内のインターフェイスまたはクラスの名前を指定します。このインターフェイスまたはクラスのメソッドは、Visual Basic クラスの対応するメソッドにインプリメントされます。

解説

インターフェイスとは、そのインターフェイスがカプセル化するメンバ (メソッドとプロパティ) のプロトタイプの集合です。つまり、インターフェイスには、メンバ プロシージャの定義だけが含まれています。一方、クラスには、インターフェイスが定義するメソッドやプロパティを実際にインプリメントするためのコードが記述されています。クラスには既定のインターフェイスが含まれているので、すべてのクラスは少なくとも 1 つ以上のインターフェイスをインプリメントします。特に明示的な指定がない場合、クラスに記述されたコードは、そのクラスの既定のインターフェイス メンバとして解釈されます。

Implements ステートメントは、そのクラスが既定のインターフェイス以外のインターフェイスをインプリメントすることを宣言します。Implements ステートメントで宣言することにより、指定したインターフェイスのメンバを Visual Basic クラスでインプリメントすることができます。また、クラスの QueryInterface は、Implements ステートメントで指定されたインターフェイス ID を許諾し、クラス内にインプリメントされたメンバをマッピングした VTable を返します。

メモ   Visual Basic では、派生クラスまたは派生インターフェイスをインプリメントできません。

インターフェイスまたはクラスをインプリメントする場合、それに含まれるすべてのメンバを含めなければ鳴らない点に注意してください。インプリメントするクラス内に、コードのないプロシージャが 1 つでもあると、対応するエラー (Const E_NOTIMPL = &H80004001) が発生します。

また、Implements ステートメントは、標準モジュールには記述できません。


LBound 関数

配列の指定された次元で使用できる最小の添字を、長整数型 (Long)の値で返します。

構文

LBound(arrayname[, dimension])

LBound 関数の構文は、次の指定項目から構成されます。

指定項目	内容
arrayname	必ず指定します。配列変数の名前です。変数の標準的な名前付け規則に従って指定します。
dimension	省略可能です。バリアント型 (内部処理形式 Long の Variant) の値を指定します。添字の最小値を調べる対象となる配列の次元を示す整数を指定します。最初の次元なら 1、2 番目の次元なら 2、というように指定します。引数 dimension を省略すると、1 が指定されたものと見なされます。
解説

LBound 関数は、UBound 関数と組み合わせて、配列のサイズを調べるために使います。配列の添字の最大値を調べるには、UBound 関数を使います。

次のような配列が宣言されている場合、LBound 関数からは下の表のような値が返ります。

Dim A(1 To 100, 0 To 3, -3 To 4)

ステートメント	戻り値
LBound(A, 1)	1
LBound(A, 2)	0
LBound(A, 3)	-3
配列の添字の最小値の既定値は、0 または 1 です。この値は、Option Base ステートメントの設定によって決まります。Array 関数で作成された配列の添字は、0 から始まり、Option Base ステートメントの影響は受けません。

Dim、Private、Public、ReDim、Static のいずれかのステートメントで To 節を使って配列の次元を設定すると、添字の最小値に任意の整数値を指定できます。


Let ステートメント

式の値を、変数またはプロパティに代入します。

構文

[Let] varname = expression

Let ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Let	省略可能です。キーワード Let を明示的に使用するかどうかは表記上の問題であり、通常は省略します。
varname	必ず指定します。変数またはプロパティの名前です。変数の標準的な名前付け規則に従って指定します。
expression	必ず指定します。変数またはプロパティに代入する値を指定します。
解説

変数やプロパティに式を代入できるのは、その式が返す値が変数やプロパティのデータ型と一致する場合だけです。文字列式を数値変数に代入したり、数式を文字列変数に代入することはできません。異なるデータ型間で値を代入すると、コンパイル時にエラーが発生します。

バリアント型 (Variant) の変数には、文字列式でも数式でも代入できますが、その逆は必ずしも当てはまりません。文字列変数には、Null 値以外ならどのようなバリアント型でも代入できますが、数値変数には、数値として解釈可能な値が格納されたバリアント型しか代入できません。数値に変換できるバリアント型かどうかを調べるには、IsNumeric 関数を使います。

メモ   ある数値型の式を別の数値型の変数に代入すると、式の値は代入先の変数の数値型に強制的に変換されます。

Let ステートメントを使って、レコード変数同士の代入もできますが、両方の変数は、同じユーザー定義型である必要があります。異なるユーザー定義型の変数を代入するには、LSet ステートメントを使います。オブジェクトの参照を変数に代入するには、Set ステートメントを使います。


Option Base ステートメント

配列の添字の最小値の既定値を設定します。モジュール レベルで使用します。

構文

Option Base {0 | 1}

解説

添字の既定の最小値は 0 なので、Option Base ステートメントは必ずしも必要ではありません。Option Base ステートメントを使用する場合は、このステートメントをモジュール内のどのプロシージャよりも前に記述する必要があります。Option Base ステートメントは、モジュール内で一度だけ、次元を含む配列の宣言よりも前に記述します。

メモ   Dim、Private、Public、ReDim、Static などの各ステートメントで To 節を使うと、より柔軟に配列の添字の範囲を設定できます。ただし、To 節で配列の添字の最小値を明示的に設定しない場合は、Option Base ステートメントを使って既定の最小値を 1 に設定できます。Array 関数またはキーワード ParamArray を使って作成する配列の添字の最小値は 0 です。Option Base ステートメントは、Array 関数またはキーワード ParamArray に影響を与えません。

Option Base ステートメントの設定が有効になるのは、ステートメントが記述されているモジュール内の配列の添字の最小値のみです。


Option Compare ステートメント

文字列データの既定の比較方法を設定します。モジュール レベルで使います。

構文

Option Compare {Binary | Text | Database}

解説

Option Compare ステートメントを使う場合は、モジュール内のどのプロシージャよりも前に記述する必要があります。

Option Compare ステートメントは、モジュール内での文字列の比較方法 (Binary モード、Text モード、または Database モード) を指定するものです。Option Compare ステートメントが記述されていないモジュールでは、既定の文字列比較方法である Binary モードが使われます。

Binary モードでは、文字列比較の並べ替え順序は、バイナリ文字コードのコード順によって行われます。Microsoft WIndows 版 Visual Basicでは 、文字コードは Unicode で表現されるので、結果は Unicode のコード順によって決まります。Binary モードでの並べ替えの例を次に示します。(ただし、バージョン4.0 以前の Windows 16bit 版  Visual Basic、または Macintosh 版 Visual Basic では、文字コードはシフト JISで表現されていたため、結果が異なる場合があります。)

"*" < "a" < "z" < "あ" < "ん" < "ア" < "ン" < "亜" < "＊" < "Ａ" < "ｱ" < "ﾝ"

Text モードでは、文字列比較は、オペレーティング システムの国別情報の設定で決まります。日本語/日本の場合は、50 音順で、大文字と小文字、文字幅、カタカナとひらがなを区別しない並べ替え順になります。Text モードでの並べ替えの例を次に示します。

(*=＊) < (0=０) < (9=９) < (A=a=Ａ=ａ) < (B=b=Ｂ=ｂ) < (ｱ=ア=あ) < (ﾝ=ン=ん) < 亜

Database モードは、Microsoft Access でのみ使用できます。このモードの文字列比較の並べ替え順序は、データベースの文字列比較に適用される国別の ID によって決まります。


Option Explicit ステートメント

モジュール内のすべての変数に対して、明示的な宣言を強制します。モジュール レベルで使用します。

構文

Option Explicit

解説

Option Explicit ステートメントを使う場合は、モジュール内のどのプロシージャよりも前に記述する必要があります。

モジュールで Option Explicit ステートメントを記述する場合、変数は、Dim、Private、Public、ReDim、Static などの各ステートメントで明示的に宣言する必要があります。宣言されていない変数名を使うと、コンパイル時にエラーが発生します。

Option Explicit ステートメントを使わない場合、Deftype ステートメントで既定のデータ型が指定されていないと、明示的に宣言されていない変数のデータ型は、すべてバリアント型 (Variant) になります。

メモ   Option Explicit ステートメントを利用して、既存の変数名の入力ミスや、変数の適用範囲 (スコープ) がわかりにくいコード内で変数名の競合を避けることができます。


Option Private ステートメント

複数のプロジェクト間で参照可能なホスト アプリケーションにおいて Option Private Module ステートメントを使うと、プロジェクトの外部からモジュールの内容が参照できなくなります。単独で Visual Basic を使用している場合など、外部からの参照を許可しないホスト アプリケーションでは、Option Private ステートメントは無効です。

構文

Option Private Module

解説

Option Private ステートメントを使用する場合、モジュール レベル内のどのプロシージャよりも前に記述します。

モジュールに Option Private Module ステートメントが含まれている場合でも、モジュール レベルで宣言されているパブリックな要素、たとえば、変数、オブジェクト、およびユーザー定義型は、モジュールを含むプロジェクト内で使用できます。ただし、ほかのアプリケーションまたはプロジェクトでは、使用できません。

メモ   Option Private ステートメントは、ホスト アプリケーションが、複数のプロジェクトの同時読み込みをサポートし、プロジェクト間での参照を許可している場合にのみ使用できます。たとえば、Microsoft Excel では、複数のプロジェクトの読み込みが可能で、Option Private Module ステートメントを使用してプロジェクト間の参照を制限できます。Visual Basic では、複数のプロジェクトの読み込みは可能ですが、プロジェクト間での参照は許可されていません。


Private ステートメント

プライベート変数を宣言し、メモリ領域を割り当てます。モジュール レベルで使用します。

構文

Private [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] . . .

Private ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
WithEvents	省略可能です。引数 varname が ActiveX オブジェクトによって起動されるイベントに対応するためのオブジェクト変数であることを指定するキーワードです。クラス モジュール内でのみ有効です。キーワード WithEvents を使用して任意の数の変数を個別に宣言できます。ただし、キーワード WithEvents では、配列は作成できません。また、キーワード New とキーワード WithEvents は一緒には使用できません。
varname	必ず指定します。宣言する変数の名前を指定します。変数の標準的な名前付け規則に従って指定します。
subscripts	省略可能です。配列変数の次元を指定します。指定できる次元数の最大値は 60 です。引数 subscripts の構文は、次のとおりです。
	[lower To] upper [,[lower To] upper] . . .
	引数 lower を省略した場合、配列の添字の最小値は Option Base ステートメントによって制御されます。Option Base ステートメントが記述されていなければ、添字の最小値は 0 になります。
New	省略可能です。このキーワードを指定すると、オブジェクトを暗黙的に作成できます。オブジェクト変数を宣言するときにキーワード New を指定すると、オブジェクトを最初に参照したときにオブジェクトの新しいインスタンスが作成されるので、Set ステートメントを使ってオブジェクトへの参照を代入する必要はありません。キーワード New を使用して固有のデータ型の変数を宣言したり、従属オブジェクトのインスタンスを宣言することはできません。また、キーワード WithEvents と共に使用することもできません。
type	省略可能です。変数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長文字列の場合)、String * length (固定長文字列の場合)、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、オブジェクトの種類のいずれかを指定できます。As type 節は宣言する各変数に対して個別に指定します。
解説

プライベート (Private) 変数は、宣言されたモジュール内でのみ参照できます。

変数のデータ型の宣言には、Private ステートメントを使います。次の例では、変数を整数型 (Integer) で宣言しています

Private NumberOfEmployees As Integer

Private ステートメントは、変数のオブジェクトの種類の宣言にも使います。次の例では、ワークシートの新しいインスタンスを表す変数を宣言しています。

Private X As New Worksheet

オブジェクト変数を宣言するときにキーワード New を指定しない場合は、オブジェクトを参照する変数を使用する前に、Set ステートメントを使用して変数に既存のオブジェクトを代入する必要があります。オブジェクト変数にオブジェクトが代入されるまで、その変数には Nothing という特殊な値が設定されます。Nothing は、その変数がオブジェクトの特定のインスタンスを参照していないことを示します。

データ型やオブジェクトの種類の指定がなく、さらにモジュール内で Deftype ステートメントが記述されていない場合、変数のデータ型は既定のバリアント型 (Variant) になります。

Private ステートメントで空のかっこを指定すると、動的配列を宣言できます。宣言した動的配列の次元と要素の数をプロシージャ内で定義するには、ReDim ステートメントを使います。ただし、Private ステートメント、Public ステートメント、または Dim ステートメントで明示的にサイズを指定した配列変数の次元を再び宣言しようとすると、エラーが発生します。

変数の初期化時に、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に初期化されて、固定長文字列は 0 で埋められます。また、バリアント型の変数は Empty 値に初期化されます。ユーザー定義型変数の各要素は、個別の変数として初期化されます。

メモ   プロシージャ内で Private ステートメントを使用する場合は、通常、Private ステートメントをプロシージャの最初に記述します。


Property Get ステートメント

Property プロシージャの名前、引数、および Property プロシージャの本体を構成するコードを宣言します。Property プロシージャを使ってプロパティの値を取得します。

構文

[Public | Private | Friend] [Static] Property Get name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Property]
[statements]
[name = expression]

End Property

Property Get ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。すべてのモジュールのすべてのプロシージャから参照できるプロシージャを宣言するときに指定します。Option Private ステートメントが記述されているモジュールの中で使用した場合、そのプロシージャは、プロジェクトの外からは参照できません。
Private	省略可能です。Property Get プロシージャを宣言したモジュール内でのみ参照できるプロシージャを宣言するときに、指定します。
Friend	省略可能です。クラス モジュール内でのみ使用できます。このキーワードを指定した Property Get プロシージャは、プロジェクト全体から参照できますが、オブジェクトのインスタンスのコントローラからは参照できません。
Static	省略可能です。Property Get プロシージャ内のローカル変数の内容が、次に呼び出されるまで保持されることを示します。Property Get プロシージャの外部で宣言された変数は、Property Get プロシージャの中で使われている場合でも、キーワード Static による影響は受けません。
name	必ず指定します。Property Get プロシージャの名前を指定します。変数の標準的な名前付け規則に従って指定します。ただし、同じモジュール内の Property Let プロシージャや Property Set プロシージャと同じ名前を使うことができます。
arglist	省略可能です。Property Get プロシージャを呼び出すときにプロシージャに渡す引数を表す変数のリストを、指定します。複数の引数を指定するときは、カンマ (,) で区切ります。Property Get プロシージャ内の各引数の名前とデータ型は、Property Let プロシージャが使われている場合には、その対応する各引数と一致している必要があります。
Type	省略可能です。Property Get プロシージャの戻り値のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、または配列.のいずれかを指定できます。 対応する Property Let プロシージャがある場合、Property Get プロシージャの戻り値のデータ型は、Property Let プロシージャの最後の引数 (指定されている引数が 1 つだけの場合はその引数) のデータ型と同じでなければなりません。この最後の引数は、式の右辺に記述されるプロパティに代入される値を定義するものです。
Statements	省略可能です。Property Get プロシージャ内で実行される一連のステートメントを指定します。
expression	省略可能です。Property Get ステートメントによって定義されるプロシージャから返るプロパティの値を指定します。
引数 arglist は、次の形式で指定します。

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

指定項目	内容
Optional	省略可能です。引数が省略可能であることを示します。キーワード Optional を指定した場合は、引数 arglist のそれ以降の引数も省略可能でなければならず、すべてキーワード Optional を付けて宣言する必要があります。
ByVal	省略可能です。その引数が、値渡しで渡されることを示します。
ByRef	省略可能です。その引数が、参照渡しで渡されることを示します。Visual Basic では、キーワード ByRef が既定値です。
ParamArray	省略可能です。引数 arglist の最後に指定する引数としてのみ使用でき、その引数がバリアント型の要素を持つ省略可能 (Optional) な配列であることを示します。キーワード ParamArray を使うと、任意の数の引数を渡すことができます。ByVal、ByRef、Optional の各キーワードと共に使うことはできません。
varname	必ず指定します。引数を表す変数の名前です。変数の標準的な名前付け規則に従って指定します。
type	省略可能です。プロシージャに渡す引数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません。)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant) のいずれかを指定できます。パラメータにキーワード Optional が指定されていない場合は、ユーザー定義型またはオブジェクトの種類も指定できます。
defaultvalue	省略可能です。任意の定数または定数式を指定します。キーワード Optional を指定したパラメータに対してのみ有効です。データ型がオブジェクト型 (Object) の場合、明示的な既定値は Nothing だけです。
解説

キーワード Public、Private、または Friend を指定しない場合、Property プロシージャは、既定のパブリック プロシージャになります。キーワード Static を指定しない場合、ローカル変数の値は、Property プロシージャの実行が終了すると破棄されます。キーワード Friend は、クラス モジュール内でのみ使えます。ただし、Friend を指定したプロシージャは、プロジェクト内のすべてのモジュールのプロシージャから呼び出せます。Friend を指定したプロシージャは、親クラスのタイプ ライブラリには書き込まれません。また、実行時バインディングは行えません。

実行可能なコードは、すべてプロシージャ内に記述する必要があります。また、Property Get プロシージャをほかの Property プロシージャ、Sub プロシージャ、Function プロシージャの中で定義することはできません。

Exit Property ステートメントは、Property Get プロシージャを直ちに終了させます。プログラムの実行は、その Property Get プロシージャを呼び出したステートメントの次のステートメントから続行されます。Exit Property ステートメントは、Property Get プロシージャ内の任意の場所に、必要に応じていくつでも記述できます。

Sub プロシージャおよび Property Let プロシージャと同様に、Property Get プロシージャは、引数を受け取り、一連のステートメントを実行して、引数の値を変更できる独立したプロシージャです。ただし、Sub プロシージャまたは Property Let プロシージャとは異なり、Property Get プロシージャは、プロパティの値を返す必要がある場合、Function プロシージャやプロパティ名と同じように式の右辺に記述できます。


Property Let ステートメント

Property Let プロシージャの名前、引数、およびプロシージャの本体を構成するコードを宣言します。Property Let プロシージャは、プロパティに値を設定します。

構文

[Public | Private | Friend] [Static] Property Let name ([arglist,] value)
[statements]
[Exit Property]
[statements]

End Property

Property Let ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。すべてのモジュールのすべてのプロシージャから参照できるプロシージャを宣言するときに指定します。Option Private ステートメントが記述されているモジュールの中で使用した場合、その Property Let プロシージャは、プロジェクトの外からは参照できません。
Private	省略可能です。Property Let プロシージャを記述したモジュール内のプロシージャからのみ参照できるプロシージャを宣言するときに指定します。
Friend	省略可能です。クラス モジュール内でのみ使用できます。このキーワードを指定した Property Let プロシージャは、プロジェクト全体から参照できますが、オブジェクトのインスタンスのコントローラからは参照できません。
Static	省略可能です。Property Let プロシージャ内のローカル変数が、次に呼び出されるまで保持されることを示します。Property Let プロシージャの外部で宣言された変数は、Property Let プロシージャの中で使われている場合でも、キーワード Static によって影響を受けることはありません。
name	必ず指定します。Property Let プロシージャの名前を指定します。変数の標準的な名前付け規則に従って指定します。ただし、同じモジュール内の Property Get プロシージャや Property Set プロシージャと同じ名前を使うことができます。
arglist	必ず指定します。Property Let プロシージャを呼び出すときにプロシージャに渡す引数を表す変数のリストを、指定します。複数の引数を指定するときは、カンマ (,) で区切ります。Property Let プロシージャ内の各引数の名前とデータ型は、Property Get プロシージャの対応する各引数と一致していなければなりません。
value	必ず指定します。プロパティに代入する値を持つ変数を指定します。プロシージャを呼び出す場合、呼び出す式の右辺にこの引数を記述します。引数 value のデータ型は、対応する Property Get プロシージャの戻り値のデータ型と一致していなければなりません。
statements	省略可能です。Property Let プロシージャ内で実行される一連のステートメントを指定します。
引数 arglist は、次の形式で指定します。

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

指定項目	内容
Optional	省略可能です。引数が省略可能であることを示します。キーワード Optional を指定した場合は、引数 arglist のそれ以降の引数も省略可能でなければならず、すべてキーワード Optional を付けて宣言する必要があります。Property Let ステートメントの式の右辺には、キーワード Optional を指定できません。
ByVal	省略可能です。その引数が、値渡しで渡されることを示します。
ByRef	省略可能です。その引数が、参照渡しで渡されることを示します。Visual Basic では、キーワード ByRef が既定値です。
ParamArray	省略可能です。引数 arglist の最後に指定する引数としてのみ使用でき、その引数がバリアント型 (Variant) の要素を持つ省略可能 (Optional) な 配列であることを示します。キーワード ParamArray を使うと、任意の数の引数を渡すことができます。ByVal、ByRef、Optional の各キーワードと共に使うことはできません。
varname	必ず指定します。Property Let プロシージャに渡す引数を表す変数の名前を指定します。変数の標準的な名前付け規則に従って指定します。
type	省略可能です。プロシージャに渡す引数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant) のいずれかを指定できます。パラメータにキーワード Optional が指定されていない場合は、ユーザー定義型またはオブジェクトの種類を指定することもできます。
defaultvalue	省略可能です。任意の定数または定数式を指定します。キーワード Optional を指定したパラメータに対してのみ有効です。データ型がオブジェクト型 (Object) の場合、明示的な既定値は Nothing だけです。
メモ   Property Let ステートメントを使って定義するプロシージャには、引数が少なくとも 1 つは必要です。この引数 (引数が 2 つ以上ある場合は一番最後の引数) には、Property Let ステートメントによって定義されるプロシージャが呼び出されたときに、プロパティに設定される実際の値が設定されます。この引数は、上記の構文の引数 value として参照されます。

解説

キーワード Public、Private、または Friend を用いて明示的に指定しない場合、Property プロシージャは、パブリック プロシージャになります。キーワード Static を指定しない場合、ローカル変数の値は、Property プロシージャの実行が終了すると破棄されます。キーワード Friend は、クラス モジュール内でのみ使えます。ただし、Friend を指定したプロシージャは、プロジェクト内のすべてのモジュールのプロシージャから呼び出せます。Friend を指定したプロシージャは、親クラスのタイプ ライブラリには書き込まれません。また、実行時バインディングは行えません。

実行可能なコードは、すべてプロシージャ内に記述する必要があります。また、Property Let プロシージャは、ほかの Property プロシージャ、Sub プロシージャ、Function プロシージャの中では定義できません。

Exit Property ステートメントは、Property Let プロシージャを直ちに終了させます。プログラムの実行は、その Property Let プロシージャを呼び出したステートメントの次のステートメントから続行されます。Exit Property ステートメントは、Property Let プロシージャ内の任意の場所に、必要に応じていくつでも記述できます。

Function プロシージャおよび Property Get プロシージャと同様に、Property Let プロシージャは、引数を受け取り、一連のステートメントを実行して、引数の値を変更できる独立したプロシージャです。ただし、値を返す Function プロシージャまたは Property Get プロシージャとは異なり、Property Get プロシージャは値を返さないため、プロパティの値を設定する式または Let ステートメントの左辺にしか記述できません。


Property Set ステートメント

Property プロシージャの名前、引数、およびプロシージャの本体を構成するコードを宣言します。Property Set プロシージャは、オブジェクトへの参照を設定します。

構文

[Public | Private | Friend] [Static] Property Set name ([arglist,] reference)
[statements]
[Exit Property]
[statements]

End Property

Property Set ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Optional	省略可能です。引数が呼び出し側から提供されるのかどうかを示します。
Public	省略可能です。すべてのモジュールのすべてのプロシージャから参照できるプロシージャを宣言するときに指定します。Option Private ステートメントが記述されているモジュールの中で使用した場合、そのプロシージャは、プロジェクトの外からは参照できません。
Private	省略可能です。Property Set プロシージャを記述したモジュール内のほかのプロシージャでのみ参照できるプロシージャを宣言するときに指定します。
Friend	省略可能です。クラス モジュール内でのみ使用できます。このキーワードを指定した Property Set プロシージャは、プロジェクト全体から参照できますが、オブジェクトのインスタンスのコントローラからは参照できません。
Static	省略可能です。Property Set プロシージャ内のローカル変数が、次に呼び出されるまで保持されることを示します。Property Set プロシージャの外部で宣言された変数は、Property Set プロシージャの中で使われている場合でも、キーワード Static によって影響を受けることはありません。
name	必ず指定します。Property Set プロシージャの名前です。変数の標準的な名前付け規則に従って指定します。ただし、同じモジュール内の Property Get プロシージャや Property Let プロシージャと同じ名前を使うことができます。
arglist	必ず指定します。Property Set プロシージャを呼び出すときにプロシージャに渡す引数を表す変数のリストを、指定します。複数の引数を指定するときは、カンマ (,) で区切ります。
reference	必ず指定します。オブジェクトへの参照式の右辺に記述された、オブジェクトへの参照を表す変数を指定します。
statements	省略可能です。Property Set プロシージャ内で実行される一連のステートメントを指定します。
引数 arglist は、次の形式で指定します。

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

指定項目	内容
Optional	省略可能です。引数が省略可能であることを示します。キーワード Optional を指定した場合は、引数 arglist のそれ以降の引数も省略可能でなければならず、すべてキーワード Optional を付けて宣言する必要があります。Property Set ステートメントの式の右辺には、キーワード Optional を指定できません。
ByVal	省略可能です。その引数が値渡しで渡されることを示します。
ByRef	省略可能です。その引数が参照渡しで渡されることを示します。Visual Basic では、キーワード ByRef が既定値です。
ParamArray	省略可能です。引数 arglist の最後に指定する引数としてのみ使用でき、その引数がバリアント型 (Variant) の要素を持つ省略可能 (Optional) な配列であることを示します。キーワード ParamArray を使うと、任意の数の引数を渡すことができます。ByVal、ByRef、Optional の各キーワードと共に使うことはできません。
varname	必ず指定します。プロシージャに渡す引数を表す変数の名前です。変数の標準的な名前付け規則に従って指定します。
type	省略可能です。Property Set プロシージャに渡す引数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant) のいずれかを指定できます。パラメータにキーワード Optional が指定されていない場合は、ユーザー定義型またはオブジェクトの種類を指定することもできます。
defaultvalue	省略可能です。任意の定数または定数式を指定します。キーワード Optional を指定したパラメータに対してのみ有効です。データ型がオブジェクト型 (Object) の場合、明示的な既定値は Nothing だけです。
メモ   Property Set ステートメントを使って定義する各プロシージャには、引数が少なくとも 1 つは必要です。この引数 (引数が 2 つ以上ある場合は一番最後の引数) には、Property Set ステートメントで定義されたプロシージャが呼び出されたときに、そのプロパティに対する実際のオブジェクト参照が設定されます。この引数は、上記の構文の引数 reference として参照されます。この引数にはキーワード Optional を指定できません。

解説

キーワード Public、Private、または Friend を用いて明示的に指定しない場合、Property プロシージャは、パブリック プロシージャになります。キーワード Static を指定しない場合、ローカル変数の値は、Property プロシージャの実行が終了すると破棄されます。キーワード Friend は、クラス モジュール内でのみ使えます。ただし、Friend を指定したプロシージャは、プロジェクト内のすべてのモジュールのプロシージャから呼び出せます。Friend を指定したプロシージャは、親クラスのタイプ ライブラリには書き込まれません。また、実行時バインディングは行えません

実行可能なコードは、すべてプロシージャ内に記述する必要があります。また、Property Set プロシージャは、ほかの Property プロシージャ、Sub プロシージャ、Function プロシージャの中では定義できません。

Exit Property ステートメントは、Property Set プロシージャを直ちに終了させます。プログラムの実行は、その Property Set プロシージャを呼び出したステートメントの次のステートメントから続行されます。Exit Property ステートメントは、Property Set プロシージャ内の任意の場所に、必要に応じていくつでも記述できます。

Function プロシージャおよび Property Get プロシージャと同様に、Property Set プロシージャは、引数を受け取り、一連のステートメントを実行して、引数の値を変更できる独立したプロシージャです。ただし、値を返す Function プロシージャまたは Property Get プロシージャとは異なり、Property Get プロシージャは値を返さないため、オブジェクトへの参照を代入するステートメント (Set ステートメント) の左辺にしか記述できません。


Public ステートメント

パブリック変数を宣言し、メモリ領域を割り当てます。モジュール レベルで使用します。

構文

Public [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] . . .

Public ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
WithEvents	省略可能です。引数 varname が、ActiveX オブジェクトによって起動されるイベントに対応するためのオブジェクト変数であることを指定するキーワードです。クラス モジュール内でのみ有効です。キーワード WithEvents を使用して任意の数の変数を個別に宣言できます。ただし、キーワード WithEvents では、配列は作成できません。また、キーワード New をキーワード WithEvents と共に使用することはできません。
varname	必ず指定します。宣言する変数の名前です。変数の標準的な名前付け規則に従って指定します。
subscripts	省略可能です。配列変数の次元を指定します。指定できる次元数の最大値は 60 です。引数 subscripts の構文は次のとおりです。
	[lower To] upper [,[lower To] upper] . . .
	引数 lower を省略した場合、配列の添字の最小値は Option Base ステートメントによって制御されます。Option Base ステートメントが記述されていなければ、添字の最小値は 0 になります。
New	省略可能です。このキーワードを指定すると、オブジェクトを暗黙的に作成できます。オブジェクト変数を宣言するときにキーワード New を指定すると、オブジェクトを最初に参照したときにオブジェクトの新しいインスタンスが作成されるので、Set ステートメントを使ってオブジェクトへの参照を代入する必要はありません。キーワード New を使用して固有のデータ型の変数を宣言したり、従属オブジェクトのインスタンスを宣言することはできません。また、キーワード WithEvents と共に使用することもできません。
type	省略可能です。変数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長の場合は String、固定長の場合は String * length)、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、またはオブジェクトの種類のいずれかを指定できます。As type 節は宣言する各変数に対して個別に指定します。
解説

Public ステートメントで宣言された変数は、Option Private Module が有効でない限り、すべてのアプリケーションのすべてのモジュールのすべてのプロシージャから参照できます。その場合、変数は、それが記述されているプロジェクトの中でのみパブリックになります。

メモ   クラス モジュール内で Public ステートメントを使って、固定長文字列変数を宣言することはできません。

変数のデータ型の宣言には、Public ステートメントを使う必要があります。次の例では、変数を整数型 (Integer) で宣言しています。

Public NumberOfEmployees As Integer

Public ステートメントは、変数のオブジェクトの種類の宣言にも使います。次のステートメントでは、ワークシートの新しいインスタンスを表す変数を宣言しています。

Public X As New Worksheet

オブジェクト変数を宣言するときにキーワード New を指定しない場合は、オブジェクトを参照する変数を使用する前に、Set ステートメントを使用して変数に既存のオブジェクトを代入する必要があります。宣言したオブジェクト変数にオブジェクトが代入されるまで、その変数には Nothing という特殊な値が設定されます。Nothing は、その変数がオブジェクトの特定のインスタンスを参照していないことを示します。

Public ステートメントで空のかっこを指定すると、動的配列を宣言できます。宣言した動的配列の次元と要素の数をプロシージャ内で定義するには、ReDim ステートメントを使います。ただし、Private ステートメント、Public ステートメント、または Dim ステートメントで明示的にサイズを指定した配列変数の次元を再び宣言しようとすると、エラーが発生します。

データ型やオブジェクトの種類の指定がなく、さらにモジュール内に Deftype ステートメントも記述されていない場合、変数のデータ型は既定のバリアント型 (Variant) になります。

変数の初期化時には、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に初期化されて、固定長文字列には 0 が埋められます。また、バリアント型変数は Empty 値に初期化されます。ユーザー定義型変数の各要素は、個別の変数として初期化されます。


ReDim ステートメント

動的配列変数に対するメモリ領域の再割り当てを行います。プロシージャ レベルで使用します。

構文

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

ReDim ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Preserve	省略可能です。既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する場合に使用する、キーワードです。
varname	必ず指定します。宣言する変数の名前です。変数の標準的な名前付け規則に従って指定します。
subscripts	必ず指定します。配列変数の次元を指定します。指定できる次元数の最大値は 60 です。引数 subscripts の構文は、次のとおりです。
	[lower To] upper [,[lower To] upper] . . .
	引数 lower を省略した場合、配列の添字の最小値は Option Base ステートメントによって制御されます。Option Base ステートメントが記述されていなければ、添字の最小値は 0 になります。
type	省略可能です。変数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長の場合は String、固定長の場合は String * length)、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、またはオブジェクトの種類のいずれかを指定できます。As type 節は、宣言する各変数に対して個別に指定します。バリアント型 (Variant) で配列を格納する場合、引数 type で指定するのは配列の各要素のデータ型です。この引数でバリアント型をほかのデータ型に変えることはできません。
解説

ReDim ステートメントは、動的配列を宣言したり、Private、Public、または Dim の各ステートメントにおいて、次元の添字を省略した空のかっこだけを指定して宣言されている動的配列の、要素数や次元数を変更するときに使います。

ReDim ステートメントは、配列の要素数や次元数を変更するために何回でも使うことができます。ただし、バリアント型 (Variant) に格納されている配列を除き、一度あるデータ型で宣言された配列のデータ型を ReDim ステートメントで別のデータ型に変更することはできません。配列がバリアント型に格納されている場合、As type 節を使用して要素のデータ型を変更できます。ただし、キーワード Preserve を使用している場合は、データ型の変更は許可されません。

キーワード Preserve を指定した場合、変更できるのは、動的配列の最後の次元のサイズに限られます。また、次元数は変更できません。たとえば、次元が 1 つしかない動的配列の場合、その次元は最後のただ 1 つの次元なので、その次元のサイズを変更できます。次元が 2 つ以上ある動的配列の場合、最後の次元のサイズのみを変更でき、その配列に格納されている値は保持されます。ただし、ほかの次元の大きさは変更できません。次の例では、既に格納されている値を保持したまま、動的配列の最後の次元のサイズを増やします。

ReDim X(10, 10, 10)

. . .

ReDim Preserve X(10, 10, 15)

同様に、キーワード Preserve を使用した場合、動的配列のサイズを変更するために変えられるのは、添字の上限だけです。添字の下限を変更しようとすると、エラーが発生します。

配列のサイズを小さくすると、削除された配列の要素に格納されていた値は、失われます。プロシージャに配列を参照渡しで引き渡した場合、プロシージャ内で配列の再定義を行うことはできません。

変数の初期化時には、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に初期化されて、固定長文字列には 0 が埋められます。また、バリアント型 (Variant) 変数は Empty 値に初期化されます。ユーザー定義型変数の各要素は、個別の変数として初期化されます。オブジェクトを参照する変数には、あらかじめ Set ステートメントで既存のオブジェクトを代入しておく必要があります。既存のオブジェクトを代入するまで、オブジェクト変数には、特殊な値である Nothing が格納されています。これは、オブジェクト変数がオブジェクトの特定のインスタンスを参照していないことを表す値です。

メモ   宣言した変数がモジュール レベルまたはプロシージャ レベルにない場合、ReDim ステートメントは宣言ステートメントと同様の働きをします。同じ名前を持つほかの変数が後で作成されると、その変数の適用範囲 (スコープ) が広く、Option Explicit ステートメントが指定されている場合でも、ReDim ステートメントは後で作成された変数を参照し、コンパイル エラーは発生しません。このような名前の競合を避けるには、ReDim ステートメントは宣言ステートメントとして使わず、配列を再定義するためだけに使用します。

メモ   バリアント型 (Variant) に格納された配列のサイズを変更するには、まず最初にバリアント型変数を明示的に宣言する必要があります。


Rem ステートメント

プログラム内にコメントを記述することを示します。

構文

Rem comment

次の構文を使うこともできます。

' comment

引数 comment には、プログラムをわかりやすくするための説明文 (コメント) を記述します。この引数は省略可能です。キーワード Rem と引数 comment の間にはスペースが必要です。

解説

Rem ステートメントの行に行番号や行ラベルを付けることにより、GoTo ステートメントや GoSub ステートメントの分岐先として指定できます。プログラムの実行は、Rem ステートメントの後にある、最初の実行可能なステートメントに移ります。ほかのステートメントと同じ行の後ろにキーワード Rem を記述するときは、ほかのステートメントとキーワード Rem をコロン (:) で区切る必要があります。

キーワード Rem の代わりに、クォーテーション (') を使えます。ただし、クォーテーション (') を使う場合は、ほかのステートメントと区切るためのコロンは必要ありません。


Set ステートメント

オブジェクトへの参照を、変数またはプロパティに代入します。

構文

Set objectvar = {[New] objectexpression | Nothing}

Set ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
objectvar	必ず指定します。変数またはプロパティの名前です。名前は変数の標準的な名前付け規則に従って指定します。
New	省略可能です。キーワード New は、通常、デザイン時にオブジェクトを暗黙的に作成するときに使います。Set ステートメントと共にキーワード New を使用すると、クラスの新しいインスタンスが作成されます。引数 objectvar にオブジェクトへの参照が含まれている場合、新しいオブジェクトが代入されると参照が解除されます。キーワード New では、組み込みデータ型の新しいインスタンスや従属オブジェクトは、作成できません。
objectexpression	必ず指定します。オブジェクト名、参照するオブジェクトと同じオブジェクトの種類の宣言済みのほかの変数、同じオブジェクトの種類のオブジェクトを返す関数名またはメソッド名、などで構成される式を指定します。
Nothing	省略可能です。引数 objectvar と特定のオブジェクトとの関係を無効にします。引数 objectvar に Nothing を代入したときに、ほかの変数がそのオブジェクトを参照していなければ、それまでに参照していたオブジェクトに割り当てられているすべてのシステム リソースおよびメモリ リソースが、解放されます。
解説

引数 objectvar は、代入されるオブジェクトと同じ種類のオブジェクトでなければなりません。

Dim、Private、Public、ReDim、Static の各ステートメントは、オブジェクトを参照する変数を宣言するだけです。Set ステートメントを使ってオブジェクトを代入すると、実際のオブジェクトを参照できるようになります。

次の例は、Dim ステートメントを用いて、Form1 というデータ型の配列を宣言する方法を示しています。Form1 のどのインスタンスも、実際には存在しません。次に、Set ステートメントを使用して、Form1 の新しいインスタンスへの参照を、変数 myChildForms に代入します。MDI アプリケーションの子フォームを作成する場合にも、このようなコードを使用します。

Dim myChildForms(1 to 4) As Form1

Set myChildForms(1) = New Form1

Set myChildForms(2) = New Form1

Set myChildForms(3) = New Form1

Set myChildForms(4) = New Form1

一般に、Set ステートメントでオブジェクトへの参照を変数に代入する場合、変数のためにオブジェクトのコピーは作成されず、代わりにオブジェクトへの参照が作成されます。複数のオブジェクト変数が同じオブジェクトを参照できます。このオブジェクト変数は、オブジェクトのコピーではなく、オブジェクトへの参照なので、オブジェクトに変更を加えると、それはオブジェクトを参照しているすべての変数に反映されます。ただし、Set ステートメントにキーワード New を使うと、オブジェクトのインスタンスが実際に作成されます。


Static ステートメント

変数を宣言し、それらにメモリ領域を割り当てます。プロシージャ レベルで使用します。Static ステートメントで宣言した変数 (静的変数) の値は、プログラムが実行されている間をとおして保持されます。

構文

Static varname[([subscripts])] [As [New] type] [, varname[([subscripts])] [As [New] type]] . . .

Static ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
varname	必ず指定します。宣言する変数の名前です。変数の標準的な名前付け規則に従って指定します。
subscripts	省略可能です。配列変数の次元を指定します。指定できる次元数の最大値は 60 です。引数 subscripts の構文は次のとおりです。
	[lower To] upper [,[lower To] upper] . . .
	引数 lower を省略すると、配列の添字の最小値は Option Base ステートメントによって制御されます。Option Base ステートメントが記述されていない場合、添字の最小値は 0 になります。
New	省略可能です。このキーワードを指定すると、オブジェクトを暗黙的に作成できます。オブジェクト変数を宣言するときにキーワード New を指定すると、オブジェクトを最初に参照したときにオブジェクトの新しいインスタンスが作成されるので、Set ステートメントを使ってオブジェクトへの参照を代入する必要はありません。キーワード New を使用して固有のデータ型の変数を宣言したり、従属オブジェクトのインスタンスを宣言することはできません。
type	省略可能です。変数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長の場合は String、固定長の場合は String * length)、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、またはオブジェクトの種類のいずれかを指定できます。As type 節は宣言する各変数に対して個別に指定します。
解説

モジュール内のコードが実行されると、Static ステートメントで宣言された変数の値は、モジュールがリセットされるか再実行されるまで、保持されます。プロシージャ内だけで参照可能な変数を明示的に宣言するには、静的でないプロシージャ (キーワード Static を指定しないで定義したプロシージャ) の中で Static ステートメントを使って宣言します。ただし、この変数の保持期間は、プロシージャが定義されているモジュールと同じになります。

プロシージャが呼び出されている間、値を保持する変数のデータ型を宣言するには、プロシージャの中で Static ステートメントを使って宣言します。たとえば、次のステートメントは整数型で固定サイズの配列を宣言します。

Static EmployeeNumber(200) As Integer

次のステートメントでは、ワークシートの新しいインスタンスとして変数を宣言しています。

Static X As New Worksheet

オブジェクト変数を宣言するときにキーワード New を指定しない場合は、オブジェクトを参照する変数を使用する前に、Set ステートメントを使用して変数に既存のオブジェクトを代入する必要があります。宣言したオブジェクト変数にオブジェクトが代入されるまで、その変数には Nothing という特殊な値が設定されます。Nothing は、その変数がオブジェクトの特定のインスタンスを参照していないことを示します。宣言部分でキーワード New を使用すると、オブジェクトのインスタンスはオブジェクトを最初に参照したときに作成されます。

データ型やオブジェクトの種類を指定せず、モジュール内に Deftype ステートメントの記述がない場合、変数のデータ型は既定のバリアント型 (Variant) になります。

メモ   Static ステートメントとキーワード Static は似ていますが、用途が異なります。キーワード Static で "Static Sub CountSales ()" のようにプロシージャを宣言すると、そのプロシージャ内のすべてのローカル変数のメモリ領域は一度だけ割り当てられて、変数の値はプログラムの実行中は保持されます。静的ではないプロシージャの場合、変数のメモリ領域はプロシージャが呼び出されるたびに割り当てられて、プロシージャの終了時に解放されます。Static ステートメントは、静的でないプロシージャ内のローカル変数の宣言に使われて、プログラムを実行している間、ローカル変数の値を保持します。

変数の初期化時には、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に初期化され、固定長文字列には 0 が埋められます。また、バリアント型 (Variant) 変数は、Empty 値に初期化されます。ユーザー定義型変数の各要素は、個別の変数として初期化されます。

メモ   プロシージャ内で Static ステートメントを使用する場合は、通常、Dim ステートメントなどのほかの宣言ステートメントと共に、プロシージャの最初に記述します。


Sub ステートメント

Sub プロシージャの名前、引数、およびプロシージャの本体を宣言します。

構文

[Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]

End Sub

Sub ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。すべてのモジュールのすべてのプロシージャから参照できる Sub プロシージャを宣言するときに指定します。Option Private ステートメントが記述されているモジュールの中で使用した場合、その Sub プロシージャは、プロジェクトの外からは参照できません。
Private	省略可能です。Sub プロシージャを記述したモジュール内の、ほかのプロシージャからのみ参照できるプロシージャを宣言するときに、指定します。
Friend	省略可能です。クラス モジュール内でのみ使用できます。このキーワードを指定した Sub プロシージャは、プロジェクト全体から参照できますが、オブジェクトのインスタンスのコントローラからは参照できません。
Static	省略可能です。Sub プロシージャ内のローカル変数が、次に呼び出されるまで保持されることを示します。Sub プロシージャの外部で宣言された変数は、Sub プロシージャの中で使われている場合でも、キーワード Static による影響を受けません。
name	必ず指定します。定義する Sub プロシージャの名前です。変数の標準的な名前付け規則に従って指定します。
arglist	省略可能です。Sub プロシージャを呼び出すときに、Sub プロシージャに渡す引数を表す変数のリストを指定します。複数の変数を指定するときは、カンマ (,) で区切ります。
statements	省略可能です。Sub プロシージャ内で実行される一連のステートメントを指定します。
引数 arglist は、次の形式で指定します。

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

指定項目	内容
Optional	省略可能です。指定した引数が省略可能であることを示します。キーワード Optional を指定した場合は、引数 arglist のそれ以降の引数も省略可能でなければならず、すべてキーワード Optional を付けて宣言する必要があります。キーワード ParamArray を使った場合は、どの引数に対してもキーワード Optional は指定できません。
ByVal	省略可能です。その引数が値渡しで渡されることを示します。
ByRef	省略可能です。その引数が参照渡しで渡されることを示します。Visual Basic では、キーワード ByRef が既定値です。
ParamArray	省略可能です。引数 arglist の最後に指定する引数としてのみ使用でき、その最後の引数がバリアント型 (Variant) の要素を持つ省略可能 (Optional) な配列であることを示します。キーワード ParamArray を使うと、任意の数の引数を渡すことができます。キーワード ParamArray は、ByVal、ByRef、Optional の各キーワードと共に使うことはできません。
varname	必ず指定します。引数として渡す変数の名前です。変数の標準的な名前付け規則に従って指定します。
type	省略可能です。プロシージャに渡す引数のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant) のいずれかを指定できます。パラメータにキーワード Optional が指定されていない場合は、ユーザー定義型またはオブジェクトの種類を指定することもできます。
defaultvalue	省略可能です。任意の定数または定数の式を指定します。キーワード Optional を指定したパラメータに対してのみ有効です。データ型がオブジェクト型 (Object) の場合、明示的な既定値は Nothing だけです。
解説

キーワード Public、Private、または Friend を指定しない場合、Sub プロシージャは、パブリック プロシージャになります。キーワード Static を指定しない場合、ローカル変数の値は、Sub プロシージャの実行が終了すると破棄されます。キーワード Friend は、クラス モジュール内でのみ使えます。ただし、Friend を指定したプロシージャは、プロジェクト内のすべてのモジュールのプロシージャから呼び出せます。Friend を指定したプロシージャは、親クラスのタイプ ライブラリには書き込まれません。また、実行時バインディングは行えません。

メモ   Sub プロシージャは、再帰的に使えます。つまり、そのプロシージャ自体を呼び出して機能を実行できます。ただし、再帰呼び出しを行うと、スタックがオーバーフローする可能性があります。キーワード Static は、通常、再帰的な Sub プロシージャでは使いません。

実行可能なコードは、すべてプロシージャ内に記述する必要があります。また、Sub プロシージャをほかの Sub プロシージャ、Function プロシージャ、Property プロシージャの中では定義できません。

キーワード Exit Sub は、Sub プロシージャを直ちに終了させます。プログラムの実行は、その Sub プロシージャを呼び出したステートメントの次のステートメントから続行されます。Exit Sub ステートメントは、Sub プロシージャ内の任意の場所に、必要に応じていくつでも記述できます。

Function プロシージャと同様に、Sub プロシージャは、引数を受け取り、一連のステートメントを実行して、引数の値を変更します。ただし、値を返す Function プロシージャとは異なり、Sub プロシージャは値を返さないため、式の中には記述できません。

Sub プロシージャを呼び出すには、プロシージャ名の後ろに引数リストを付けて指定します。Sub プロシージャを呼び出す方法については、Call ステートメントを参照してください。

Sub プロシージャで使う変数には、Sub プロシージャ内で明示的に宣言される変数と、それ以外の変数の 2 種類があります。プロシージャ内で Dim などのステートメントで明示的に宣言された変数 (ローカル変数) は、そのプロシージャの中だけで有効です。プロシージャ内で明示的に宣言されていない変数も、そのプロシージャの外部のさらに上のレベルで明示的に宣言されていない限り、ローカル変数となります。

メモ   プロシージャ内で明示的に宣言されていない変数をプロシージャ内で使うことも可能ですが、その変数と同じ名前の変数などがモジュール レベルで定義されている場合、名前の競合が発生します。あるプロシージャにおいて、ほかのプロシージャ、定数または変数のいずれかと同じ名前を持つ未宣言の変数を参照した場合、そのモジュール レベルの名前を参照しているものと見なされます。このような名前の競合を避けるためには、変数を明示的に宣言する必要があります。Option Explicit ステートメントを使うと、変数の明示的な宣言が強制されます。

メモ   GoSub、GoTo、Return などのステートメントを使って、Sub プロシージャに入ったり、Sub プロシージャから抜けたりすることはできません。


Type ステートメント

1 つまたは複数の要素を持つユーザー定義のデータ型 (ユーザー定義型) を宣言します。モジュール レベルで使います。

構文

[Private | Public] Type varname
 elementname [([subscripts])] As type
[elementname [([subscripts])] As type]
. . .

End Type

Type ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
Public	省略可能です。すべてのプロジェクトのすべてのモジュールのどのプロシージャからも参照できるユーザー定義型を宣言するときに指定します。
Private	省略可能です。宣言が行われたモジュール内でのみ参照できるユーザー定義型を宣言するときに指定します。
varname	必ず指定します。宣言するユーザー定義型の名前です。変数の標準的な名前付け規則に従って指定します。
elementname	必ず指定します。ユーザー定義型を構成する要素の名前です。要素名は、変数の標準的な名前付け規則に従って指定します。ただし、キーワードを使うこともできます。
subscripts	省略可能です。配列の要素の次元を指定します。動的配列を宣言する場合は、かっこだけを指定します。引数 subscripts の構文は次のとおりです。
	[lower To] upper [,[lower To] upper] . . .
	引数 lower を省略すると、配列の添字の最小値は Option Base ステートメントによって制御されます。Option Base ステートメントが記述されていない場合は、添字の最小値は 0 になります。
type	必ず指定します。要素のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長の場合は String、固定長の場合は String * length)、オブジェクト型 (Object)、バリアント型 (Variant)、ほかのユーザー定義型、オブジェクトの種類のいずれかを指定できます。
解説

Type ステートメントは、モジュール レベルでのみ使用できます。Type ステートメントでユーザー定義型を宣言すると、その宣言の適用範囲内であれば、どこからでもその型の変数を宣言できるようになります。ユーザー定義型の変数の宣言には、Dim、Private、Public、ReDim、または Static のいずれかのステートメントを使います。

標準モジュールでは、ユーザー定義型は既定でパブリックになり、その適用範囲はキーワード Public で変更できます。クラス モジュールでは、ユーザー定義型は常にプライベートになり、適用範囲はキーワード Public では変更できません。

Type...End Type ブロック内では、行番号と行ラベルは使えません。

ユーザー定義型は、データ型の異なる多数の関連する要素で構成されるデータ レコードでよく使われます。

次の例は、ユーザー定義型の中に固定サイズの配列を含めたものです。

Type StateData

CityCode (1 To 100) As Integer	' サイズ固定型 (静的) 配列を宣言します。

County As String * 30

End Type

Dim Washington(1 To 100) As StateData

この例では、StateData には固定サイズの配列 CityCode が含まれており、レコード Washington は StateData と同じ構造になっています。

ユーザー定義型の中で固定サイズの配列を宣言する場合は、変数ではなく数値リテラルまたは数値定数を使って、次元を宣言する必要があります。


UBound 関数

配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。

構文

UBound(arrayname[, dimension])

UBound 関数の構文は、次の指定項目から構成されます。

指定項目	内容
arrayname	必ず指定します。配列変数の名前です。変数の標準的な名前付け規則に従って指定します。
dimension	省略可能です。バリアント型 (内部処理形式 Long の Variant) の値を指定します。添字の最大値を調べる対象となる配列の次元を示す整数を指定します。最初の次元なら 1、2 番目の次元なら 2、というように指定します。引数 dimension を省略すると、1 が指定されたものと見なされます。
解説

UBound 関数は、LBound 関数と組み合わせて、配列のサイズを調べるために使います。配列の添字の最小値を調べるには、LBound 関数を使います。

次のような配列が宣言されている場合、UBound 関数からは下の表のような値が返ります。

Dim A(1 To 100, 0 To 3, -3 To 4)

ステートメント	戻り値
UBound(A, 1)	100
UBound(A, 2)	3
UBound(A, 3)	4


Array 関数の使用例

次の例では、Array 関数を使って、配列を格納したバリアント型 (Variant) を返します。

Dim MyWeek, MyDay

MyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")

' 返される配列の添字の下限は、Option Base ステートメントにより、

' 1 に設定されているものとします。

MyDay = MyWeek(2)	' MyDay に "Tue" が格納されます。

MyDay = MyWeek(4)	' MyDay に "Thu" が格納されます。


Const ステートメントの使用例

次の例では、Const ステートメントを使って、リテラル値の代わりに使われる定数を宣言しています。パブリック (Public) 定数は、クラス モジュールではなく、標準モジュールの宣言セクションに記述します。プライベート (Private) 定数は、どの種類のモジュールの宣言セクションにも記述できます。

' 既定の設定では、定数はプライベート (Private) です。

Const MyVar = 459

' パブリック (Public) 定数を宣言します。

Public Const MyString = "HELP"

' プライベートの整数型 (Integer) 定数を宣言します。

Private Const MyInt As Integer = 5

' 1 行で複数の定数を宣言します。

Const MyStr = "Hello", MyDouble As Double = 3.4567


CreateObject 関数の使用例

次の例では、CreateObject 関数を使って、オブジェクト変数 xlApp に Microsoft Excel への参照を設定します。このオブジェクト変数を使って、Microsoft Excel の Visible プロパティを操作し、その後、Microsoft Excel の Quit メソッドで Microsoft Excel を閉じます。最終的に、オブジェクトの参照自体は解放されます。

Dim xlApp As Object

' オブジェクトへの参照を格納する変数を宣言します。

Set xlApp = CreateObject("excel.application")

' アプリケーションを表示する場合は、

' Visible プロパティに真 (True) を設定します。

xlApp.Visible = True

' Microsoft Excel の他のオブジェクトを操作する場合も、

' オブジェクト変数 xlApp を使います。

xlApp.Quit	' 処理終了後、Quit メソッドでアプリケーションを終了し、

Set xlApp = Nothing	' オブジェクトの参照を解放します。


Declare ステートメントの使用例

次の例は、Declare ステートメントを標準モジュールのモジュール レベルで使って、ダイナミック リンク ライブラリ (DLL) に納められている外部プロシージャへの参照を宣言する方法を示しています。Declare ステートメントがプライベート (Private) であれば、Declare ステートメントをクラス モジュールに記述できます。

' 16 ビット版 Microsoft Windows の場合

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

' SomeBeep をプロシージャ名に対するエイリアスと見なします。

Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer)

' Alias 句で序数を使って、GetWinFlags を呼び出します。

Declare Function GetWinFlags Lib "Kernel" Alias "#132"() As Long

' 32 ビット版 Microsoft Windows では、USER.DLL ライブラリではなく、

' USER32.DLL ライブラリを指定します。条件付きコンパイルを使えば、

' 16 ビット版または 32 ビット版 Windows のいずれかで実行できるコードを、

' 記述できます。

#If Win32 Then

Declare Sub MessageBeep Lib "User32" (ByVal N As Long)

#Else

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

#End If


Deftype ステートメントの使用例

次の例は、Deftype ステートメントを使って、特定の文字が先頭に付く変数や Function プロシージャに対して、既定のデータ型を設定する方法を表しています。既定のデータ型は、Dim ステートメントを使って明示的に宣言することによってのみ、変更できます。Deftype ステートメントは、モジュール レベルでのみ使用できます。つまり、プロシージャ内では使えません。

' 名前の先頭が A ～ K の文字で始まる変数の既定のデータ型を、

' 整数型 (Integer) に設定します。

DefInt A-K

' 名前の先頭が L ～ Z の文字で始まる変数の既定のデータ型を、

' 文字列型 (String) に設定します。

DefStr L-Z

CalcVar = 4	' 整数型変数を初期化します。

StringVar = "Hello there"	' 文字列変数を初期化します。

AnyVar = "Hello" 	' "Type mismatch" エラーが発生します。

Dim Calc As Double	' 明示的に倍精度浮動小数点数型

' (Double) を宣言します。

Calc = 2.3455	' 倍精度浮動小数点数型変数に

' 値を代入します。

' Deftype ステートメントは、Function プロシージャにも適用できます。

CalcNum = ATestFunction(4)	' ユーザー定義関数を

' 呼び出します。

' Function プロシージャ ATestFunction を定義します。

Function ATestFunction(INumber)

ATestFunction = INumber * 2	' 戻り値は整数になります。

End Function


Dim ステートメントの使用例

次の例は、Dim ステートメントを使って、変数や配列を宣言する方法です。配列の添字の最小値は既定値では 0 ですが、Option Base ステートメントを使えば、モジュール レベルで変更できます。

' 変数 AnyValue と変数 MyValue は既定のバリアント型 (Variant)

' として宣言されて、値は Empty 値が設定されます。

Dim AnyValue, MyValue

' 整数型 (Integer) の変数を明示的に宣言します。

Dim Number As Integer

' 1 行で複数の変数を宣言します。型が指定されていないので、

' 変数 AnotherVar はバリアント型になります。

Dim AnotherVar, Choice As Boolean, BirthDate As Date

' 変数 DayArray は、要素数 51 のバリアント型配列として宣言されます。

' 現在のモジュールで、Option Base に既定値の 0 が設定されていれば、

' 添字の範囲は、0 ～ 50 になります。

Dim DayArray(50)

' 変数 Matrix は、整数型の 2 次元配列です。

Dim Matrix(3, 4) As Integer

' MyMatrix は、倍精度浮動小数点数型 (Double) の 3 次元配列です。

' 添字の範囲を、明示的に指定しています。

Dim MyMatrix(1 To 5,  4 To 9,  3 To 5) As Double

' BirthDay は、添字が 1 ～ 10 の範囲の日付型 (Date) の配列です。

Dim BirthDay(1 To 10) As Date

' MyArray は、バリアント型の動的配列です。

Dim MyArray()


Enum ステートメントの使用例

次の例では、Enum ステートメントを使って、名前付き定数の集合を定義しています。ここで定義している定数は、データベースに対するデータ入力フォームをデザインする際に選択できる色です。

Public Enum InterfaceColors

icMistyRose = &HE1E4FF&

icSlateGray = &H908070&

icDodgerBlue = &HFF901E&

icDeepSkyBlue = &HFFBF00&

icSpringGreen = &H7FFF00&

icForestGreen = &H228B22&

icGoldenrod = &H20A5DA&

icFirebrick = &H2222B2&

End Enum


Erase ステートメントの使用例

次の例では、Erase ステートメントを使って、静的配列の要素の再初期化と動的配列のメモリの解放を行っています。

' 配列変数を宣言します。

Dim NumArray(10) As Integer	' 整数型の配列。

Dim StrVarArray(10) As String	' 可変長文字列型の配列。

Dim StrFixArray(10) As String * 10

' 固定長文字列型の配列。

Dim VarArray(10) As Variant	' バリアント型の配列。

Dim DynamicArray() As Integer	' 動的配列。

ReDim DynamicArray(10)	' メモリ領域を割り当てます。

Erase NumArray	' 各要素の値を 0 にします。

Erase StrVarArray	' 各要素の値を長さ 0 の

' 文字列 ("") にします。

Erase StrFixArray	' 各要素の値を 0 にします。

Erase VarArray	' 各要素の値を Empty 値にします。

Erase DynamicArray	' 配列が占有していたメモリを解放します。


Event ステートメントの使用例

次の例では、イベント機能を使って、100 メートル走世界記録のデモンストレーションの経過秒数を計っています。コードには、Event ステートメントを含む、イベント機能に関連するメソッド、プロパティ、およびステートメントが、すべて示されています。

イベントを発行するクラスがイベント ソースで、イベントをインプリメントするクラスがイベント シンクです。イベント ソースは、複数のイベント シンクに対して、イベントを通知できます。イベント ソースのクラスがイベントを生成すると、オブジェクトのそのインスタンスに対するイベント シンクとして選択されている各クラスに、そのイベントが通知されます。

この例では、ボタン (Command1)、ラベル (Label1)、および 2 つのテキスト ボックス (Text1 と Text2) を備えたフォーム (Form1) も使われています。ボタンをクリックすると、最初のテキスト ボックスに "スタート" と表示されて、2 番目のテキスト ボックスでは秒数の計測が始まります。世界記録の秒数 (9.84 秒) が経過すると、最初のテキスト ボックスには "ゴール" と表示されて、2 番目のテキスト ボックスには "9.84" と表示されます。

フォーム Form1 に対するコードには、フォームの開始状態と終了状態が記述されています。また、イベントが生成されたときに実行されるコードも含まれています。

Option Explicit

Private WithEvents mText As TimerState

Private Sub Command1_Click()

Text1.Text = "スタート"

    Text1.Refresh

    Text2.Text = "0"

    Text2.Refresh

Call mText.TimerTask(9.84)

End Sub

Private Sub Form_Load()

    Command1.Caption = "クリックすればタイマーがスタートします。"

    Text1.Text = ""

    Text2.Text = ""

    Label1.Caption = "これが、100 メートル走の世界記録のタイムです。

    Set mText = New TimerState

    End Sub

Private Sub mText_ChangeText()

    Text1.Text = "ゴール"

    Text2.Text = "9.84"

End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)

    Text2.Text = Str(Format(dblJump, "0"))

    DoEvents

End Sub

以下は、クラス モジュール TimerState のコードです。Event ステートメントを使って、イベントが発生したときに実行されるプロシージャを宣言しています。

Option Explicit

Public Event UpdateTime(ByVal dblJump As Double)

Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)

    Dim dblStart As Double

    Dim dblSecond As Double

    Dim dblSoFar As Double

    dblStart = Timer

    dblSoFar = dblStart

    Do While Timer < dblStart + Duration

        If Timer - dblSoFar >= 1 Then

            dblSoFar = dblSoFar + 1

            RaiseEvent UpdateTime(Timer - dblStart)

        End If

    Loop

    RaiseEvent ChangeText

End Sub


Function ステートメントの使用例

次の例では、Function ステートメントを使って、Function プロシージャの名前と引数を宣言し、プロシージャのコードを記述しています。最後の例では、既に定義されて、初期化された、キーワード Optional 指定の引数が使われています。

' 次のユーザー定義関数は、引数として渡された値の平方根を返します。

Function CalculateSquareRoot(NumberArg As Double) As Double

If NumberArg < 0 Then	' 引数を評価します。

Exit Function	' 終了して、呼び出し側のプロシージャに戻ります。

Else

CalculateSquareRoot = Sqr(NumberArg)

' 平方根を返します。

End If

End Function

関数が任意の数の引数を受け取るようにするには、キーワード ParamArray を使います。その例を次に示します。また、この例では、引数 FirstArg を値渡しで引き渡します。

Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs())

Dim ReturnValue

ReturnValue = CalcSum(4, 3 ,2 ,1)

' この関数を上のように呼び出すと、

' 配列の添字の最小値が既定値の 1 であれば、

' ローカル変数には FirstArg = 4、OtherArgs(1) = 3、

' OtherArgs(2) = 2 のように値が代入されます。

End Function

キーワード Optional が指定された引数は、既定値とバリアント型 (Variant) 以外のデータ型を持つことができます。

' 関数の引数が次のように定義されているものとします。

Function MyFunc(MyStr As String, Optional MyArg1 As _

Integer = 5, Optional MyArg2 = "Dolly")

Dim RetVal

' この関数は次のように呼び出すことができます。

RetVal = MyFunc("Hello", 2, "World")

' 3 つの引数をすべて指定します。

RetVal = MyFunc("Test", , 5)	' 2 番目の引数を省略します。

' 名前付き引数を使って、1 番目と 3 番目の引数を指定します。

RetVal = MyFunc(MyStr:="Hello ", MyArg1:=7)

End Function


GetObject 関数の使用例

次の例では、GetObject 関数を使って、Microsoft Excel の特定の Worksheet オブジェクト (MyXL) への参照を取得した後、そのワークシートの Application プロパティを使って、Microsoft Excel の表示や終了などを行います。Sub プロシージャ DetectExcel では、2 つの API 呼び出しを使って Microsoft Excel を調べます。Microsoft Excel が起動中の場合は、それを起動中オブジェクト テーブルに登録します。Microsoft Excel が起動されていないと、最初の GetObject 関数の呼び出しでエラーが発生します。エラーが発生した場合、この例では、ExcelWasNotRunning フラグに真 (True) を設定します。2 回目の GetObject 関数の呼び出しでは、開くファイルを指定しています。この GetObject 関数の呼び出しでは、Microsoft Excel が起動されていない場合は起動して、指定したファイル (mytest.xls) が示すワークシートへの参照が返されます。指定したファイルは、指定した場合に存在していなければなりません。指定した場合にない場合は、Visual Basic の オートメーション エラーが発生します。次に、Microsoft Excel と指定したワークシートが含まれるウィンドウが表示されます。最後に、このコードを実行する前に Microsoft Excel が起動されていなかった場合は、Application オブジェクトの Quit メソッドで Microsoft Excel を終了させます。既に Microsoft Excel が起動されていた場合は、終了させません。参照自体は、Nothing を代入することにより解放します。

' 必要な API ルーチンを宣言します。

Declare Function FindWindow Lib "user32" Alias _

"FindWindowA" (ByVal lpClassName as String, _

ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _

"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _

ByVal wParam as Long, _

ByVal lParam As Long) As Long

Sub GetExcel()

Dim MyXL As Object

' Microsoft Excel への参照を格納する変数を宣言します。

Dim ExcelWasNotRunning As Boolean

' Microsoft Excel が起動されていたかどうかを示すフラグを宣言します。

' Microsoft Excel が既に起動されているかどうかを調べます。

On Error Resume Next	' エラーのトラップを留保します。

' 第 1 引数を指定せずに GetObject 関数を呼び出すと、

' アプリケーションのインスタンスへの参照が返されます。

' アプリケーションが起動されていないと、エラーが発生します。

Set MyXL = Getobject(, "Excel.Application")

If Err.Number <> 0 Then ExcelWasNotRunning = True

Err.Clear	' エラーが発生した場合は Err オブジェクトをクリアします。

' Excel の起動を調べます。

' Excel が起動中の場合は、起動中オブジェクト テーブルに登録します。

DetectExcel

' 表示対象のファイルへの参照をオブジェクト変数に代入します。

Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

' Application プロパティを使って、Microsoft Excel を表示します。

' さらに、オブジェクト変数 MyXL の Windows コレクションを使って、

' 指定したワークシートが含まれる実際のウィンドウを表示します。

MyXL.Application.Visible = True

MyXL.Parent.Windows(1).Visible = True

' ワークシートに対して行う処理を以下に記述します。

' ...

' 現在起動中の Microsoft Excel が、このコードの実行開始前には

' 起動されていなかった場合は、Application プロパティの

'  Quit メソッドを使って、Microsoft Excel を終了します。

' Microsoft Excel を終了しようとすると、Microsoft Excel の

' タイトル バーが点滅して、開かれているファイルを保存するかどうかを

' 確認するメッセージが表示されます。

If ExcelWasNotRunning = True Then

MyXL.Application.Quit

End IF

' Microsoft Excel およびスプレッドシートへの参照を解放します。

Set MyXL = Nothing

End Sub

Sub DetectExcel()

' プロシージャが起動中の Excel を見つけると、それを登録します。

Const WM_USER = 1024

Dim hWnd As Long

' Excel が起動中の場合、この API 呼び出しからはハンドルが返ります。

hWnd = FindWindow("XLMAIN", 0)

If hWnd = 0 Then	' 0 は、Excel が起動していないことを示します。

Exit Sub

Else

' Excel は起動中なので、API の SendMessage 関数を使って、

' 起動中オブジェクト テーブルに登録します。

SendMessage hWnd, WM_USER + 18, 0, 0

End If

End Sub


Implements ステートメントの使用例

次の例は、Implements ステートメントを使って、一連の宣言を複数のクラスで利用できるようにする方法です。Implements ステートメントを介して宣言を共有するので、どのクラスも独自に宣言する必要はありません。

2 つのフォームを想定します。Selector フォームには、Customer Data と Supplier Data の 2 つのボタンがあります。ユーザーまたはメーカーの名前と住所を入力するには、Selector フォームの Customer ボタンまたは Supplier ボタンをクリックしてから、Data Entry フォームで名前と住所を入力します。Data Entry フォームには、Name と Address の 2 つのテキスト フィールドがあります。

宣言を共有するための次のコードは、PersonalData という名前のクラスに記述されます。

Public Name As String

Public Address As String

ユーザーのデータを処理するコードは、Customer という名前のクラス モジュールに記述されています。

Implements PersonalData

Private Property Get PersonalData_Address() As String

PersonalData_Address = "CustomerAddress"

End Property

Private Property Let PersonalData_Address(ByVal RHS As String)

'

End Property

Private Property Let PersonalData_Name(ByVal RHS As String)

'

End Property

Private Property Get PersonalData_Name() As String

PersonalData_Name = "CustomerName"

End Property

メーカーのデータを処理するコードは、Supplier という名前のクラス モジュールに記述されています。

Implements PersonalData

Private Property Get PersonalData_Address() As String

PersonalData_Address = "SupplierAddress"

End Property

Private Property Let PersonalData_Address(ByVal RHS As String)

'

End Property

Private Property Let PersonalData_Name(ByVal RHS As String)

'

End Property

Private Property Get PersonalData_Name() As String

PersonalData_Name = "SupplierName"

End Property

次のコードは、Selector フォームの処理を行うものです。

Private cust As New Customer

Private sup As New Supplier

Private Sub Command1_Click()

Dim frm2 As New Form2

    Set frm2.PD = cust

    frm2.Show 1

End Sub

Private Sub Command2_Click()

Dim frm2 As New Form2

    Set frm2.PD = sup

    frm2.Show 1

End Sub

次のコードは、Data Entry フォームにおける処理を行うものです。

Private m_pd As PersonalData

Private Sub Form_Load()

    With m_pd

        Text1 = .Name

        Text2 = .Address

    End With

End Sub

Public Property Set PD(Data As PersonalData)

    Set m_pd = Data

End Property


LBound 関数の使用例

次の例では、LBound 関数を使って、配列内の指定された次元の添字として使える最小値を求めます。配列の添字の既定の最小値 0 を変更するには、Option Base ステートメントを使います。

Dim Lower

' 配列変数を宣言します。

Dim MyArray(1 To 10, 5 To 15, 10 To 20)

Dim AnyArray(10)

Lower = Lbound(MyArray, 1) 	' 1 を返します。

Lower = Lbound(MyArray, 3)	' 10 を返します。

Lower = Lbound(AnyArray)

' Option Base の設定に応じて、0 または 1 を返します。


Let ステートメントの使用例

次の例は、明示的に Let ステートメントを使って、式の値を変数に代入するものです。

Dim MyStr, MyInt

' Let ステートメントを使って変数を代入します。

Let MyStr = "Hello World"

Let MyInt = 5

次に示すように、Let ステートメントを使わずに値を代入しても同じ結果が得られます。

Dim MyStr, MyInt

MyStr = "Hello World"

MyInt = 5


Option Base ステートメントの使用例

次の例では、Option Base ステートメントを使って、配列の添字の既定の最小値 0 を変更します。LBound 関数は、配列内の指定された次元の添字の最小値を返します。Option Base ステートメントは、モジュール レベルでのみ使います。

Option base 1	' 配列の添字の既定値を 1 に設定します。

Dim Lower

Dim MyArray(20), TwoDArray(3, 4)	' 配列変数を宣言します。

Dim ZeroArray(0 To 5)	' 添字の既定の最小値を変更します。

' 配列の添字の最小値を求めるには、LBound 関数を使います。

Lower = LBound(MyArray)	' 1 が返ります。

Lower = LBound(TwoDArray, 2)	' 1 が返ります。

Lower = LBound(ZeroArray)	' 0 が返ります。


Option Compare ステートメントの使用例

次の例では、Option Compare ステートメントを使って、既定の文字列比較方法を変更します。Option Compare ステートメントは、モジュール レベルでのみ使用します。

' 文字列比較方法を Binary モードに設定します。

Option compare Binary 	' "AAA" は、"aaa" よりも小さくなります。

' 文字列比較方法を Text モードに設定します。

Option compare Text	' "AAA" と "aaa" は、等価です。


Option Explicit ステートメントの使用例

次の例では、Option Explicit ステートメントを使って、すべての変数を明示的に宣言するように設定します。宣言されていない変数を使うとコンパイル時にエラーが発生します。Option Explicit ステートメントは、モジュール レベルでのみ使用します。

Option explicit	' すべての変数を明示的に宣言するようにします。

Dim MyVar	' 変数を宣言します。

MyInt = 10	' 宣言されていない変数を使うとエラーが発生します。

MyVar = 10	' 宣言済みの変数であれば、エラーは発生しません。


Option Private ステートメントの使用例

次の例では、Option Private ステートメントをモジュール レベルで使って、モジュール全体をプライベートとして設定します。Option Private Module では、Private 宣言を行っていないモジュール レベルの要素は、そのモジュールが含まれるプロジェクト内からは参照できますが、ほかのアプリケーションやほかのプロジェクトからは参照できません。

Option private Module

' モジュールがプライベートであることを示します。


Private ステートメントの使用例

次の例では、Private ステートメントをモジュール レベルで使って、変数をプライベートとして宣言しています。このような変数は、宣言を行っているモジュール内でのみ使用可能となります。

Private Number As Integer	' 整数型の変数をプライベートにします。

Private NameArray(1 To 5) As String

' 配列変数をプライベートにします。

' 1 行で複数の変数を宣言します。

' 2 つのバリアント型変数と 1 つの整数型変数がすべてプライベートになります。

Private MyVar, YourVar, ThisVar As Integer


Property Get ステートメントの使用例

次の例では、Property Get ステートメントを使って、プロパティの値を取得するための Property プロシージャを定義します。このプロパティは、現在のペンの色を文字列で示します。

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' 現在のペンの色を示す文字列を返します。

Property Get PenColor() As String

Select Case CurrentColor

Case RED

PenColor = "Red"

Case GREEN

PenColor = "Green"

Case BLUE

PenColor = "Blue"

End Select

End Property

' 次のコードでは、Property Get プロシージャを呼び出して、

' ペンの色を取得しています。

ColorName = PenColor


Property Let ステートメントの使用例

次の例では、Property Let ステートメントを使って、プロパティに値を代入するプロシージャを定義します。プロパティの値は描画パッケージのペンの色を示します。

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' 描画パッケージのペン色を指定するプロパティを設定します。

' モジュール レベル変数 CurrentColor には、

' 描画に用いられる色を指定する数値が設定されます。

Property Let PenColor(ColorName As String)

Select Case ColorName	' 色の名前を調べます。

Case "Red"

CurrentColor = RED	' 赤に対応する値を代入します。

Case "Green"

CurrentColor = GREEN	' 緑に対応する値を代入します。

Case "Blue"

CurrentColor = BLUE	' 青に対応する値を代入します。

Case Else

CurrentColor = BLACK	' 既定値を代入します。

End Select

End Property

' 次のコードでは、Property Let プロシージャを呼び出して

' 描画パッケージの PenColor プロパティの値を設定します。

PenColor = "Red"


Property Set ステートメントの使用例

次の例では、Property Set ステートメントを使って、オブジェクトへの参照を設定する Property プロシージャを宣言します。

' Pen プロパティに、別のペンのインプリメントを設定します。

Property Set Pen(P As Object)

Set CurrentPen = P	' Pen をオブジェクトに代入します。

End Property


Public ステートメントの使用例

次の例では、標準モジュールのモジュール レベル (宣言セクション) で、Public ステートメントを使って、変数を明示的にパブリックとして宣言します。このように宣言された変数は、Option Private Module が有効でない限り、すべてのアプリケーションの全モジュールの全プロシージャから使うことができます。

Public Number As Integer	' 整数型変数をパブリックにします。

Public NameArray(1 To 5) As String

' 配列変数をパブリックにします。

' 1 行で複数の変数を宣言します。

' 2 つのバリアント型変数と 1 つの整数型変数がすべてパブリックになります。

Public MyVar, YourVar, ThisVar As Integer


ReDim ステートメントの使用例

次の例では、ReDim ステートメントを使って、動的配列変数を保存するメモリ領域の割り当てと再割り当てを行います。Option Base ステートメントには、1 が設定されているものとします。

Dim MyArray() As Integer	' 動的配列を宣言します。

Redim MyArray(5)	' 5 要素分の領域を割り当てます。

For I = 1 To 5	' 5 回、ループします。

MyArray(I) = I	' 配列を初期化します。

Next I

次のステートメントは、配列のサイズを変更して、以前の要素を消去します。

Redim MyArray(10)	' 配列の要素数を 10 に変更します。

For I = 1 To 10	' 10 回、ループします。

MyArray(I) = I	' 配列を初期化します。

Next I

次のステートメントでは、以前の要素を消去せずに、配列のサイズを変更します。

Redim Preserve MyArray(15)

' 配列の要素数を 15 に変更します。


Rem ステートメントの使用例

次の例では、Rem ステートメントを使って、プログラムのコメントを記述しています。

Dim MyStr1, MyStr2

MyStr1 = "Hello": Rem ステートメントの後にコロンを付けてコメントを記述します。

MyStr2 = "Goodbye" 	' これもコメントです。この場合、コロンは不要です。


Set ステートメントの使用例

次の例では、Set ステートメントを使って、オブジェクトへの参照を変数に代入します。YourObject は、Text プロパティを持つ有効なオブジェクトであるとします。

Dim YourObject, MyObject, MyStr

Set MyObject = YourObject	' オブジェクトへの参照を代入します。

' MyObject と YourObject は、同一のオブジェクトを参照します。

YourObject.Text = "Hello World"	' プロパティを初期化します。

MyStr = MyObject.Text	' Hello World" を返します。

' 関連付けを解除します。MyObject は、YourObject を参照しなくなります。

Set MyObject = Nothing	' オブジェクトを解放します。


Static ステートメントの使用例

次の例では、Static ステートメントを使って、モジュール コードが実行されている間、変数の値を保持します。

' 関数を定義します。

Function KeepTotal(Number)

' 次にこの関数が呼び出されるときまで値が保持されるのは、

' 変数 Accumulate だけです。

Static Accumulate

Accumulate = Accumulate + Number

KeepTotal = Accumulate

End Function

' Static ステートメントを使って関数を定義します。

Static Function MyFunction(Arg1, Arg2, Arg3)

' すべてのローカル変数の値は、この関数が次に呼び出されるときまで

' 保持されます。

Accumulate = Arg1 + Arg2 + Arg3

Half = Accumulate / 2

MyFunction = Half

End Function


Sub ステートメントの使用例

次の例は、Sub ステートメントを使って、Sub プロシージャの名前と引数を宣言し、プロシージャのコードを記述しています。

' Sub プロシージャを定義します。

' 2 つの引数を持つ Sub プロシージャになります。

Sub SubComputeArea(Length, TheWidth)

Dim Area As Double	' ローカル変数を宣言します。

If Length = 0 Or TheWidth = 0 Then

' いずれかの変数の値が 0 の場合

Exit Sub	' Sub プロシージャを直ちに終了します。

End If

Area = Length * TheWidth	' 四角形の面積を計算します。

Debug.Print Area	' 面積をデバッグ ウィンドウに表示します。

End Sub


Type ステートメントの使用例

次の例では、Type ステートメントを使って、ユーザー定義のデータ型を定義します。Type ステートメントは、モジュール レベルでのみ使用します。クラス モジュールで使用する場合は、Type ステートメントの直前にキーワード Private を付ける必要があります。

Type EmployeeRecord	' ユーザー定義型を作成します。

ID As Integer	' データ型の要素を定義します。

Name As String * 20

Address As String * 30

Phone As Long

HireDate As Date

End Type

Sub CreateRecord()

Dim MyRecord As EmployeeRecord	' 変数を宣言します。

' 変数 EmployeeRecord への代入は、

' プロシージャ内に記述しなければなりません。

MyRecord.ID = 12003	' 要素に値を代入します。

End Sub


UBound 関数の使用例

次の例では、UBound 関数を使って、配列の指定された次元の添字として使える最大値を求めます。

Dim Upper

Dim MyArray(1 To 10, 5 To 15, 10 To 20)

' 配列変数を宣言します。

Dim AnyArray(10)

Upper = UBound(MyArray, 1)	' 10 が返ります。

Upper = UBound(MyArray, 3)	' 20 が返ります。

Upper = UBound(AnyArray)	' 10 が返ります。


CallByName 関数の使用例

次の例では、CallByName 関数を使ってコマンド ボタンの Move メソッドを実行します。

この例では、コマンド ボタン (Command1) とラベル (Label1) の配置されたフォーム (Form1) を使用しています。 フォームがロード時に、ラベルの Caption プロパティに、呼び出されるメソッドの名前を表す "Move"という文字列が設定されます。ボタンをクリックすると、CallByName 関数によってボタンの位置を変更するメソッドが呼び出されます。

Option Explicit

Private Sub Form_Load()

Label1.Caption = "Move"	' Move メソッドの名前を表しています。

End Sub

Private Sub Command1_Click()

If Command1.Left <> 0 Then

CallByName Command1, Label1.Caption, vbMethod, 0, 0

Else

CallByName Command1, Label1.Caption, vbMethod, 500, 500

End If


As <キーワード>
As キーワード

キーワード As は、次の構文で使用します。

Const ステートメント

Declare ステートメント

Dim ステートメント

Function ステートメント

Name ステートメント

Open ステートメント

Private ステートメント

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント

Public ステートメント

ReDim ステートメント

Static ステートメント

Sub ステートメント

Type ステートメント


Binary <キーワード>
Binary キーワード

キーワード Binary は、次の構文で使用します。

Open ステートメント

Option Compare ステートメント


ByRef <キーワード>
ByRef キーワード

キーワード ByRef は、次の構文で使用します。

Call ステートメント

Declare ステートメント

Function ステートメント

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント

Sub ステートメント


ByVal <キーワード>
ByVal キーワード

キーワード ByVal は、次の構文で使用します。

Call ステートメント

Declare ステートメント

Function ステートメント

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント

Sub ステートメント


Date <キーワード>
Date キーワード

キーワード Date は、次の構文で使用します。

日付型 (Date)

Date 関数

Date ステートメント


Else <キーワード>
Else キーワード

キーワード Else は、次の構文で使用します。

If...Then...Else ステートメント

Select Case ステートメント


Error <キーワード>
Error キーワード

キーワード Error は、次の構文で使用します。

Error 関数

Error ステートメント

On Error ステートメント


For <キーワード>
For キーワード

キーワード For は、次の構文で使用します。

For...Next ステートメント

For Each...Next ステートメント

Open ステートメント


Get <キーワード>
Get キーワード

キーワード Get は、次の構文で使用します。

Get ステートメント

Property Get ステートメント


Input <キーワード>
Input キーワード

キーワード Input は、次の構文で使用します。

Input 関数

Input # ステートメント

Line Input # ステートメント

Open ステートメント


Is <キーワード>
Is キーワード

キーワード Is は、次の構文で使用します。

If...Then...Else ステートメント

Is 演算子

Select Case ステートメント


Len <キーワード>
Len キーワード

キーワード Len は、次の構文で使用します。

Len 関数

Open ステートメント


Let <キーワード>
Let キーワード

キーワード Let は、次の構文で使用します。

Let ステートメント

Property Let ステートメント


Lock <キーワード>
Lock キーワード

キーワード Lock は、次の構文で使用します。

Lock、Unlock ステートメントs

Open ステートメント


Mid <キーワード>
Mid キーワード

キーワード Mid は、次の構文で使用します。

Mid 関数

Mid ステートメント


New <キーワード>
New キーワード

キーワード New は、次の構文で使用します。

Dim ステートメント

Private ステートメント

Public ステートメント

Set ステートメント

Static ステートメント


Next <キーワード>
Next キーワード

キーワード Next は、次の構文で使用します。

For...Next ステートメント

For Each...Next ステートメント

On Error ステートメント

Resume ステートメント


On <キーワード>
On キーワード

キーワード On は、次の構文で使用します。

On Error ステートメント

On...GoSub ステートメント

On...GoTo ステートメント


Option <キーワード>
Option キーワード

キーワード Option は、次の構文で使用します。

Option Base ステートメント

Option Compare ステートメント

Option Explicit ステートメント

Option Private ステートメント


Optional <キーワード>
Optional キーワード

キーワード Optional は、次の構文で使用します。

Declare ステートメント

Function ステートメント

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント

Sub ステートメント


ParamArray <キーワード>
ParamArray キーワード

キーワード ParamArray は、次の構文で使用します。

Declare ステートメント

Function ステートメント

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント

Sub ステートメント


Print <キーワード>
Print キーワード

キーワード Print は、次の構文で使用します。

Print メソッド

Print # ステートメント


Private <キーワード>
Private キーワード

キーワード Private は、次の構文で使用します。

Const ステートメント

Declare ステートメント

Enum ステートメント

Function ステートメント

Option Private ステートメント

Private ステートメント

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント

Sub ステートメント

Type ステートメント


Property <キーワード>
Property キーワード

キーワード Property は、次の構文で使用します。

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント


Public <キーワード>
Public キーワード

キーワード Public は、次の構文で使用します。

Const ステートメント

Declare ステートメント

Enum ステートメント

Event ステートメント

Function ステートメント

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント

Public ステートメント

Sub ステートメント

Type ステートメント


Resume <キーワード>
Resume キーワード

キーワード Resume は、次の構文で使用します。

On Error ステートメント

Resume ステートメント


Seek <キーワード>
Seek キーワード

キーワード Seek は、次の構文で使用します。

Seek 関数

Seek ステートメント


Set <キーワード>
Set キーワード

キーワード Set は、次の構文で使用します。

Set ステートメント

Property Set ステートメント


Static <キーワード>
Static キーワード

キーワード Static は、次の構文で使用します。

Function ステートメント

Property Get ステートメント

Property Let ステートメント

Property Set ステートメント

Static ステートメント

Sub ステートメント


Step <キーワード>
Step キーワード

キーワード Step は、次の構文で使用します。

For...Next ステートメント

For Each...Next ステートメント


String <キーワード>
String キーワード

キーワード String は、次の構文で使用します。

文字列型 (String)

String 関数


Then <キーワード>
Then キーワード

キーワード Then は、次の構文で使用します。

#If...Then...#Else ディレクティブ

If...Then...Else ステートメント


Time <キーワード>
Time キーワード

キーワード Time は、次の構文で使用します。

Time 関数

Time ステートメント


To <キーワード>
To キーワード

キーワード To は、次の構文で使用します。

Dim ステートメント

For...Next ステートメント

Lock、Unlock ステートメントs

Private ステートメント

Public ステートメント

ReDim ステートメント

Select Case ステートメント

Static ステートメント

Type ステートメント


WithEvents <キーワード>
WithEvents キーワード

キーワード WithEvents は、次の構文で使用します。

Dim ステートメント

Private ステートメント

Public ステートメント


表記規則

Visual Basic のヘルプは、次の表記規則に従って記述されています。

表記	内容
Sub, If, ChDir, Print, True, Debug	Visual Basic 特有のキーワードは、太字で先頭を大文字で表記します。
setup	記述どおりに入力する文字列は、太字で表します。
object, varname, arglist	構文内の斜体は、ファイル名など、実際に入力するときには、該当する文字に置き換える必要のあるプレースホルダを示します。
pathname, filenumber	構文内の太字斜体は、通常の構文に加えて名前付き引数の構文が使用できる引数を示します。
[expressionlist]	構文内の角かっこ ([ ]) は、囲まれた項目が省略できることを示します。
{While | Until}	構文内の中かっこ ({ }) と縦棒の組み合わせは、縦棒で区切られた複数の項目から 1 つを選択する必要があることを示します。次に示すように全体が角かっこ ([ ]) で囲まれている場合以外は、いずれか 1 つの項目を必ず選択しなければなりません。
	[{This | OrThat}]
Shift、F5、A	キー名は、太字の Helvetica フォントで、先頭を大文字で表記します。
Alt + F1、Ctrl + R	プラス記号 (+) は、キーの組み合わせを表します。たとえば、Alt + F1 は Alt キーを押しながら、F1 キーを押すことを表します。
MyString = "Hello, world!"	コード例は、この書体で表記します。
' コメント文字列。	コメントは、クォーテーション ( ' ) で始まりを示します。
MyVar = "This is an " _ & "example" _ & " of how to continue code."	スペースとアンダスコア ( _) の組み合わせは、コードが次の行に続くことを表します。実際にプログラムとして実行されるときは、1 行とみなされます。
バリアント型 (Variant)、 整数型 (Integer)	データ型の名前の後ろにかっこ ( ) で囲んで表記しているキーワードは、そのデータ型を宣言するためのキーワードを示します。
ランダム アクセス モード (Random)、 シーケンシャル出力モード (Output)	ファイル モードの後ろにかっこ ( ) で囲んで表記しているキーワードは、そのファイル モードでファイルを開くときに Open ステートメントで指定するキーワードを示します。


Error 関数の使用例

次の例は、Error 関数を使って、エラー番号に対応したエラー メッセージを出力します。

Dim ErrorNumber

For ErrorNumber = 61 To 64	' エラー番号 61 ～ 64 を対象にします。

Debug.Print Error(ErrorNumber)	' エラー メッセージをデバッグ ウィンドウに表示します。

Next ErrorNumber


Error ステートメントの使用例

次の例は、Error ステートメントを使って、擬似的にエラー番号 11 のエラーを発生させます。

On Error Resume Next	' エラー処理を行います。

Error 11	' 疑似的に 「0 で除算しました。」というエラーを発生させます。


On Error ステートメントの使用例

次の例は、最初に On Error GoTo ステートメントを使って、プロシージャ内にエラー処理ルーチンを設定します。開かれたファイルに対して削除を試みて、エラー番号 55 を発生させます。このエラーに対する処理をエラー処理ルーチンで行ってから、エラーが発生したステートメントに制御を戻します。On Error GoTo 0 ステートメントでは、エラー処理ルーチンを無効にしています。次に、On Error Resume Next ステートメントを使ってエラーのトラップを無効にし、次のステートメントによって生成されたエラーの発生状況がわかるようにします。エラー処理が終わった後、Err オブジェクトのプロパティをクリアするために Err.Clear を使用しています。

Sub OnErrorStatementDemo()

On Error GoTo ErrorHandler	' エラー処理ルーチンを行います。

Open "TESTFILE" For Output As #1	' 出力ファイルを開きます。

Kill "TESTFILE"	' 開いたファイルの削除を試みます。

On Error Goto 0	' エラーのトラップを無効にします。

On Error Resume Next	' エラーのトラップを留保します。

ObjectRef = GetObject("MyWord.Basic")	' 存在しないオブジェクトの起動を試みます。

' その後、オートメーション エラーの発生を調べます。

If Err.Number = 440 Or Err.Number = 432 Then

' 発生したエラーの内容を表示した後、Err オブジェクトをクリアします。

Msg = "オートメーション オブジェクトが開けません。"

MsgBox Msg, , "Error ｽﾃｰﾄﾒﾝﾄのﾃｽﾄを留保します。"

Err.Clear	' Err オブジェクトのプロパティをクリアします。

End If

Exit Sub	' エラー処理ルーチンが実行されないように Sub を終了します。

ErrorHandler:	' エラー処理ルーチン。

Select Case Err.Number	' エラー番号を評価します。

Case 55	' "ファイルは既に開かれています。" というエラーです。

Close #1	' 開いたファイルを閉じます。

Case Else

' 他のエラー処理をここに記述します。

End Select

Resume	' エラーが発生した行から処理を再開します。

End Sub


Resume ステートメントの使用例

次の例は、Resume ステートメントを使って、エラー処理を終了して、エラー発生位置から処理を再開します。この例では、エラー番号 55 を発生させます。

Sub ResumeStatementDemo()

On Error GoTo ErrorHandler	' エラー処理を行います。

Open "TESTFILE" For Output As #1	' 出力ファイルを開きます。

Kill "TESTFILE"	' 開いたファイルの削除を試みます。

Exit Sub	' エラー処理ルーチンが実行されないように Sub を終了します。

ErrorHandler:	' エラー処理ルーチン。

Select Case Err.Number	' エラー番号を評価します。

Case 55	' "ファイルは既に開かれています。" というエラーです。

Close #1	' 開いたファイルを閉じます。

Case Else

' 他のエラー処理をここに記述します。

End Select

Resume	' エラーが発生した行から処理を再開します。

End Sub


Error 関数

指定したエラー番号に対応するエラー メッセージを返します。

構文

Error[(errornumber)]

引数 errornumber には任意のエラー番号を指定します。この引数は省略可能です。有効な範囲内で定義されていない番号を引数 errornumber に指定すると、Error 関数は "ユーザー定義エラー" という文字列を返します。引数 errornumber が有効な範囲内の番号であり、定義されていない場合、Error 関数は文字列 "アプリケーション定義またはオブジェクト定義のエラーです。" を返します。有効な範囲外の番号を指定すると、実行時エラーが発生します。引数 errornumber を省略すると、最後に発生した実行時エラーに対応するメッセージを返します。実行時エラーが発生していない場合、Error 関数は長さ 0 の文字列 ("") を返します。

解説

Err オブジェクトのプロパティの設定値を検証して、最新の実行時エラーを識別します。Error 関数の戻り値は、Err オブジェクトの Description プロパティに対応します。


Error ステートメント

エラーを疑似的に発生させます。

構文

Error errornumber

引数 errornumber には任意のエラー番号を指定します。この引数は必ず指定します。

解説

Error ステートメントは、以前のバージョンの Visual Basic と互換性があります。現在のバージョンでは、特にオブジェクトを作成する場合、Err オブジェクトの Raise メソッドを使用して実行時エラーを生成します。

引数 errornumber が定義されている場合、Err オブジェクトのプロパティに次に示す既定値が代入された後、Error ステートメントによりエラー処理ルーチンが呼び出されます。

プロパティ	値
Number	Error ステートメントの引数として指定した値が設定されます。任意の有効なエラー番号を設定できます。
Source	現在の Visual Basic のプロジェクト名が設定されます。
Description	指定した Number プロパティの値に対応する Error 関数の戻り値が存在する場合は、この戻り値に対応する文字列式が設定されます。この文字列が存在しない場合は、Description プロパティには長さ 0 の文字列 ("") が格納されます。
HelpFile	Visual Basic ヘルプ ファイルのドライブ、パス、およびファイル名が設定されます。
HelpContext	Number プロパティに対応するエラーの Visual Basic ヘルプ ファイルのコンテキスト番号が設定されます。
LastDLLError	0。
エラー処理ルーチンが存在しないか、または使用可能なエラー処理ルーチンがない場合は、エラー メッセージが作成され、Err オブジェクトのプロパティによって表示されます。

メモ   すべての Visual Basic のホスト アプリケーションでオブジェクトを作成できるわけではありません。使用しているホスト アプリケーションのマニュアルを参照してクラスおよびオブジェクトを作成できるかどうかを確認してください。


On Error ステートメント

エラー処理ルーチンを有効にし、プロシージャ内でのエラー処理ルーチンの位置を指定します。エラー処理ルーチンを無効にするときに使うこともできます。

構文

On Error GoTo line

On Error Resume Next

On Error GoTo 0

On Error ステートメントの形式は次のとおりです。

ステートメント	内容
On Error GoTo line	引数 line に指定した行から始まるエラー処理ルーチンを有効にします。引数 line は必ず指定します。引数 line には任意の行ラベルまたは行番号を指定します。実行時エラーが生成されると、ここで設定したエラー処理ルーチンにプログラムの制御が移り、エラー処理ルーチンがアクティブになります。引数 line に指定する行は、On Error ステートメントと同じプロシージャ内に存在しなければなりません。この制限に従わなければ、コンパイル時エラーが発生します。
On Error Resume Next	実行時エラーが発生してもプログラムを中断せず、エラーが発生したステートメントの次のステートメントから実行を継続します。オブジェクトを操作する場合は、On Error GoTo ステートメントではなく、このステートメントを使ってください。
On Error GoTo 0	現在のプロシージャに含まれる使用可能なエラー処理ルーチンを無効にします。
解説

On Error ステートメントを使用していない場合に実行時エラーが発生すると、そのエラーは致命的エラーになり、エラー メッセージが表示されてプログラムの実行が停止します。

"使用可能な" エラー処理ルーチンとは、On Error ステートメントによって有効になっている処理ルーチンのことです。"アクティブな" エラー処理ルーチンとは、エラー処理中の使用可能な処理ルーチンのことです。エラー処理ルーチンがアクティブになっている間 (エラーの発生と Resume、Exit Sub、Exit Function、または Exit Property ステートメントの間) は、カレント プロシージャのエラー処理ルーチンはエラーを処理できません。制御は呼び出し側のプロシージャに戻ります。呼び出し側のプロシージャに使用可能なエラー処理ルーチンがあれば、そのルーチンがエラーを処理するためにアクティブになります。呼び出し側のプロシージャのエラー処理ルーチンもアクティブであれば、使用可能で非アクティブなエラー処理ルーチンが見つかるまで、制御はプロシージャを呼び出したプロシージャへと引き渡されます。使用可能で非アクティブなエラー処理ルーチンが見つからなければ、そのエラーは実際に発生した位置で致命的なエラーになります。エラー処理ルーチンがコントロールを呼び出し側のプロシージャに戻すたびに、そのプロシージャがカレント プロシージャになります。いずれかのプロシージャ内でエラー処理ルーチンによってエラーが処理されると、Resume ステートメントで指定した時点でカレント プロシージャ内で実行が再開されます。

メモ   エラー処理ルーチンは、Sub プロシージャまたは Function プロシージャではありません。行ラベルまたは行番号で識別されるコードの一部分です。

エラー処理ルーチンは、Err オブジェクトの Number プロパティを基にエラーの原因を判別します。また、エラー処理ルーチンは他のエラーが発生する前、またはエラーを引き起こすプロシージャが呼び出される前に、関連する Err オブジェクトのプロパティの値をテストまたは保存する必要があります。Err オブジェクトのプロパティの値には、最新のエラーだけが反映されます。Err オブジェクトの Number プロパティに関連付けられたエラー メッセージは、Err オブジェクトの Description プロパティに指定されています。

On Error Resume Next ステートメントは、実行時エラーを発生させたステートメントの直後にあるステートメント、または On Error Resume Next ステートメントを含むプロシージャから最後に呼び出しを行った直後のステートメントを使って、実行を継続します。このステートメントを使って、実行時エラーが生成されても処理を続けることができます。プロシージャ内の他の場所に制御を移動せずに、エラー処理ルーチンをエラーが発生する可能性のある場所に配置できます。On Error Resume Next ステートメントは、別のプロシージャが呼び出されるとアクティブでなくなるので、そのルーチン内でインライン エラー処理を行う場合は、呼び出される各ルーチン内で On Error Resume Next ステートメントを実行する必要があります。

メモ   他のオブジェクトを操作しているときに発生したエラーを処理する場合は、On Error GoTo ステートメントよりも On Error Resume Next 構造の方が適しています。オブジェクトとの各やり取りの後で Err オブジェクトを調べることにより、どのオブジェクトをコードで操作したのかどうかを確認します。Err オブジェクトの Number プロパティにエラー コードを設定したオブジェクト、および最初にエラーを発生させたオブジェクトを Err オブジェクトの Source プロパティで調べることができます。

On Error GoTo 0 ステートメントは、現在のプロシージャ内のエラー処理を無効にします。プロシージャに番号が 0 の行が含まれていても、その行はエラー処理コードの先頭として指定されません。On Error GoTo 0 ステートメントを指定していない場合、エラー処理ルーチンはプロシージャの終了時に自動的に無効になります。

エラーの発生時以外にエラー処理コードが実行されないようにするには、そのエラー処理ルーチンの直前に Exit Sub、Exit Function、または Exit Property のうち、該当するステートメントを配置します。次に例を示します。

Sub InitializeMatrix(Var1, Var2, Var3, Var4)

On Error GoTo ErrorHandler

. . .

Exit Sub

ErrorHandler:

. . .

Resume Next

End Sub

この例では、エラー処理コードは Exit Sub ステートメントと End Sub ステートメントの間にあり、通常のプロシージャの流れから区切られています。エラーを処理するためのコードは、プロシージャ内の任意の場所に配置できます。

オブジェクトを実行可能ファイルとして実行しているときにオブジェクトでトラップできないエラーが発生すると、制御側のアプリケーションにエラーが返されます。開発環境では、トラップできないエラーは、適切にオプションが設定されている場合のみ制御側のアプリケーションに返されます。使用しているホスト アプリケーションのマニュアルでデバッグ時にどのオプションを設定する必要があるのか、オプションの設定方法、およびホスト アプリケーションがクラスを作成できるかどうかを参照してください。

他のオブジェクトを操作するオブジェクトを作成する場合、他のオブジェクトから未処理のまま返されるエラーを処理する必要があります。このようなエラーを処理できない場合は、Err オブジェクトの Number プロパティを使用して作成したエラーの 1 つにエラー コードを割り当てます。次に、作成したオブジェクトを呼び出しているアプリケーションにエラーを引き渡します。エラーを指定するには、エラー コードを定数 vbObjectError に追加します。たとえば、エラー コードが 1052 であれば、次のように代入します。

Err.Number = vbObjectError + 1052

メモ   ダイナミック リンク ライブラリ (DLL)または Macintosh のコード リソースを呼び出しているときに発生するエラーは、Visual Basic のエラー トラップではトラップされません。DLL 関数を呼び出す場合、各関数の戻り値を API の仕様を基に確認し、処理が完了したかどうか、または失敗したかどうかを判断します。次に、エラーが発生したイベントで Err オブジェクトの LastDLLError プロパティの値を確認します。Macintosh では、LastDLLError プロパティは、常に 0 の値を返します。


Resume ステートメント

エラー処理ルーチンの終了後に、プログラムの実行を再開します。

構文

Resume [0]

Resume Next

Resume line

Resume ステートメントの構文の形式は次のとおりです。

ステートメント	内容
Resume [0]	エラー処理ルーチンと同じプロシージャ内でエラーが発生した場合、エラーの原因となったステートメントからプログラムの実行が再開されます。呼び出されたプロシージャ内でエラーが発生した場合、エラー処理ルーチンを含むプロシージャが最後に呼び出したステートメントからプログラムの実行が再開されます。
Resume Next	エラー処理ルーチンと同じプロシージャ内でエラーが発生した場合、エラーの原因となったステートメントの次のステートメントからプログラムの実行が再開されます。呼び出されたプロシージャ内でエラーが発生した場合、エラー処理ルーチンを含むプロシージャが最後に呼び出したステートメントの次のステートメント、または On Error Resume Next ステートメントからプログラムの実行が再開されます。
Resume line	引数 line に指定した行からプログラムの実行が再開されます。引数 line は必ず指定します。引数 line には行ラベルまたは行番号を指定します。また、エラー処理ルーチンと同じプロシージャに指定する必要があります。
解説

エラー処理ルーチン以外の場所で Resume ステートメントを使用すると、エラーが発生します。


#Else 節の前には対応する #If 節が必要です。

#Else は、条件付きコンパイラ ディレクティブです。エラーの原因と対処方法を次に示します。

•	#Else 節の前に、対応する #If または #ElseIf がありません。

#Else に対応する #If との間に #End If がないかどうかを確認します。#If ブロックには、#Else は 1 つだけしか記述できません。#Else 節が 2 つ続いている場合は、このエラーになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


#Else If、#Else または #EndIf の前には #If 節が必要です。

#Else If、#Else、および #End If は、条件付きコンパイラ ディレクティブです。エラーの原因と対処方法を次に示します。

•	#Else If、#Else、または #End If の前に対応する #If がありません。

この節に対応する #If との間に別のブロックがないかどうか、または対応する #If にシャープ記号 (#) が付いているかどうかを確認します。これらが原因でない場合は、適切な位置に #If 節を記述します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


#ElseIf の前には #If または #ElseIf が必要です。またその下には #Else または #EndIf が必要です。

#ElseIf は、条件付きコンパイラ ディレクティブです。エラーの原因と対処方法を次に示します。

•	#ElseIf の前に対応する #If または #ElseIf がありません。

#ElseIf の前に #If ステートメントを記述するか、不要な #End If を削除します。

•	#ElseIf の前に #Else または #End If が見つかりました。

前の #If ブロックを適切に終了するか、または前にある #Else を #ElseIf に変更します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


互換 ActiveX コンポーネントが Visual Basic の実行可能ファイルではありません。

互換 ActiveX コンポーネントは、互換 ActiveX コンポーネントとして指定したコンポーネントです。

•	Visual Basic は、互換 ActiveX コンポーネントとして指定されたオブジェクトにアクセスしようとしましたが、指定したファイルは、実行可能ファイルまたは Visual Basic で作成されたダイナミック リンク ライブラリ (DLL)ではありませんでした。

[プロジェクト] メニューから [プロジェクト プロパティ] を選択すると、[プロジェクト プロパティ] ダイアログ ボックスが表示されます。このダイアログ ボックスの互換 ActiveX コンポーネント フィールドには、実行可能ファイルまたは Visual Basic で作成された DLL ファイルのみが指定できます。プロジェクト を Visual Basic に読み込むことができる場合は、[ファイル] メニューから[<プロジェクト名>.exe の作成] を選択して、Visual Basic で実行可能ファイルを作成してください。実行可能ファイルが Visual Basic 以外の環境で作成されている場合、あるいはそのファイルを Visual Basic にロードできない場合は、その実行可能ファイルを Visual Basic の実行可能ファイルに変換できるかどうか、あるいは Visual Basic で作成した実行可能ファイルが入手可能かどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ウィザードはプロジェクトを参照できません。

プロジェクトは動的ですが、アドインは静的です。エラーの原因と対処方法を次に示します。

•	別のプロジェクトを参照するプロジェクトからアドインを作成しようとしています。

プロジェクトの解釈は多少変わることがあり、参照するプロジェクトやアドインにも影響を与えます。したがって、プロジェクトを参照するプロジェクトからアドインを作成することはできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正なモジュールです。

標準モジュールはクラスを表さず、変数の形でインスタンスを作成できません。エラーの原因と対処方法を次に示します。

•	標準モジュールの名前が Dim 宣言または Set 宣言に記述されています。

モジュール名を確認し、フォーム、MDI フォーム、またはクラス モジュールに対応することを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ParamArray 内の引数は、名前付き引数ではありません。

プロシージャを呼び出す際の引数を ParamArray で定義している場合は、そのすべての引数は位置が固定されていなければなりません。エラーの原因と対処方法を次に示します。

•	プロシージャ呼び出しで名前付き引数構文が使用されています。

名前付き引数の呼び出し構文を使用して、ParamArray 引数を含むプロシージャは呼び出せません。ParamArray の全要素のうち一部だけを指定するには、省略する要素に対してカンマをプレースホルダとして使用します。たとえば、次の呼び出しで、Arg2 の次に ParamArray 引数が続く場合は、ParamArray の 1 番目、3 番目、および 6 番目の値だけが引き渡されます。

MySub Arg1, Arg2, 7,, 44,,,3

メモ   ParamArray は常に、引数リストの最後の項目を表します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


名前が適切ではありません。

識別子が別の識別子と競合しているか、または修飾が必要です。エラーの原因と対処方法を次に示します。

•	同じ適用範囲にある複数のオブジェクトに、同じ名前の要素がある可能性があります。

要素名にオブジェクト名とピリオドを付加して修飾します。次に例を示します。

object.property

モジュール レベル識別子とプロジェクト レベル識別子 (モジュール名と参照先プロジェクト名) はプロシージャ内で再使用できますが、プログラミングが複雑になり、デバッグも難しくなります。両方の項目を同じプロシージャで参照する場合、適用範囲が広い方の項目は修飾しなければなりません。たとえば、MyModule のモジュール レベルで MyID を宣言している場合、プロシージャ レベルの変数をそのモジュール内に同じ名前で宣言しているときは、モジュール レベルの変数を適切に修飾しなければなりません。

Dim MyID As String

Sub MySub

MyModule.MyID = "モジュールレベルの変数です。"

Dim MyID As String

MyID = "プロシージャ レベルの変数です。"

Debug.Print MyID

Debug.Print MyModule.MyID

End Sub

•	モジュール レベルで宣言された識別子が、プロシージャ名と競合しています。たとえば、変数 MyID をモジュール レベルで宣言し、プロシージャを同じ名前で定義すると、このエラーになります。

Public MyID

Sub MyID

. . .

End Sub

この場合、共有モジュール名で修飾しても特定できないため、いずれかの名前を変更しなければなりません。プロシージャ名は特に指定しない限り、既定の Public ですが、変数名は Public と指定しない限り Private です。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


AppleScript のエラーです。

スクリプトの処理中にエラーが発生しました。エラーの原因と対処方法を次に示します。

•	エラーの原因は、ターゲット アプリケーションにある可能性があります。

スクリプト内の識別子がアプリケーションのものと一致するかどうかを確認します。

•	エラーの原因は、AppleScript にある可能性があります。

スクリプトで使用している構文が、AppleScript 構文で有効なものかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


アプリケーション定義またはオブジェクト定義のエラーです。

このメッセージは、Raise メソッドまたは Error ステートメントで生成されたエラーが、Visual Basic for Applications で定義されているエラーと一致しない場合に表示されます。また、引数が Visual Basic for Applications で定義されているエラーと一致しない場合にも、Error 関数によって返されます。したがって、原因は自分で定義したエラーであるか、または Microsoft Excel や Visual Basic のようなホスト アプリケーションなど、オブジェクトで定義されているエラーが考えられます。たとえば、Visual Basic フォームで生成されるフォーム関連のエラーは、コードで Raise メソッドまたは Error ステートメントの引数に数値を指定して生成することはできません。エラーの原因と対処方法を次に示します。

•	アプリケーションで実行した Err.Raise n ステートメントまたは Error n ステートメントの数値 n が、Visual Basic for Applications で定義されていません。

このステートメントをこのまま使用する場合は、Err.Raise を使用し、引数を追加して、エンド ユーザーにエラーの内容がわかるようにする必要があります。たとえば、エラーの内容を説明する文字列、ソース、ヘルプ情報などを含めることができます。トラップしたエラーを再生成するには、エラーを再生成する前に Err.Clear を実行せずに行います。Err.Clear を先に実行する場合は、Raise メソッドに追加した引数を指定しなければなりません。エラーが発生した内容を見て、同じエラーを再生成していることを確認します。

•	別のアプリケーションからオブジェクトを操作するときに、Visual Basic のエラーと一致しないエラーがプログラムに戻されたことが考えられます。

操作したオブジェクトのマニュアルを確認してください。Err オブジェクトの Source プロパティには、エラーが発生したアプリケーションまたはオブジェクトのプログラム ID が格納されているはずです。オブジェクトから返されたエラーの内容を知るには、On Error GoTo line 構文ではなく、オブジェクトを操作しているコードで On Error Resume Next 構文を使用します。

メモ   従来、トラップできるエラー メッセージの文字列をすべて出力するのに、ループを使用していました。次にその典型的なコード例を示します。

For index = 1 to 500

Debug.Print Error$(index)

Next index

このようなコードでも、Visual Basic for Applications のすべてのエラー メッセージを出力できますが、フォームやコントロールに関連する Visual Basic のエラーなど、ホスト定義のエラーの「アプリケーション定義またはオブジェクト定義のエラーです。」は表示されません。これらの多くは、トラップできる実行時エラーです。[トピックの検索] ダイアログ ボックスを使用して、ホスト アプリケーションに特定なトラップできるエラーの一覧を検索できます。[トピックの検索] をクリックし、最初のテキスト ボックスに「トラップできる」と入力して、[表示] をクリックします。下のリスト ボックスで [トラップできるエラー] を選択し、[表示] をクリックします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Property Let または Property Set には引数が必要です。

Property Let プロシージャと Property Set プロシージャの目的は、プロパティに新しい値を設定することです。エラーの原因と対処方法を次に示します。

•	プロパティの設定時に、値が正しい位置に指定されていません。

プロパティの値を設定している式の右辺に、プロパティに設定する値を記述します。

•	プロシージャ定義で、式の右辺で引き渡される値を受け取るためのパラメータがないか、または位置が違っています。

プロシージャ定義の値引数リストのパラメータを指定します。複数の引数がある場合は、プロパティ値の引数はリストの最後に指定しなければなりません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


配列は既に宣言されています。

静的配列を宣言できるのは、1 回だけです。エラーの原因と対処方法を次に示します。

•	ReDim ステートメントで静的配列の次元を変更しようとしています。次元を変更できるのは、動的配列だけです。

次元を変更している部分を削除するか、動的配列を使用します。動的配列を定義するには、Dim、Public、Private、または Static のいずれかのステートメントに空のかっこを付加します。次に例を示します。

Dim MyArray()

プロシージャでは、ReDim ステートメントまたは Static ステートメントを使用して動的配列を宣言し、要素数を変数で表すことができます。

ReDim MyArray(n)

•	Option Base ステートメントが、配列の次元を宣言した後で実行されました。

Option Base ステートメントは、すべての配列の宣言を行うステートメントよりも前に記述しなければなりません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


配列引数は ByRef でなければなりません。

Dim、ReDim、または Static で宣言した配列 は、ByVal で引き渡すことはできません。エラーの原因と対処方法を次に示します。

•	配列全体を ByVal で引き渡そうとしています。

配列の個々の要素は ByVal (値渡し) で引き渡すことができますが、配列全体の場合は ByRef (参照渡し) で引き渡す必要があります。既定は ByRef です。呼び出し先で配列要素が変更されないようにするために ByVal で配列を引き渡す必要がある場合は、かっこで囲んで配列引数を引き渡すか、またはバリアント型 (Variant) に代入して、そのバリアント型を ByVal パラメータで引き渡します。次にその例を示します。

Dim MyVar As Variant

MyVar = OldArray()

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


先頭まで検索しました。検索項目は見つかりませんでした。最後から検索を続けますか ?

検索項目を見つけることができませんでした。エラーの原因と対処方法を次に示します。

•	上方向への検索で、指定された範囲の先頭まで検索しました。

検索範囲の最後から検索を続けることができます。またはその検索をキャンセルして、検索範囲を変更できます。


If ブロックに対応する End If がありません。

ステートメントが正しくないために発生したエラーです。エラーの原因と対処方法を次に示します。

•	If ステートメントに対応する End If ステートメントがありません。

複数の行にわたる If ステートメントでは、対応する End If ステートメントで終了していなければなりません。ネストしている If...End If ステートメントでは、各 If...End If 構造が正しく対応しているかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


この行にブレークポイントは設定できません。

ブレークポイントを設定できるのは、特定のステートメントの部分だけです。エラーの原因と対処方法を次に示します。

•	ブレークポイントが設定できない行にブレークポイントを設定しようとしています。設定できない行には、次のようなものがあります。

•	コメントだけの行。

•	行ラベルだけの行。

•	宣言 (Const、Dim、Static、Type など) だけの行。

•	非表示のモジュールにある行。

•	イミディエイト ウィンドウにある行。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ByRef 引数の型が一致しません。

既定の ByRef (参照渡し) で引き渡す引数のデータ型は、プロシージャで指定したデータ型と一致していなければなりません。エラーの原因と対処方法を次に示します。

•	使用できないデータ型の引数が引き渡されました。

たとえば、長整数型 (Long) の引数に整数型 (Integer) の変数を引き渡そうとすると、このエラーが発生します。強制的に引き渡すと、情報は失われますが、引数をかっこで囲んで引き渡すことができます。たとえば、バリアント型 (Variant) の引数 MyVar をプロシージャの整数型 (Integer) の引数に引き渡すには、次のようにコードを記述します。

Dim MyVar

MyVar = 3.1415

Call SomeSub((MyVar))

Sub SomeSub (MyNum As Integer)

MyNum = MyNum + MyNum

End Sub

引数をかっこで囲んで引き渡すと、式として評価されます。このとき、数値の小数部は丸められ (切り捨てられません。)、本来の引数の型に合わせられます。評価結果は一時的な場所に格納され、その一時的な格納場所への参照がプロシージャに渡されます。したがって、MyVar の元の値は変更されません。

メモ   変数の型を指定しない場合は、その変数は既定のバリアント型 (Variant) を受け取ります。ただし、常に明確であるとは限りません。たとえば、次のコードでは変数を 2 つ宣言していますが、1 番目の MyVar はバリアント型 (Variant) ですが、2 番目の AnotherVar は整数型 (Integer) です。

Dim MyVar, AnotherVar As Integer

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Visual Basic でサポートしていない呼び出し規約です。

Visual Basic では、すべてのプロシージャの呼び出し規約をサポートしているわけではありません。呼び出し規約とは、引数の並びと引数の型を指定するものです。エラーの原因と対処方法を次に示します。

•	Visual Basic でサポートしていない呼び出し規約でプロシージャが呼び出されました。たとえば、Microsoft Windows の 16 ビット版の環境では、Visual Basic は Pascal の呼び出し規約をサポートしていません。

呼び出し規約が Visual Basic でサポートされていない場合は、Visual Basic からそのプロシージャは呼び出せません。別の方法がないか、そのオブジェクトのマニュアルを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


指定されたファイルへの参照は登録できません。

Visual Basic では、すべてのオブジェクト ライブラリまたはタイプ ライブラリにアクセスできるわけではありません。エラーの原因と対処方法を次に示します。

•	[参照設定] ダイアログ ボックスを使用して、Visual Basic で使用できないタイプ ライブラリまたはオブジェクト ライブラリに参照を追加しようとしています。

別の形式で使用できないかどうか、ライブラリで示されたオブジェクトのマニュアルを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


固定長文字列の配列、またはユーザー定義型の配列をバリアント型の変数に割り当てることはできません。

バリアント型 (Variant) には、有効な VarType のデータしか代入できません。エラーの原因と対処方法を次に示します。

•	固定長文字列の配列を引き渡そうとしています。通常の固定長文字列であれば、バリアント型 (Variant) に代入したときに、強制的に可変長文字列にされますが、固定長文字列の配列ではできません。

配列を引き渡す必要がある場合は、配列の各要素をループによって、可変長文字列の一時配列の要素に代入します。次に、その配列をバリアントに代入し、Erase を使用して一時配列の代入を解除します。ただし、Erase で固定サイズ配列の代入は解除できません。

•	固定長文字列またはユーザー定義型を、VarType 関数または TypeName 関数に引き渡そうとしています。

VarType 関数または TypeName 関数の引数は、バリアント型 (Variant) でなければなりません。

•	ユーザー定義型をバリアント型 (Variant) 変数に代入しようとしています。

ユーザー定義型の変数全体を、直接バリアント型 (Variant) に代入することはできませんが、Array 関数を使用してユーザー定義型の変数の各要素を、バリアント型 (Variant) に代入できます。これによって、バリアント型 (Variant) にバリアントの配列が格納されます。このバリアント配列の各要素の VarType は、ユーザー定義型の各要素の元の型に一致します。

•	バリアント型 (Variant) 引数が必要なプロシージャ呼び出しで、固定長文字列またはユーザー定義型の配列を引数として引き渡そうとしています。プロシージャが実行時バインディングの場合、つまり実行時に呼び出しを構築する必要がある場合は常に、引数はすべてバリアント型 (Variant) で引き渡す必要があります。たとえば、次のコードはエラーになります。

Dim MyForm As Object	' MyForm はオブジェクトであるため、実行時バインディングです。

Set MyForm = New Form1

Dim StringArray(10) As String * 12

' 次の行はエラーになります。

MyForm.MyProc StringArray

文字列配列では、配列の各要素をループによって、可変長文字列の一時配列に代入します。次に、その配列をバリアント型 (Variant) に代入し、プロシージャに引き渡します。ユーザー定義型の配列では、Array 関数を使用してユーザー定義型の変数の各要素をバリアント型 (Variant) に代入できます。これによって、バリアント型 (Variant) にバリアントの配列が格納されます。このバリアント配列の各要素の VarType は、ユーザー定義型の各要素の元の型に一致します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


配列には代入できません。

配列の各要素は、個々に値を代入する必要があります。エラーの原因と対処方法を次に示します。

•	代入先の配列要素を指定せずに、配列変数に単一の値を代入しようとしています。

単一の値を配列要素に代入するには、添字で配列要素を指定する必要があります。たとえば、MyArray が整数の配列である場合、式 MyArray = 5 は不正ですが、次の式は正しい式になります。

MyArray(UBound(MyArray)) = 5

•	配列全体を別の配列に代入しようとしています。たとえば、2 つの配列 Arr1 と Arr2 があるとすると、次の 2 つの式は両方とも間違いです。

Arr1 = Arr2	' この代入は間違いです。

Arr1() = Arr2()	' この代入は間違いです。

配列を別の配列に代入するには、代入される側の配列のサイズと型が一致していなければなりません。

メモ 配列全体をバリアント型 (Variant) に代入することができ、単一のバリアント型変数に配列全体が格納できます。

Dim MyArr As Variant

MyArr = Arr2()

バリアントの配列要素を参照するには、通常の配列と同様に添字を使用します。次に例を示します。

MyVar(3) = MyVar(1) + MyVar(5)

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


配列要素のデータ型を変更することはできません。

ReDim は、配列の要素数を変更するときだけ使用できます。エラーの原因と対処方法を次に示します。

•	ReDim を使用して、配列のデータ型を再宣言しようとしています。

目的のデータ型で配列を新しく宣言し、変換関数を使用して、元の配列の各要素を新しい配列の対応する要素に代入します。

また、バリアント型 (Variant) 変数に配列を代入することもできます。次のように、簡単に代入できます。

Dim MyVar As Variant

MyVar = MyIntegerArray()

これによって、元の配列のデータ型の標識が付いた配列がバリアント型 (Variant) に格納されます。次に、VarType の変数をバリアント内の配列要素に代入できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクト モジュール内では Public のユーザー定義型は定義できません。

オブジェクト モジュール内で記述できるユーザー定義型には、Public は指定できません。エラーの原因と対処方法を次に示します。

•	オブジェクト モジュールで、Public ユーザー定義型を定義しようとしています。

ユーザー定義型の定義を標準モジュールに移し、そのオブジェクト モジュールまたは別のモジュールで、その型の変数を適切に宣言します。そのデータ型を該当のモジュール内だけで使用する場合は、オブジェクト モジュールに Type...End Type 定義を記述し、前にキーワード Private を付加します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


非表示のプロシージャは表示できません。

非表示のモジュール内にあるものは、すべて非表示です。エラーの原因と対処方法を次に示します。

•	非表示のモジュールにあるプロシージャを表示しようとしています。

モジュールの非表示を解除して、プロシージャを表示します。非表示のプロシージャで発生したエラーの行を表示するには、モジュールの非表示を解除してからコードを実行します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モジュールは編集できません。

保護されているモジュールは表示できますが、編集することはできません。エラーの原因と対処方法を次に示します。

•	保護されているモジュールを編集しようとしています。

モジュールの保護を解除してから編集します。Visual SourceSafe アドインがインストールされていて、そのファイルがチェックアウトされていない場合に、このエラーはよく発生します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


中断モードでは入力できません。

中断モードとは、プログラムは実行中ですが、そのプログラムの処理が中断されている状態のことです。エラーの原因と対処方法を次に示します。

•	Ctrl キーを押しながら Break キー (Windows) または Command キーを押しながらピリオド (.) キー (Macintosh) を押すか、[標準] ツールバーまたは [デバッグ] ツールバーの [ブレーク] ボタンをクリックするか、または実行中のコードでブレークポイントに達したため、中断モードに移行しようとしています。

拡張 (アドイン) オブジェクト モデルを使用して、プログラムでプロジェクトを変更します。これによって、プログラムの実行が中断されることがなくなります。プログラムの実行を再開するか、または終了することはできますが、中断することはできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


デザイン時にコードを実行することはできません。

デザイン時とは、コードが実行されていないときのことです。エラーの原因と対処方法を次に示します。

•	イミディエイト ウィンドウでステートメントを実行しようとしていますが、コードが実行モードではありません。

コードを開始し、プログラムの実行を中断します。これで、イミディエイト ウィンドウからコードを実行できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクトまたはライブラリが見つかりません。

すべての参照が見つかるまで、コードは実行できません。エラーの原因と対処方法を次に示します。

•	参照先プロジェクト、またはプロジェクトの言語に対応する参照先オブジェクト ライブラリが見つかりませんでした。

見つからない参照は、前に "MISSING" が付加されて、[参照設定] ダイアログ ボックスに表示されます。見つからない参照を選択して、パスと見つからないプロジェクトまたはライブラリの言語を表示します。見つからない参照を解消するには、次の手順に従います。

参照不可のエラーを解消するには

1.	[参照設定] ダイアログ ボックスを表示します。

2.	見つからない参照を選択します。

3.	オブジェクト ブラウザを起動します。

4.	[検索文字列] ボックスを使用して、見つからない参照を探します。

5.	[OK] をクリックします。

6.	すべての参照が見つかるまで、上記の手順を繰り返します。

参照が見つかると、"MISSING" が消えて、リンクが再構築されたことがわかります。参照先プロジェクトのファイル名が変更されている場合は、新しい参照を追加し、前の参照は削除しておく必要があります。

不要になった参照を削除するには、その参照のチェック ボックスをオフにするだけです。ただし、Visual Basic オブジェクト ライブラリとホスト アプリケーション オブジェクト ライブラリへの参照は削除できません。

アプリケーションによっては、それぞれ言語バージョンの異なるオブジェクト ライブラリをサポートしている場合があります。どの言語バージョンが必要なのかを知るには、参照をクリックしてダイアログ ボックスの下に表示される言語を確認します。

オブジェクト ライブラリは、拡張子 .OLB のスタンドアローン ファイルにすることができ、ダイナミック リンク ライブラリ (DLL) に組み込むこともできます。オブジェクト ライブラリは、各プラットフォーム用に異なった言語バージョンを置いておくことができます。したがって、プロジェクトを、たとえば Macintosh から Microsoft Windows に移行するときは、そのプラットフォームの参照先ライブラリに対応した言語バージョンが、ホスト アプリケーションのマニュアルで指定されている場所に格納されている必要があります。

オブジェクト ライブラリのファイル名は、通常、次のような構成になっています。

•	Windows (バージョン 3.1 以前): アプリケーション コード + 言語コード + [バージョン].OLB。次に例を示します。

French Visual Basic for Applications の Version 2 のオブジェクト ライブラリは vafr2.olb になります。

French Microsoft Excel 5.0 オブジェクト ライブラリは、xlfr50.olb になります。

•	Macintosh: アプリケーション名言語コード [バージョン] OLB。次に例を示します。

French Visual Basic for Applications の Version 2 のオブジェクト ライブラリは VA FR 2 OLB になります。

French Microsoft Excel 5.0 オブジェクト ライブラリは、MS Excel FR 50 OLB になります。

使用するプロジェクトやライブラリが自分のシステムで見つからない場合は、参照元プロジェクトの作成者に問い合わせてください。使用するライブラリが Microsoft アプリケーション オブジェクト ライブラリである場合は、次の方法で入手できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクト参照変数、またはオブジェクト参照を含むユーザー定義型の変数の場合、Get または Put を実行できません。

オブジェクト参照は、一時的なものであり、ファイルを閉じて開くまでの間に無効になる場合もあります。エラーの原因と対処方法を次に示します。

•	Get ステートメントまたは Put ステートメントの変数にオブジェクトへの参照が格納されているか、格納するように宣言されています。

変数がオブジェクト参照の場合は、Get ステートメントまたは Put ステートメントでは使用できません。オブジェクトのプロパティの一部の値、またはすべての値をファイルに格納するには、各プロパティを個々に指定する必要があります。

•	Get ステートメントまたは Put ステートメントのユーザー定義型変数にオブジェクト参照の要素が含まれています。

変数の Type ステートメントにオブジェクト (たとえば、クラス モジュールで定義されているもの、オブジェクト型 (Object) のもの、フォームまたはコントロールなど) を表す要素が含まれる場合は、定義から削除するか、またはオブジェクト型 (Object) 要素が定義されていない Get ステートメントまたは Put ステートメントを使って、新しい型を定義します。

バリアント型 (Variant) のユーザー定義型要素を使用している場合は、その要素にオブジェクトへの参照が代入されていないことを確認します。バリアント型 (Variant) では、このような代入が可能ですが、そのユーザー定義型を Get または Put で使用すると、このエラーになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


形式が不正です。モジュールをロードできません。

モジュールは、テキスト形式でなければなりません。エラーの原因と対処方法を次に示します。

•	バイナリ形式のファイルをモジュールとしてロードしようとしています。

Visual Basic のバージョンによっては、コードをバイナリ形式とテキスト形式の両方の形式で保存できるものがあります。可能であれば、そのファイルを最後に保存したときの形式でアプリケーションに再ロードし、テキスト形式で保存します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


値の取得のみ可能なプロパティに値を設定することはできません。

プロパティの中には、そのプロパティに値を設定できないものがあります。エラーの原因と対処方法を次に示します。

•	値を設定できないプロパティに値を設定しようとしています。

特定の時点に限って、プロパティに値を設定できることがあります。たとえば、デザイン時に代入できても実行時に代入できないプロパティがあります。いつ設定できるのか、またはまったく設定できないのかは、そのプロパティのヘルプを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モジュールが非表示のため、要求された操作は実行できません。

このエラーは、Visual Basic 拡張 (アドイン) オブジェクト モデルに関係しています。エラーの原因と対処方法を次に示します。

•	モジュールが非表示です。非表示のモジュールを編集したり、非表示のモジュールから情報を取得したりすることはできません。

モジュールの非表示を解除し、再度操作を行います。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


配列に条件付きブレークポイントは、設定できません。

配列は、単一の値を持てません。エラーの原因と対処方法を次に示します。

•	配列全体の値が変更されたときにプログラムの実行を中断する、条件付きブレークポイント (ウォッチポイントとも呼びます。) を設定しようとしています。

配列の特定の要素に、条件付きブレークポイントを設定してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


実行中のモジュールに記録することはできません。

記録を開始するには、実行を終了しなければなりません。エラーの原因と対処方法を次に示します。

•	モジュール コードの実行中に、マクロを記録しようとしています。

実行を停止するか、Ctrl キーを押しながら Break キー (Windows) または Command キーを押しながらピリオド (.) キー (Macintosh) を押した後に、記録を開始してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


既定の参照は削除できません。

既定の参照は削除できません。エラーの原因と対処方法を次に示します。

•	タイプ ライブラリ参照またはオブジェクト ライブラリ参照など、常に使用可能である必要のある参照を削除しようとしています。

この参照は削除しないでください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Select Case 内に対応する Case Else がありません。

Case Else ステートメントは、対応する Select Case ステートメントと End Select ステートメントの間に記述します。エラーの原因と対処方法を次に示します。

•	Case Else ステートメントが Select Case...End Select ブロック内にありません。

Case Else ステートメントを Select Case...End Select ブロック内に移動してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Select Case に対応する Case がありません。

Case Else ステートメントは、Select Case...End Select ブロックに記述しなければなりません。エラーの原因と対処方法を次に示します。

•	Case ステートメントの前に、対応する Select Case ステートメントがありません。

Select Case...Case 構造内にある別の制御構造を調べて、正しく対応しているかどうかを確認します。たとえば、Select Case...Case 構造内で、If に対応する End If がないと、このエラーになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モジュール間で循環参照が定義されています。

モジュール、定数、およびユーザー定義型の間での循環参照はできません。エラーの原因と対処方法を次に示します。

•	あるモジュール内のユーザー定義型または定数で、別のモジュールのユーザー定義型または定数を参照し、次にその最初のモジュールの別のユーザー定義型または定数を参照しています。

該当する参照を削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インターフェイスのすべてのプロシージャをオブジェクトにインプリメントする必要があります。

インターフェイスとは、インプリメントされていないプロシージャ プロトコルの集まりです。エラーの原因と対処方法を次に示します。

•	Implements ステートメントで指定したインターフェイスのすべてのプロシージャのコードが追加されていません。

インターフェイスで指定している各プロシージャのコードを記述する必要があります。空のプロシージャは適切ではありません。プロシージャにコメントを記述することで、エラーは回避できますが、必要な動作をインプリメントしておくべきです。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コードの実行が中断されました。

必要に応じて、コードの実行を中断できます。エラーの原因と対処方法を次に示します。

•	Ctrl + Break キー (Microsoft Windows)、Esc キー (Microsoft Excel)、または Command + ピリオド (.) キー (Macintosh)が押されました。

エラー ダイアログ ボックスで、中断モードに移行するには [デバッグ] をクリックし、実行を再開するには [継続] をクリックし、実行を終了するには [終了] をクリックします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


非表示モジュール <モジュール名> 内でコンパイルエラーが発生しました。

保護されているモジュールは表示できません。エラーの原因と対処方法を次に示します。

•	指定されたモジュールのコードにコンパイル エラーがありますが、プロジェクトが保護されているため表示できません。

プロジェクトの保護を解除し、コードを再度実行してエラーを表示します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


定数式が必要です。

定数は、初期化しておく必要があります。エラーの原因と対処方法を次に示します。

•	変数、ユーザー定義型のインスタンス、オブジェクト、または関数呼び出しの戻り値で定数を初期化しようとしています。

定数を初期化するには、リテラル、既に宣言されている定数、または演算子 (Is 論理演算子は除く) で結合したリテラルと定数を使用します。

•	配列の宣言で、要素数を変数で指定しようとしています。

プロシージャ内で動的配列を宣言するには、ReDim で配列を宣言してから、変数で要素数を指定します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


定数、固定長の文字列、配列、ユーザー定義型および Declare ステートメントは、オブジェクト モジュールのパブリック メンバとしては使用できません。

オブジェクト モジュールの変数すべてを Public として宣言できるわけではありません。ただし、プロシージャは Public が既定で、Property プロシージャを使用して構文的に変数の代わりに使用できます。エラーの原因と対処方法を次に示します。

•	オブジェクト モジュールで Public 定数が宣言されています。

オブジェクト モジュールで Public 定数は宣言できませんが、Property Get プロシージャを同じ名前で作成できます。Property Let プロシージャまたは Property Set プロシージャをその名前で作成しない場合は、実際には、定数と同じように使用できる値の取得のみ可能なプロパティが作成されます。

•	オブジェクト モジュールで Public 固定長文字列が宣言されています。

Property プロシージャのセットを固定長文字列の代わりに使用し、文字列データが許容の長さを超えたときに、超過分を切り捨てたり、文字が多すぎることをユーザーに通知したりできます。

•	オブジェクト モジュールで Public 配列が宣言されています。

プロシージャで配列を返すことはできませんが、配列をバリアント型 (Variant) を返すことができます。クラス モジュールで Public 配列を代わりに使用するには、配列を含むバリアント型 (Variant) のやりとりができる Property プロシージャのセットを使用します。

•	オブジェクト モジュールに Declare ステートメントが記述されています。

Declare ステートメントは、暗黙的にパブリックです。Declare ステートメントの前にキーワード Private を付けます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


カレント モジュールは Print メソッドをサポートしていません。

すべてのメソッドとプロパティが、すべてのモジュールで使用できるわけではありません。エラーの原因と対処方法を次に示します。

•	何も表示できないオブジェクトで、Print メソッドを使用しようとしています。たとえば、標準モジュールでは、修飾なしに Print メソッドは使用できません。

Print メソッドへの参照を削除するか、適切なオブジェクトで修飾します。たとえば、Debug オブジェクトで修飾して、デバッグ時にイミディエイト ウィンドウにメソッドの引数を表示します。

•	Line、Circle、PSet、または Scale の各メソッドを、これらを使用できないオブジェクトで使用しようとしています。たとえば、標準モジュールやオートメーション クラス モジュールでは修飾する必要があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクトへの循環参照はできません。

プロジェクトへの循環参照はできません。たとえば、MyProj が YourProj を参照している場合は、その YourProj (または YourProj を参照するプロジェクト) は MyProj を参照できません。エラーの原因と対処方法を次に示します。

•	既にプロジェクトの一部になっているプロジェクトに参照を追加しようとしています。

循環参照または参照を削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


同じプロパティに対するプロパティ プロシージャの定義が一致していません。または省略可能なパラメータ、ParamArray が含まれています。

同じプロパティの Property Get、Property Let、および Property Set の各プロシージャのパラメータは、正確に一致していなければなりません。ただし、Property Let にはパラメータがもう 1 つあり、このパラメータの型は、対応する Property Get の戻り値の型と一致していなければなりません。また、Property Set には対応する Property Get よりも引数が 1 つ多くあり、その型はバリアント型 (Variant)、オブジェクト型 (Object)、クラス名、またはオブジェクト ライブラリで指定されたオブジェクト ライブラリの型です。エラーの原因と対処方法を次に示します。

•	Property Get プロシージャのパラメータの数が、対応する Property Let プロシージャまたは Property Set プロシージャのパラメータの数 - 1 と一致しません。

Property Let または Property Set にパラメータを追加するか、Property Get のパラメータを削除して、一致するようにします。

•	Property Get のパラメータの型は、Property Set の 1 つ多いパラメータを除いて、対応する Property Let または Property Set の型と正確に一致していなければなりません。

対応するプロシージャ定義のパラメータ宣言を変更して、正しく一致するようにします。

•	Property Let の 1 つ多いパラメータの型は、対応する Property Get プロシージャの戻り値の型と一致していなければなりません。

Property Let の 1 つ多いパラメータの宣言、または対応する Property Get の戻り値の型を変更して、正しく一致するようにします。

•	Property Set の 1 つ多いパラメータの型は、対応する Property Get プロシージャの戻り値の型と必ずしも一致する必要はありませんが、バリアント型 (Variant)、オブジェクト型 (Object)、クラス名、またはオブジェクト ライブラリ型でなければなりません。

Property Set プロシージャの 1 つ多いパラメータがバリアント型 (Variant)、オブジェクト型 (Object)、クラス名、またはオブジェクト ライブラリ型であることを確認します。

•	Optional パラメータまたは ParamArray パラメータが指定された Property プロシージャが定義されています。

ParamArray パラメータと Optional パラメータは、Property プロシージャでは使用できません。これらのキーワードを使用せずにプロシージャを再定義してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Deftype ステートメントはプロシージャ定義の前に置いてください。

Deftype ステートメントには、DefInt、DefDbl、DefCur などがあります。エラーの原因と対処方法を次に示します。

•	モジュール レベルで、変数宣言が Deftype ステートメントよりも前に記述されています。

Deftype ステートメントをすべての変数宣言より前に記述します。

•	Deftype ステートメントがプロシージャに記述されています。

Deftype ステートメントを モジュール レベルで、すべての変数宣言より前に記述します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ループ、Select Case、または If ブロックが大きすぎます。

プロシージャ のサイズは先頭から最後まで 64K バイトの大きさにできますが、分岐はプロシージャ内で両方向に発生するため、分岐は 両方向共に 32,767 バイトまでに制限されています。エラーの原因と対処方法を次に示します。

•	分岐ステートメント (GoTo、GoSub) の分岐先ラベルが、そのステートメントから 32,767 バイト以上離れたところにあります。

ラベルをもっと近くに移動するか、プロシージャを小さくします。

•	ループの開始から終了までに、32K バイト以上のメモリを占有している大きなループ構造があります。

ループを小さくします。

•	Then 節または Else 節を持つブロック形式の If で、開始から終了までに、32K バイト以上のメモリを占有しています。

問題のある部分の構造のサイズを減らします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Do に対応する Loop がありません。

各 Do ステートメントは、対応する Loop で終了していなければなりません。エラーの原因と対処方法を次に示します。

•	Do ステートメントが、対応する Loop ステートメントで終了していません。

Do...Loop 構造内にある他の制御構造が正しく対応しているかどうかを確認します。たとえば、Do...Loop 構造内にあるブロック形式の If で、対応する End If がない場合、このエラーになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


同じ適用範囲内で宣言が重複しています。

指定された名前が、このレベルの適用範囲で既に使用されています。たとえば、2 つの変数が異なるプロシージャで定義されていれば同じ名前を使用できますが、同じプロシージャ内では同じ名前を使用できません。エラーの原因と対処方法を次に示します。

•	新しい変数またはプロシージャの名前が、既存の変数またはプロシージャと同じ名前です。次に例を示します。

Sub MySub()

Dim A As Integer

Dim A As Variant

. . .	' ここにその他の宣言またはプロシージャ コードを記述します。

End Sub

作業中のプロシージャ、モジュール、またはプロジェクトを確認し、重複している宣言を削除します。

•	Const ステートメントで、既存の変数またはプロシージャと同じ名前を使用しています。

問題のある定数を削除するか、名前を変更します。

•	固定配列を複数回宣言しています。

配列を削除するか、名前を変更します。

重複している名前を検索します。名前が同じでも型宣言文字が異なると検索されませんので、検索する名前を指定するときは、型宣言文字を含めないようにしてください。

モジュール レベル変数の名前は、プロシージャで宣言された変数と同じ名前にできますが、そのモジュール レベルの変数をプロシージャ内で参照する場合は、モジュール名で修飾する必要があります。モジュール名と参照先プロジェクトの名前は、プロシージャ内で変数名として使用でき、修飾することも可能です。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


定義が重複しています。

条件付きコンパイラ定数には、1 つの値しか設定できません。エラーの原因と対処方法を次に示します。

•	同じ条件付きコンパイラ定数に、値を 2 つ指定しています。次に例を示します。

#Const Mac = 0

#Const Mac = 1

いずれか一方の定義を削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Deftype ステートメントが重複しています。

同じ適用範囲にある Deftype ステートメントは、重複しない文字範囲を指定しなければなりません。エラーの原因と対処方法を次に示します。

•	この Deftype ステートメントで指定している文字範囲の一部または全部が、別の Deftype ステートメント中で既に含まれています。

文字範囲が重複しないようにステートメントを変更します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Option ステートメントは既に存在します。

各モジュールで指定できる Option ステートメントは 1 つだけです。エラーの原因と対処方法を次に示します。

•	このモジュールに複数の Option Base、Option Compare、Option Explicit、または Option Private が定義されています。

重複するステートメントを削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


編集を元に戻すことができなくなります。続けますか ?

この編集を行った後、[元に戻す] コマンドで現在の状態に戻すことができません。エラーの原因と対処方法を次に示します。

•	通常、このエラーは、編集量が保存するのに大きすぎるときに発生します。

一度の編集時に大幅な変更をしないようにしてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Else に対応する If がありません。

Else の前に、対応する If が必要です。エラーの原因と対処方法を次に示します。

•	Else ステートメントに対応する If ステートメントがありません。

If...End If 構造内にある他の制御構造が正しく対応しているかどうかを確認します。またブロック形式の If の形式が正しいかどうかも確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Enum にはメンバが必要です。

Enum 型は、列挙の名前とメンバを指定します。エラーの原因と対処方法を次に示します。

•	Enum...End Enum ブロックで指定した列挙で、メンバが指定されていません。

少なくとも 1 つのメンバを Enum...End Enum ブロックに追加します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ウォッチ式が指定されていません。

[ウォッチ式の追加] ダイアログ ボックスでは、必ず式を入力しなければなりません。エラーの原因と対処方法を次に示します。

•	[ウォッチ式の追加] ダイアログ ボックスで、ウォッチ式が入力されていません。

[ウォッチ式の追加] ダイアログ ボックスで式を入力するか、Esc キーを押します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


End If に対応する If ブロックがありません。

End If ステートメントには、対応する If ステートメントが必要です。エラーの原因と対処方法を次に示します。

•	If 節が記述されていないか、End If が単独で使われています。

If...End If 構造内にある他の制御構造が正しく対応しているかどうかを確認します。またブロック形式の If の形式が正しいかどうかも確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索対象の最後に到達しました。先頭から検索を続けますか ?

検索項目は見つかりませんでした。エラーの原因と対処方法を次に示します。

•	下方向への検索が指定された検索範囲の最後まで達しました。

検索範囲の先頭から検索を続けることができます。また、この検索をキャンセルして、検索範囲を変更することもできます。


Select Case に対応する End Select がありません。

End Select の前に、対応する Select Case が必要です。エラーの原因と対処方法を次に示します。

•	End Select ステートメントに対応する Select Case ステートメントがありません。

Select Case ブロックに対応する End Select の数が多いか、プロシージャ間で Select Case ブロックをコピーするときに、End Select ステートメントだけコピーされなかったことが考えられます。各 Select Case 構造が End Select ステートメントで終了しているかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


End With に対応する With がありません。

End With の前に対応する With が必要です。エラーの原因と対処方法を次に示します。

•	End With ステートメントに対応する With ステートメントがありません。

With...End With 構造内にある他の制御構造が正しく対応しているかどうかを確認します。たとえば、With...End With 構造内にある If で、対応する End If がない場合、このエラーになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プライベート列挙型、および標準モジュールまたはプライベート クラスで定義された列挙型を、パブリック オブジェクト モジュール内で、パブリック プロシージャの引数または戻り値、パブリック データ メンバ、またはパブリック ユーザー定義型のフィールドとして使用することはできません。

エラーの原因と対処方法を次に示します。

•	他のオブジェクトに公開されていない Enum をパブリック プロシージャの引数や戻り値、あるいはクラスのパブリック データ メンバとして使おうとしました。

Enum を他のオブジェクトに公開するには、ActiveX サーバー、つまり ActiveX EXE プロジェクトや DLL プロジェクトのパブリック クラスで宣言されていなければなりません。


システム レジストリへのアクセスでエラーが発生しました。

システム レジストリにアクセスする必要がある場合があります。エラーの原因と対処方法を次に示します。

•	システムのレジストリが破損しています。

ホスト アプリケーションのセットアップ プログラムを再実行します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


イベント ハンドラが不正です。

イベント処理プロシージャのパラメータの並びは、イベントの宣言と正確に一致していなければなりません。エラーの原因と対処方法を次に示します。

•	イベント処理プロシージャのパラメータの数が間違っています。

余分なパラメータを削除するか、不足しているパラメータを追加します。

•	イベント処理プロシージャのパラメータの中に間違っているデータ型があります。

パラメータの型をイベント宣言の型と一致させてください。

•	イベント処理プロシージャが Sub ではなく、Function になっています。

プロシージャを Sub にします。イベント処理ルーチンは、値を返すことはできません。

•	別のタイプ ライブラリで、そのタイプ ライブラリの型としてイベント名を使用しています。

適切なタイプ ライブラリの名前で名前を修飾し、あいまいさをなくします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。

クラス モジュールにイベント名と一致しないプロシージャ名があります。エラーの原因と対処方法を次に示します。

•	プロシージャの名前はイベントと同じ名前ですが、パラメータの数と型が一致しません。イベント プロシージャに新しくパラメータを追加したときなどに、このエラーが発生します。たとえば、フォームの Form_Load イベント プロシージャを次のように変更すると、このエラーが発生します。

Sub Form_Load (MyParam As Integer)

. . .

End Sub

プロシージャが、イベントに対応するイベント プロシージャでない場合は、そのプロシージャの名前を変更します。イベントに対応しているプロシージャであれば、パラメータの並びをイベントの宣言と一致させます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Do...Loop 内に対応する Exit Do がありません。

Exit Do は、Do...Loop ステートメントの内側でなければ使用できません。エラーの原因と対処方法を次に示します。

•	Exit Do ステートメントが Do...Loop ステートメントの外側にあります。

Exit Do の前に、有効な Do ステートメントがあるか確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


For...Next 内に対応する Exit For がありません。

Exit For は、For...Next ループの内側でなければ使用できません。エラーの原因と対処方法を次に示します。

•	Exit For ステートメントが For...Next ステートメントの外側にあります。

Exit For の前に、有効な For ステートメントがあるか確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Sub または Property 内では Exit Function を使用できません。

Exit ステートメントは、そのプロシージャに対応していなければなりません。エラーの原因と対処方法を次に示します。

•	Exit Function が Sub または Property プロシージャで使用されています。

これらの種類のプロシージャでは、Exit Sub または Exit Property を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Function または Sub では Exit Property を使用できません。

Exit ステートメントは、そのプロシージャに対応していなければなりません。エラーの原因と対処方法を次に示します。

•	Exit Property が Sub または Function プロシージャで使用されています。

これらの種類のプロシージャでは、Exit Sub またはExit Function を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Function または Property では Exit Sub を使用できません。

Exit ステートメントは、そのプロシージャに対応していなければなりません。エラーの原因と対処方法を次に示します。

•	Exit Sub が Function または Property プロシージャで使用されています。

これらの種類のプロシージャでは、Exit Function ステートメントを使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


配列がありません。

添字のある変数名は、その変数が配列であることを表します。エラーの原因と対処方法を次に示します。

•	記述されている構文は配列のものですが、この名前の配列が適用範囲にありません。

変数の名前が正しく記述されているかどうかを確認します。Option Explicit が記述されたモジュールでない限り、変数は最初に使用されるときに作成されます。配列変数の名前を間違えて記述した場合は、変数は作成されますが、配列にはなりません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


End Function が必要です。

End procedure ステートメントは、そのプロシージャに対応している必要があります。エラーの原因と対処方法を次に示します。

•	Function プロシージャを終了するのに、End Property または End Sub が使用されています。

この種類のプロシージャでは、End Function を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


End Property が必要です。

End procedure ステートメントは、そのプロシージャに対応している必要があります。エラーの原因と対処方法を次に示します。

•	Property プロシージャを終了するのに、End Function または End Sub が使用されています。

この種類のプロシージャでは、End Property を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


End Sub が必要です。

End procedure ステートメントは、そのプロシージャに対応している必要があります。エラーの原因と対処方法を次に示します。

•	Sub プロシージャを終了するのに、End Function または End Property が使用されています。

この種類のプロシージャでは、End Sub を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


End With が必要です。

With ブロックは、終了しておかなければなりません。エラーの原因と対処方法を次に示します。

•	With ブロックを適切に終了していません。

ブロックの最後に End With ステートメントを記述します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Function または変数が必要です。

ステートメントの構文は、変数または関数呼び出しを示します。エラーの原因と対処方法を次に示します。

•	名前が既知の変数または Function プロシージャの名前ではありません。

名前が正しいかどうかを確認します。この名前の変数または関数が、そのプログラムで参照できることを確認します。たとえば、関数が Private で定義されているか、または Public で定義されていない場合は、そのモジュール内だけで参照できます。

•	プロシージャ名に値を不正に代入しようとしています。たとえば、MySub が Sub プロシージャの場合、次のコードはエラーになります。

MySub = 237	' 「Function または変数が必要です。」のエラーになります。

Property Let プロシージャで、あるいはオブジェクトまたはオブジェクトを含むバリアント型 (Variant) を返す Function で代入構文を使用することはできますが、Sub、Property Get、または Property Set の各プロシージャでは代入構文を使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モジュールではなく、プロシージャを指定してください。

現在の適用範囲に、この名前のプロシージャはありませんが、この名前のモジュールがあります。プロシージャを呼び出すことはできますが、モジュールを呼び出すことはできません。エラーの原因と対処方法を次に示します。

•	モジュールの名前が、プロシージャ呼び出しとして使用されています。

プロシージャ名を確認し、呼び出すプロシージャが別のモジュールに対してプライベートでないことを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクトまたはライブラリではなく、プロシージャを指定してください。

現在の適用範囲に、この名前のプロシージャはありませんが、この名前のプロジェクトがあります。プロシージャを呼び出すことはできますが、プロジェクトを呼び出すことはできません。エラーの原因と対処方法を次に示します。

•	プロジェクトの名前が、プロシージャ呼び出しとして使用されています。

プロシージャ名を確認し、呼び出すプロシージャが別のモジュールに対してプライベートでないことを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ユーザー定義型ではなく、プロシージャを指定してください。

現在の適用範囲に、この名前のプロシージャはありませんが、この名前のユーザー定義型があります。プロシージャを呼び出すことはできますが、ユーザー定義型を呼び出すことはできません。エラーの原因と対処方法を次に示します。

•	ユーザー定義型の名前が、プロシージャ呼び出しとして使用されています。

プロシージャ名を確認し、呼び出すプロシージャが別のモジュールに対してプライベートでないことを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


変数ではなく、プロシージャを指定してください。

現在の適用範囲に、この名前のプロシージャはありませんが、この名前の変数があります。プロシージャを呼び出すことはできますが、変数を呼び出すことはできません。エラーの原因と対処方法を次に示します。

•	変数名が、プロシージャ呼び出しとして使用されています。

このエラーは、変数が暗黙的に宣言しているものとみなしたため、プロシージャの名前を間違えて記述されたことで発生した可能性があります。プロシージャ名を確認し、呼び出すプロシージャが別のモジュールに対してプライベートでないことを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Sub、Function、または Property が必要です。

記述されているステートメントの構文は、Sub、Function、または Property の各プロシージャ呼び出しです。エラーの原因と対処方法を次に示します。

•	指定された名前の Sub、Function、または Property の各プロシージャがプログラムの適用範囲内にありません。

名前を確認します。プロシージャが Private として定義されている場合は、そのモジュール内からしか呼び出せません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクトではなく、ユーザー定義型を指定してください。

現在の適用範囲に、この名前のユーザー定義型はありませんが、この名前のプロジェクトがあります。変数はユーザー定義型で定義することはできますが、プロジェクト型で定義することはできません。エラーの原因と対処方法を次に示します。

•	プロジェクト名が、ユーザー定義型として使用されています。

ユーザー定義型の名前を確認し、ユーザー定義型が別のモジュールに対してプライベートでないことを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Enum 型ではなく、変数またはプロシージャを指定してください。

Enum 型の名前は、その型の列挙を宣言するステートメントか、修飾子としてのみ記述できます。エラーの原因と対処方法を次に示します。

•	Enum 型名が、型の列挙変数の名前の代わりに使用されています。

Enum 型の変数を宣言するか、現在の適用範囲で既に宣言されている変数を使用します。

•	Enum 型名 が、変数名またはプロシージャ名の代わりに使用されています。

エラーになった識別子を確認します。Enum 型を指定した変数またはプロシージャの名前を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モジュールではなく、変数またはプロシージャを指定してください。

現在の適用範囲に、この名前の変数またはプロシージャはありませんが、この名前のモジュールがあります。プロシージャを呼び出すことはできますが、モジュールを呼び出すことはできません。エラーの原因と対処方法を次に示します。

•	モジュールの名前が、変数またはプロシージャとして使用されています。

変数名またはプロシージャ名を確認し、参照する名前が別のモジュールに対してプライベートでないことを確認します。モジュール名は修飾子として使用できますが、モジュール名自体を独立して使用することはできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクトではなく、変数またはプロシージャを指定してください。

現在の適用範囲に、この名前の変数またはプロシージャはありませんが、この名前のプロジェクトがあります。エラーの原因と対処方法を次に示します。

•	プロジェクトの名前が、変数またはプロシージャとして使用されています。

変数名またはプロシージャ名を確認し、参照する名前が別のモジュールに対してプライベートでないことを確認します。プロジェクト名は修飾子として使用できますが、プロジェクト名自体を独立して使用することはできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


修正候補: <various>

構文に必要な箇所が含まれていません。通常、エラー箇所は修正候補の左側に含まれていますが、エラー箇所が不明確な場合もあります。たとえば、Sub プロシージャは、キーワード Call を使用してもしなくても呼び出すことができます。ただし、Call キーワードを使用した場合は、パラメータの並びはかっこで囲む必要があります。エラーの原因と対処方法を次に示します。

•	修正候補: ステートメントの最後

プロシージャ呼び出しで、かっこが正しく使用されていません。

X = Workbook.Add F:= 5	' かっこがないエラーです。

Call MySub 5	' かっこがないエラーです。

引数を指定している関数呼び出し、またはキーワード Call を使用した Sub プロシージャ呼び出しでは、かっこを使用します。

•	修正候補: )

プロシージャ呼び出しの構文が間違っています。たとえば、関数呼び出しは、それ自体を独立して使用することはできません。また、Sub プロシージャ呼び出しでは、引数の指定方法によって、キーワード Call を使用する必要がある場合があります。

Workbook.Add (X:=5, Y:=7)	' 式のない関数呼び出しです。

YourSub(5, 7)	' Call のない Sub 呼び出しです。

関数呼び出しは、常に式で使用します。Sub プロシージャ呼び出しで、複数の引数をかっこで囲んでいる場合は、キーワード Call を使用しなければなりません。

•	修正候補: 式

たとえば、オブジェクト ブラウザからコードを貼り付けるときに、名前付き引数の値を指定していない可能性があります。

Workbook.Add (X:= )	' 名前付き引数に値が代入されていないエラーです。

引数に値を追加するか、引数がオプションであれば削除します。

•	修正候補: 変数

たとえば、変数名に予約キーワードを使用している可能性があります。次の例の Input # ステートメントの 2 番目の引数には、本来なら変数を指定します。ただし、Type は予約キーワードであるため、変数名として使用できません。

Input # 1, Type	' キーワード Type が変数名として不正に使用されています。

変数名を予約キーワード以外の名前に変更します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


指定した名前では定義されていません。

外部名は、角かっこ ([ ]) で囲んで表します。エラーの原因と対処方法を次に示します。

•	角かっこ内に指定されている識別子が、ホスト アプリケーションで無効です。

名前がホスト アプリケーションで使用されている名前と矛盾していないかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このファイル形式はサポートされていません。

あらゆる状況で、すべてのファイル形式でも読み込めるわけではありません。エラーの原因と対処方法を次に示します。

•	Visual Basic の以前バージョンで作成したバイナリ ファイルをロードしようとしています。

そのファイルを作成した Visual Basic の以前バージョンでファイルをロードし、テキスト形式で保存してから、ロードし直します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


固定長文字列と New キーワードはオブジェクト モジュールで定義されたパブリックのユーザー定義型の要素として使用できません。

エラーの原因と対処方法を次に示します。

•	固定長文字列と New キーワードはオブジェクト モジュールで定義されたパブリックのユーザー定義型の要素として使用できません。


固定長文字列とユーザー定義型はオブジェクト モジュールのパブリック メンバの型として使用することはできません。

エラーの原因と対処方法を次に示します。

•	オブジェクト モジュールのパブリック メンバを固定長の文字列として指定することはできません。別の変数型を指定してください。

•	オブジェクト モジュールのパブリックメンバをプライベート オブジェクト モジュールとして指定することはできません。別の型を指定してください。


固定長文字列型や静的変数のデータの大きさは 64KB を超えることはできません。

固定データおよび静的データには、非自動変数、固定長文字列、および固定配列があります。エラーの原因と対処方法を次に示します。

•	64K を超えるモジュール レベル データを割り当てようとしています。

宣言しているデータのサイズを減らします。モジュール レベル データのサイズの上限は、64K ですが、モジュール レベルの可変長文字列と配列は、64K を超えるサイズが可能です。

•	64K を超える静的プロシージャ レベル データをモジュールで割り当てようとしています。

この型で宣言しているデータのサイズを減らします。モジュール内のすべてのプロシージャにある静的データのサイズの合計は、64K に制限されています (プロシージャごとに 64K ではありません)。静的可変長文字列と配列は、64K を超えるサイズが可能です。

•	ユーザー定義型のサイズが 64K を超えています。

ユーザー定義型のサイズを減らします。通常、ユーザー定義型のサイズは、その要素に指定されたサイズの合計と同じです。ただし、プラットフォームによっては、ワード単位に揃えるために要素間にバイトが埋め込まれている場合もあります。ユーザー定義型を別のユーザー定義型にネストしている場合は、ネストしている型のサイズを新しい型のサイズに含める必要があります。

•	プロシージャで、32K を超えるユーザー定義型の変数を宣言しようとしています。

モジュール レベルでのユーザー定義型の変数のサイズは 64K までですが、プロシージャでは、ユーザー定義型の変数のサイズは 32K を超えることはできません。ユーザー定義型のサイズを減らすか、モジュール レベルの変数を使用します。

•	プロシージャ内で宣言している固定長文字列のサイズが 65,526 を超えています。

固定長文字列のサイズを減らします。可変長文字列は、この制限を超えることができます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


For で指定された変数は既に使用されています。

For...Next ループをネストする場合は、各ループごとに異なる制御変数を使用しなければなりません。エラーの原因と対処方法を次に示します。

•	内側の For ループが、外側の For ループと同じカウンタを使用しています。

ネストしているループのカウンタを確認します。たとえば、外側のループで For Count = 1 To 25 としている場合、内側のループでは Count を制御変数として使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


For Each に指定する変数はバリアント型またはオブジェクト型でなければなりません。

制御変数は For Each...Next ステートメント構文の element 部です。エラーの原因と対処方法を次に示します。

•	バリアント型 (Variant) またはオブジェクト型 (Object) 以外の制御変数がコレクションで使用されています。

For Each...Next の element 部がバリアント型 (Variant) またはオブジェクト型 (Object) であるかどうかを確認します。

•	バリアント型 (Variant) 以外の制御変数が配列で使用されています。

For Each...Next の element 部がバリアント型 (Variant) であるかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


For Each を配列で使用する場合は、バリアント型の配列でなければなりません。

制御変数は For Each...Next ステートメント構文の element 部です。エラーの原因と対処方法を次に示します。

•	バリアント型 (Variant) 以外の制御変数が配列で使用されています。

For Each...Next の group 部がバリアント型 (Variant) の変数であるかどうかを確認します。

•	詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ユーザー定義型の配列、または固定長文字列の配列について For Each を使用することはできません。

For Each 構造は、コレクションと、オブジェクトの配列を含む組み込み型の配列のみ使用できます。また、固定長文字列の配列では、For Each は使用できません。エラーの原因と対処方法を次に示します。

•	For Each 構造にある配列の要素がユーザー定義型です。

配列要素の繰り返しには、通常の For...Next ループを使用します。

•	For Each 構造にある配列の要素が固定長文字列型です。

配列要素の繰り返しには、通常の For...Next ループを使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


For Each は、コレクション オブジェクトまたは配列でのみ繰り返しを実行します。

For Each 構造は、コレクションと配列のみ使用できます。エラーの原因と対処方法を次に示します。

•	コレクションまたは配列以外のオブジェクトが、For Each 構文の group 部で使用されています。

繰り返しの対象になる項目が正しいかどうかを確認し、プログラム内の適用範囲にあるコレクションまたは配列に対応しているかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


For に対応する Next がありません。

For ステートメントには、対応する Next ステートメントが必要です。エラーの原因と対処方法を次に示します。

•	For ステートメントに対応する Next ステートメントがありません。

For...Next 構造の内側に、不正な For...Next 構造がないかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


定義前のユーザー定義型を参照しています。

ユーザー定義型は、参照される前に定義しておく必要があります。エラーの原因と対処方法を次に示します。

•	ユーザー定義型が宣言される前にユーザー定義型の変数が宣言されました。次の例では、変数 OtherVar が、そのデータ型 (OtherType) を宣言する前に宣言されています。

Type MyType

OtherVar As OtherType

End Type

Type OtherType

WholeVar As Integer

RealVar As Double

End Type

ユーザー定義型の定義を参照するよりも前の位置に移動します。

•	同じユーザー定義型をネストしています。

Type MyType

MyVar As Integer

OtherVar As MyType

End Type

ネストしている一方の型を削除します。ある型に別の型をネストする場合、最初の型が既に宣言されているときに、このエラーが間接的に発生します。ネストされている各型の定義が重複していないかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


代入式の左辺の関数呼び出しは、バリアント型またはオブジェクト型の値を返さなければなりません。

関数呼び出しは、代入ステートメントの左辺に記述できますが、その関数の戻り値は、オブジェクト型 (Object) またはバリアント型 (Variant) である必要があります。エラーの原因と対処方法を次に示します。

•	代入ステートメントの左辺に記述されている関数の戻り値の型がバリアント型 (Variant) またはオブジェクト型 (Object) ではありません。

戻り値の型を変更します。戻り値がオブジェクト、またはオブジェクトを含むバリアント型 (Variant) である場合は、オブジェクトの既定プロパティへの代入になります。返されたバリアント型 (Variant) がオブジェクトでない場合は、代入は無効になります。

•	呼び出しに間違いがない場合でも、実行できない場合があります。たとえば、デザイン時だけに設定できるプロパティに値を設定しようとしている場合が考えられます。

デザイン モードに移行し、プロパティ ウィンドウでプロパティに値を設定します。プログラムでプロパティに値を設定しているコードを削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


関数またはインターフェイスが予約されているか、または Visual Basic でサポートされていないオートメーション タイプが関数で使用されています。

タイプ ライブラリまたはオブジェクト ライブラリにあるプロシージャすべてが、どのプログラミング言語でも使用できるわけではありません。型またはオブジェクト ライブラリの作成者は、関数をマクロ言語で使用できないように制限することができます。エラーの原因と対処方法を次に示します。

•	制限されている関数を使用しようとしています。

この関数は、プログラムで使用できません。ライブラリのオブジェクトのマニュアルを参照して、同じ機能のメソッドがないかどうかを確認します。

•	パラメータ型が必要な関数、または Visual Basic で使用できない戻り値の型を持つ関数を使用しようとしています。

Visual Basic で同じ型の戻り値を使用できる場合があります。バリアント型 (Variant) の内部処理形式を確認してください。また、参照として使用される非 Basic 引数型でも使用できる場合があります。ただし、バリアント型 (Variant) を値渡しで渡して、非 Basic 型を使用することはできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


識別子が長すぎます。

識別子は、255 文字を超えることはできません。エラーの原因と対処方法を次に示します。

•	識別子が 255 文字を超えています。

識別子を短くします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


カーソル下にある識別子を認識できません。

プロシージャを表示しようとしましたが、カーソル位置の識別子がプロシージャの名前ではありません。エラーの原因と対処方法を次に示します。

•	識別子がプロシージャ名でありません。

カーソル位置の識別子の綴りが正しいかどうか確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


DLL のバージョンが正しくありません。

Visual Basic の各バージョンは、それぞれ対応するダイナミック リンク ライブラリ (DLL) (Windows) またはコード リソース (Macintosh) しか使用できません。エラーの原因と対処方法を次に示します。

•	Visual Basic ダイナミック リンク ライブラリまたはコード リソースのバージョンがホスト アプリケーションのバージョンと一致しません。プログラムで DLL またはコード リソースのルーチンを呼び出そうとしましたが、ライブラリまたはリソースのバージョンが Visual Basic またはホスト アプリケーションのバージョンと矛盾しています。

正しいバージョンのライブラリまたはリソースを入手し、以前のバージョンのパスよりも前に指定してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


OLE のバージョンが正しくありません。

OLE ダイナミック リンク ライブラリ (DLL) (Windows) またはコード リソース (Macintosh) のバージョンがホスト アプリケーションのバージョンと一致しません。Microsoft Windows では、DLL を検索するのに、カレント フォルダ、設定されているパス、WINDOWS\SYSTEM フォルダの順に検索します。エラーの原因と対処方法を次に示します。

•	ホスト アプリケーションに対応する OLE DLL ではなく、以前のバージョンの DLL が検索されました。

バージョンの異なる DLL を同時に使わないようにしてください。

Macintosh では、通常、OLE ファイルは Extensions フォルダだけにあるため、このエラーが発生することはありません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


イミディエイト ウィンドウで変数を作成することはできません。

イミディエイト ウィンドウのメモリは限られています。エラーの原因と対処方法を次に示します。

•	インスタンス作成が必要な変数がイミディエイト ウィンドウで指定されました。インスタンスの作成が、プログラムのコード上で指定されていません。

イミディエイト ウィンドウで変数への参照を削除するか、変数をプログラム コードで宣言し、イミディエイト ウィンドウで作成しなくてもすむようにします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


メモリが不足しています。編集を元に戻すための情報を保存できません。

この編集を行った後、[元に戻す] コマンドで現在の状態に戻すことができません。エラーの原因と対処方法を次に示します。

•	編集量が [元に戻す] コマンドで保存するのに大きすぎます。

一度の編集時に大幅な変更をしないようにしてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクト情報が十分でないため、現在のプラットフォームまたはバージョンではプロジェクトをロードできません。

プロジェクトを保存するときに、新しいバージョンや異なるプラットフォームでもプロジェクトがロードできるように、特別の情報が保存されます。エラーの原因と対処方法を次に示します。

•	このプロジェクトを保存するときに、メモリが不足しているために、異なるバージョンや異なるプラットフォームでプロジェクトをロードするのに必要な情報をすべて保存できなかったことを示すエラーが発生しました。

前回保存したバージョンの Visual Basic でファイルをロードするか、前回保存したプラットフォームでファイルをロードし、もう一度保存し直します。今回の保存でエラー メッセージが表示されなければ、現在のバージョンまたは現在のプラットフォームでロードできます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Implements のインターフェイスが不正です。

すべてのインターフェイスを Visual Basic にインプリメントできるわけではありません。エラーの原因と対処方法を次に示します。

•	インターフェイスに Visual Basic でサポートできない要素が含まれています。たとえば、Visual Basic には、符号なし長整数型に相当する型はありません。また、Visual Basic では、プロシージャ パラメータを "out-only" として指定することはできません。Visual Basic では、識別子にアンダースコア (_) を使用できますが、インターフェイスのメンバ名にアンダースコア (_) が使用されているものはインプリメントできません。

このインターフェイスは、Visual Basic にインプリメントできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正なアクセス モードです。

Open ステートメントで、指定されたファイル型では無効のアクセスを指定しています。エラーの原因と対処方法を次に示します。

•	Input で無効なアクセス モードを指定して、ファイルを開こうとしています。

ファイルを入力モードで開く場合は、アクセス モードを省略できますが、指定する場合は Read でなければなりません。Input でファイルを開く場合は、Write と Read Write のアクセス モードは無効です。

•	Append で無効なアクセス モードを指定して、ファイルを開こうとしています。

ファイルを追加モードで開く場合は、アクセス モードを省略できますが、指定する場合は Write である必要があります。Append でファイルを開く場合は、Read と Read Write のアクセス モードは無効です。

•	Output で無効なアクセス モードを指定して、ファイルを開こうとしています。

ファイルを出力モードで開く場合は、アクセス モードを省略できますが、指定する場合は Write である必要があります。Output でファイルを開く場合は、Read と Read Write のアクセス モードは無効です。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Sub、Function、または Property の属性が不正です。

プロシージャには、無効の属性がいくつかあります。エラーの原因と対処方法を次に示します。

•	Public 属性または Private 属性が、プロシージャ定義本体内に記述されています。

その属性をプロシージャから削除します。変数の適用範囲を広げるには、モジュール レベルで宣言します。プロシージャ内で宣言されている変数は、常に Private です。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正な文字です。

カレント コンテキストで使用できない文字です。エラーの原因と対処方法を次に示します。

•	かっこやハイフン (-) など、変数名に使用できない文字が使用されています。

宣言している名前と比較します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


データの形式が不正です。

ファイルから読み込んだデータの形式が、指定された形式と違います。エラーの原因と対処方法を次に示します。

•	プロジェクト ファイルまたはオブジェクト ライブラリ ファイルが破損しているか、解釈不可能な形式になっています。

新しいバージョンのプロジェクト ファイルまたはオブジェクト ライブラリ ファイルを入手します。

•	モジュールに .EXE ファイルをロードしようとしています。

ソース コードをロードします。

•	[参照設定] ダイアログ ボックスおよびオブジェクト ブラウザを使用して、有効なオブジェクト ライブラリでないファイル、またはホスト アプリケーションでサポートされていない形式の Basic プロジェクトを含むファイルに参照を追加しています。たとえば、Windows プラットフォームの Microsoft Excel では、.BAS ファイルや .FRM ファイル、または Basic コードを含む Microsoft Project ファイルを解釈できません。

問題のファイルを、そのファイルを作成したアプリケーションにロードし、互換性のある形式で保存し直します。たとえば、オブジェクト ライブラリのソース コードは、MkTypLib で処理でき、QuickBasic と Visual Basic のコードはテキスト形式で保存できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


定数のデータ型が不正です。

すべてのデータ型を定数に使用できるわけではありません。エラーの原因と対処方法を次に示します。

•	定数の型をユーザー定義型、オブジェクト、または配列として宣言しようとしています。

宣言を削除するか、変数として宣言し直します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


イミディエイト ウィンドウでは使えません。

すべてのステートメントをイミディエイト ウィンドウで使用できるわけではありません。エラーの原因と対処方法を次に示します。

•	宣言ステートメントが使用されています。たとえば、Const、Declare、Deftype、Dim、Function、Option Base、Option Explicit、Option Compare、Option Private、Private、Public、プロパティ プロシージャ宣言ステートメント (Property Let、Property Set、および Property Get)、ReDim、Static、Sub、および Type は、イミディエイト ウィンドウでは使用できません。

イミディエイト ウィンドウから宣言ステートメントを削除します。

•	たとえば、Sub、Function、Property、GoSub、GoTo、Return、および Resume などのフロー制御ステートメントが使用されています。

イミディエイト ウィンドウから、これらのステートメントを削除します。

•	イミディエイト ウィンドウ内で物理的に分割されている行の間には、論理的なつながりは持てません。したがって、ブロック形式の If ステートメントなど、複数の物理的な行に分かれているステートメントは正しく実行されません。

このようなブロックは、各ステートメントをコロン (:) で区切って、物理的に 1 行の行に記述できます。逆に、イミディエイト ウィンドウで、1 つのステートメントを行継続文字のスペースとアンダースコア ( _) を使用して、物理的に複数の行に記述することもできます。

•	プログラムの現在の状態では無効なコードで、プログラムの再初期化が必要なコードをイミディエイト ウィンドウで実行しようとしています。

イミディエイト ウィンドウから問題のあるコードを削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロシージャ内では無効です。

Sub プロシージャまたは Function プロシージャに記述できないステートメントです。エラーの原因と対処方法を次に示します。

•	Declare、Deftype、Private、Public、Option Base、Option Compare、Option Explicit、Option Private、および Type の各ステートメントのうち、いずれかがプロシージャに記述されています。

プロシージャからこのステートメントを削除します。このステートメントは、モジュール レベルで記述できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


固定長文字列の長さが不正です。

エラーの原因と対処方法を次に示します。

•	固定長文字列が、長さ 0 で宣言されています。

固定長文字列は、少なくとも 1 文字以上の長さが必要です。

•	固定長文字列の長さが、65,526 バイトを超えています。

固定長文字列の長さを短くします。

メモ   可変長文字列は、上記の上限値を超えることができ、長さ 0 も可能です。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Next で指定された変数の参照が不正です。

For...Next ループの Next 部にある数値変数は、For 部の変数と一致していなければなりません。エラーの原因と対処方法を次に示します。

•	For...Next ループの Next 部にある変数が、For 部の変数と一致していません。次に例を示します。

For Counter = 1 To 10

MyVar = Counter

Next Count

Next 部の変数が For 部の変数と一致しているかどうかを確認します。また、その変数を使用するループの終了位置の一部を不注意で削除していないかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


参照が不正または不完全です。

ピリオド (.) で始まる識別子は、With ブロックだけで使用できます。エラーの原因と対処方法を次に示します。

•	識別子の先頭がピリオド (.) です。

識別子を正しく修飾するか、先頭のピリオド (.) を削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロシージャの外では無効です。

Sub 内または Function 内、またはプロパティ プロシージャ (Property Get、Property Let、Property Set) 内に記述しなければならないステートメントです。エラーの原因と対処方法を次に示します。

•	実行可能ステートメント、Static または ReDim がモジュール レベルで記述されています。

モジュール レベルでは、すべてのモジュール レベルの変数は静的であるため、Static は必要ありません。モジュール レベルでは、ReDim の代わりに Dim を使用します。モジュール レベルで動的配列を作成するには、空のかっこを記述して Dim で宣言します。

メモ   モジュール レベルでは、コメントと、Const、Declare、Deftype、Dim、Option Base、Option Compare、Option Explicit、Option Private、Private、Public、および Type などの宣言ステートメントだけが使用できます。Sub、Function、および Property ステートメントは、プロシージャ本体の外側に記述しますが、プロシージャ宣言の内側である必要があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ParamArray  の使い方が適切ではありません。

ParamArray として定義されているパラメータがプロシージャで間違って使用されています。エラーの原因と対処方法を次に示します。

•	配列 または ByRef Variant が必要な別のプロシージャに、ParamArray を引数として引き渡そうとしています。

ParamArray パラメータをバリアント型 (Variant) に代入し、そのバリアント型を引き渡します。

•	プロシージャ内で、Erase ステートメントまたは ReDim ステートメントで ParamArray パラメータを使用しようとしています。

Erase または ReDim を削除します。これらのステートメントは、ParamArray パラメータで実行できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロシージャ名が無効です。

プロシージャの名前付けに際しては、識別子の名前付け規則以外にも制限があります。エラーの原因と対処方法を次に示します。

•	定義しようとしているプロシージャの名前が、ホストで別の目的で既に使用されているため、定義できません。たとえば、ホスト アプリケーションが Microsoft Excel である場合、R1C1 という識別子が既に Excel で使用されているため、これと同じ名前のプロシージャは定義できません。

プロシージャを別の名前にします。

•	プロシージャ名が予約キーワードであるか、255 文字を超えているか、または先頭が文字で始まっていません。

プロシージャを別の名前にします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


修飾子が不正です。

修飾子はあいまいさをなくすために使用されます。エラーの原因と対処方法を次に示します。

•	修飾子で指定しているプロジェクト、モジュール、オブジェクト、またはユーザー定義型の変数が現在の適用範囲内にありません。

修飾子を確認します。修飾識別子が現在の適用範囲内にあることを確認します。たとえば、Private モジュールのユーザー定義型の変数は、そのモジュール内だけでしか参照できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ReDim が無効です。

すべての配列でサイズ変更ができるわけではありません。

•	バリアント型 (Variant) で暗黙的に宣言されている変数を、ReDim を使って配列に変更しようとしています。

バリアント型 (Variant) に配列を含めることはできますが、明示的に宣言されていない場合は、ReDim を使用して配列にすることはできません。バリアント型 (Variant) で宣言してから ReDim を使用して要素数を指定します。たとえば、次のコードの ReDim AVar(10) は無効な ReDim としてエラーになりますが、ReDim BVar(10) はエラーになりません。

AVar = 1	' AVar を暗黙的に宣言します。

ReDim AVar(10)	' 無効な ReDim としてエラーになります。

.

.

.

Dim BVar	' BVar を明示的に宣言します。

ReDim BVar(10)	' エラーにはなりません。

•	ReDim を使用して、バリアント型 (Variant) 内にある配列の複数の次元を変更しようとしています。

ReDim は、バリアント型 (Variant) にある配列の最後の次元のサイズだけを変更できます。次元変更の可能な複数次元の配列を作成するには、通常の方法で宣言する必要があり、バリアント型 (Variant) 内に含めることはできません。

•	ReDim は、通常の配列の要素数を変更することはできますが、要素の型は変更できません。

要素の型を変更できる配列が必要な場合は、バリアント型 (Variant) 内に含まれる配列を使用します。配列を先に宣言すると、次に示すように、要素の型と数を変更できます。

Dim MyVar As Variant	' 変数を宣言します。

ReDim MyVar(10) As String	' ReDim で内部処理形式が文字列型の配列にします。

ReDim MyVar(20) As Integer	' ReDim で内部処理形式が整数型の配列にします。

ReDim MyVar(5) As Variant	' ReDim で内部処理形式がバリアント型の配列にします。

•	オートメーション オブジェクトのメンバである配列で ReDim を使用しようとしています。

ReDim を削除します。

メモ   変数の型を指定しない場合は、既定のバリアント型 (Variant) になります。ただし、常に明確であるとは限りません。たとえば、次のコードでは変数を 2 つ宣言していますが、1 番目の MyVar はバリアント型 (Variant) で、2 番目の AnotherVar は整数型 (Integer) になります。

Dim MyVar, AnotherVar As Integer

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


定数宣言の構文が正しくありません。

[オプション] ダイアログ ボックスに条件付きコンパイラ定数を入力することと、コードで定数を宣言することは異なります。エラーの原因と対処方法を次に示します。

•	[オプション] ダイアログ ボックスに定数宣言を入力する際の構文が間違っています。

有効な構文は、識別子に整数値を入力するものだけです。入力の構文は、次のとおりで、各定数はコロン (:) で区切ります。

constantname = [{+ | - }]integervalue : [{+ | - }]constantname = integervalue [...]

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正な型宣言文字です。

正しい型宣言文字ですが、すべてのデータ型で使用できるわけではありません。場合によっては、使用できないことがあります。エラーの原因と対処方法を次に示します。

•	Private、Public、または Static の各ステートメントで As 節を使用して、宣言されている変数に型宣言文字が付加されています。

型宣言文字を削除します。

•	型宣言文字が矛盾したリテラルに付加されています。たとえば、アンパサンド (&) は長整数型 (Long) の型宣言文字であるため、別の型のリテラルに付加するとエラーになります。

10.253&

型宣言文字を削除するか、正しい型宣言文字に修正します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


AddressOf オペレータの使い方が適切ではありません。

AddressOf 演算子は、引数を変更して、関数呼び出しの結果を渡す代わりに、関数のアドレスを渡します。エラーの原因と対処方法を次に示します。

•	クラス メソッドの名前で、AddressOf を使用しようとしています。

AddressOf で変更できるのは、.BAS モジュールの Visual Basic プロシージャの名前だけです。クラス メソッドは指定できません。

•	AddressOf で変更したプロシージャ名が、別のプロジェクトのモジュールで定義されています。

•	AddressOf で DLL 関数の名前またはタイプ ライブラリで定義されている関数の名前を変更しようとしています。

•	DLL 関数およびタイプ ライブラリ関数は、AddressOf で変更できません。

プロシージャは、カレント プロジェクトのモジュール内で定義する必要があります。このプロジェクトのモジュールで定義するか、カレント モジュールをプロジェクトに含めます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Me キーワードの使用方法が不正です。

キーワード Me は、クラス モジュールに記述できます。エラーの原因と対処方法を次に示します。

•	キーワード Me が、標準モジュールに記述されています。

標準モジュールはオブジェクトを表さないため、キーワード Me は標準モジュールに記述できません。問題のあるコードをクラス モジュールからコピーした場合は、キーワード Me を特定のオブジェクトまたはフォームの名前と置き換えて、元の参照を残しておく必要があります。

•	キーワード Me が、Set 代入ステートメントの左辺に記述されています。次に例を示します。

Set Me = MyObject	' 「キーワード Me キーワードの使用方法が不正です。」のエラーになります。

Set 代入ステートメントを削除します。

メモ   キーワード Me は、Let 代入ステートメントの左辺に記述できますが、その場合は、Me で表されるオブジェクトの既定のプロパティが設定されます。次に例を示します。

Let Me = MyObject	' 明示的な Let による有効な代入です。

Me = MyObject	' 暗黙的な Let による有効な代入です。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


New キーワードの使用方法が不正です。

キーワード New は、作成可能なオブジェクト (クラスまたはオートメーション オブジェクトのインスタンス) のみに適用できます。エラーの原因と対処方法を次に示します。

•	インスタンスを 1 つしか持てないものにインスタンスを作成しようとしています。たとえば、次のようなステートメントで Module1 を指定して、モジュールのインスタンスを新しく作成しようとしています。

Dim MyMod As New Module1

モジュールは 1 つのインスタンスしか持てないため、インスタンスを新しく作成することはできません。

•	オートメーション オブジェクトでインスタンスを作成しようとしていますが、そのオブジェクトは作成可能なオブジェクトではありません。たとえば、次のようなステートメントでは、ListBox を指定して、リスト ボックスのインスタンスを新しく作成しようとしています。

' 変数を作成する有効な構文です。

Dim MyListBox As ListBox

Dim MyFormInst As Form

' オブジェクトのインスタンスの作成が無効な構文です。

Set MyFormInst = New Form

Set MyListBox = New ListBox

ListBox と Form はクラス名であり、特定のオブジェクト名ではありません。これらを使用して、上に示した有効な Dim ステートメントのように、変数に特定のオブジェクト型 (Object) への参照を指定することができます。ただし、Set ステートメントでオブジェクトのインスタンス作成はできません。Set ステートメントでは、一般的なクラス名ではなく、特定のオブジェクトを指定する必要があります。

' フォームまたはリスト ボックスのインスタンスを新しく作成する有効な構文です。

Set MyFormInst = New Form1

Set MyListBox = New List1

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトの使い方が不正です。

オブジェクトの使用方法が間違っています。エラーの原因と対処方法を次に示します。

•	Nothing をオブジェクト参照に代入して、そのオブジェクト参照を解除しようとしていますが、キーワード Set が省略されてます。

MyObject = Nothing

Set ステートメントを使用して、オブジェクトに Nothing を設定します。MyObject がオブジェクトであるとすると、Set ステートメントを使用して、そのオブジェクトに Nothing を設定しなければなりません。

Set MyObject = Nothing

キーワード Set を省略すると Let が暗黙で使用され、参照の代入ではなく、値の代入が行われます。Nothing は、値の代入には使用できません。

•	Nothing を式で使用しようとしています。

Nothing を使用せずに式を書き直します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Property 使い方が不正です。

使用している Property プロシージャの種類が違っています。エラーの原因と対処方法を次に示します。

•	値の取得のみ可能なプロパティに値を設定しようとしています。

プロパティに定義されているプロパティ プロシージャが Property Get だけの場合は、そのプロパティに値を設定できません。適切な Property Let プロシージャを記述するか、そのプロパティに値を設定しないようにします。

•	値の設定のみ可能なプロパティから値を取得しようとしています。

プロパティに定義されているプロパティ プロシージャが Property Let だけの場合は、そのプロパティの値を取得できません。適切な Property Get プロシージャを記述するか、そのプロパティから値を取得しないようにします。

•	参照を設定しようとしていますが、プロパティに Property Get プロシージャまたは Property Let プロシージャしかありません。

Property Set プロシージャを記述するか、参照を設定しないようにします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ウォッチ式が不正です。

指定されたウォッチ式が、有効な式ではありません。エラーの原因と対処方法を次に示します。

•	ウォッチ式の構文が間違っています。

式のすべてのコンポーネントの構文を確認します。式がウォッチされているプロジェクトの国別情報に対応するウォッチ式の構文を定義します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ラベルが定義されていません。

エラーの原因と対処方法を次に示します。

•	参照の適用範囲外の行ラベルまたは行番号を (GoTo ステートメントなどで) 参照しています。

参照先のラベルは、プロシージャ内にある必要があります。行ラベルは、そのプロシージャ内だけで参照できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


[言語/国] の設定が変更されました。

エラーの原因と対処方法を次に示します。

•	Visual Basic 環境の言語/国名の既定値が変更されています。

違反ではありませんが、問題が生じる場合があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


この行には、実行可能なステートメントがありません。

宣言とコメントは、実行可能なステートメントではありません。エラーの原因と対処方法を次に示します。

•	[カーソル行の前まで実行] コマンドがクリックされましたが、カーソルが実行可能なステートメントを含む行にありません。

カレント行の近くの実行可能なステートメントにカーソルを移動します。

詳細については、[実行] メニューの [カーソル行の前まで実行] コマンドをクリックして F1 キー (Windows) または Help キー (Macintosh) を押してください。


行が長すぎます。

Visual Basic コードの 1 行には、物理的に 1023 文字まで格納できます。エラーの原因と対処方法を次に示します。

•	行に含まれる文字数が多すぎます。

行継続文字のスペースとアンダースコア ( _) を使用して、物理的に複数の行を結合して、長い論理行を作成できます。行継続文字を使用して、最大 25 行の物理的な行を 1 行の論理行に結合できます (この場合、24 個の行継続文字が使用されます)。各物理行には、それぞれ 1023 文字が入力できるので、文字列がそれより長くなる場合には、行をステートメントごとに分割するか、中間の変数に対していくつかの式を代入します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Loop に対応する Do がありません。

Do ループは、Do ステートメントで開始しなければなりません。エラーの原因と対処方法を次に示します。

•	別のループ内にネストしているループ ブロックが終了していません。

Do...Loop 構文が正しいかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


LSet では文字列、またはﾕｰｻﾞｰ定義型のみが使用できます。

LSet は、文字列内およびユーザー定義型の変数内にあるデータを左揃えにします。エラーの原因と対処方法を次に示します。

•	指定された変数が文字列またはユーザー定義型でありません。

LSet を使用して、配列の内容をまとめて別の配列に代入することはできません。ループを使って、各要素ごとに代入しなければなりません。

•	LSet をオブジェクトで使用しようとしています。

LSet を使用して、ユーザー定義型変数の要素を別の互換性のあるユーザー定義型変数の要素に代入することもできます。オブジェクトはユーザー定義型に似ていますが、LSet をオブジェクトに使用することはできません。同様に、文字列、オブジェクト、またはバリアント型を含むユーザー定義型の変数に対しても、LSet は使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


LSet は使用できません。

LSet は、文字列内およびユーザー定義型の変数内にあるデータを左揃えにします。エラーの原因と対処方法を次に示します。

•	文字列、オブジェクト、またはバリアント型を含むユーザー定義型に LSet を使用しようとしています。

このユーザー定義型の変数から別のユーザー定義型へ、各要素ごとに代入しなければなりません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インプリメントへのインターフェイスが不正です: インターフェイスは無制限のメソッドを持つほかの純粋なインターフェイスから継承されています。

エラーの原因と対処方法を次に示します。

•	インターフェイスは、直接的または間接的に無制限のメソッドを含む純粋なインターフェイスから継承されています。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インプリメントへのインターフェイスが不正です: インターフェイスはデータ フィールドを含んでいます。

エラーの原因と対処方法を次に示します。

•	インターフェイスまたはクラスにデータ フィールドが含まれています。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インプリメントへのインターフェイスが不正です: メソッドの名前にアンダースコアが使われています。

Implements ステートメントでインターフェイスまたはクラスを指定する場合、それらのインターフェイスまたはクラスは、指定元のクラスモジュール内でインプリメントされていなければなりません。エラーの原因と対処方法を次に示します。

•	インターフェイスまたはクラスに、名前にアンダースコアを含むメソッドが含まれています。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インプリメントへのインターフェイスが不正です: メソッドは HRESULT を返しません。

Implements ステートメントでインターフェイスまたはクラスを指定する場合、それらのインターフェイスまたはクラスは、指定元のクラスモジュール内でインプリメントされていなければなりません。エラーの原因と対処方法を次に示します。

•	インターフェイスまたはクラスに含まれているメソッドは、HRESULT 値を返しません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インプリメントへのインターフェイスが不正です: メソッドは出力のみ可能か、または LCID を引数としています。

Implements ステートメントでインターフェイスまたはクラスを指定する場合、それらのインターフェイスまたはクラスは、指定元のクラスモジュール内でインプリメントされていなければなりません。エラーの原因と対処方法を次に示します。

•	インターフェイスまたはクラスに含まれているメソッドの引数は出力のみ可能かまたは LCID を返します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インプリメントへのインターフェイスが不正です: メソッドの引数に間接演算のレベル数が多すぎます。

Implements ステートメントでインターフェイスまたはクラスを指定する場合、それらのインターフェイスまたはクラスは、指定元のクラスモジュール内でインプリメントされていなければなりません。エラーの原因と対処方法を次に示します。

•	インターフェイスまたはクラスに含まれるメソッドの引数は間接演算のレベルが多すぎます。整数値の間接演算が 2 度行われている、あるいはユーザー定義型の間接演算が 3 度行われているなどの状況が考えられます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インプリメントへのインターフェイスが不正です: メソッドは Visual Basic でサポートしていない型を使用しています。

Implements ステートメントでインターフェイスまたはクラスを指定する場合、それらのインターフェイスまたはクラスは、指定元のクラスモジュール内でインプリメントされていなければなりません。エラーの原因と対処方法を次に示します。

•	インターフェイスまたはクラスに含まれているメソッドが Visual Basic でサポートされていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インプリメントへのインターフェイスが不正です: インターフェイスは IUnknown を継承していません。

Implements ステートメントでインターフェイスまたはクラスを指定する場合、それらのインターフェイスまたはクラスは、指定元のクラスモジュール内でインプリメントされていなければなりません。エラーの原因と対処方法を次に示します。

•	インターフェイスまたはクラスには、Visual Basic でサポートされていないデータ型を使用するメソッドが含まれています。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


追加できるウォッチ式が最大数に達しました。

ウォッチ ウィンドウに含めることができるウォッチ式の数には制限があります。エラーの原因と対処方法を次に示します。

•	ウォッチ ウィンドウに追加できるウォッチ式の数が最大数に達しました。

追加しようとしているウォッチ式を削除するか、イミディエイト ウィンドウを使用して調べたい値を表示します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このメンバ識別子は既にオブジェクト モジュールの中に存在しています。

オブジェクト モジュール メンバに使用する識別子は、その派生元のオブジェクト モジュールで既に使用されている名前と同じ名前を使用することはできません。エラーの原因と対処方法を次に示します。

•	オブジェクト モジュールで使用されているプロシージャ識別子またはデータ メンバ識別子が、これらの派生元のオブジェクト モジュールで既に使用されています。たとえば、フォームに BackColor プロパティがある場合、次のコードはエラーになります。

' フォームには既に BackColor プロパティがあります。

Dim BackColor As Integer	' エラーになります。

Function BackColor()	' エラーになります。

End Function

オブジェクト モジュールのメンバ識別子と重複する識別子を変更します。

メモ   プロパティ名またはメソッド名として使用できない文字列がいくつかあります。QueryInterface、AddRef、Release、GetTypeInfoCount、GetTypeInfo、GetIDsOfNames、Invoke の文字列は IUnknown インターフェイルおよび IDispatch インターフェイスで既に使用されています。これらの名前を使用した場合は、コンパイル時にエラーが発生します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


メソッドを使う場合には、適切なオブジェクトを指定する必要があります。

すべてのメソッドが、すべてのオブジェクトで実行できるわけではありません。エラーの原因と対処方法を次に示します。

•	オブジェクトの指定なしでメソッドが呼び出され、そのメソッドが暗黙のオブジェクトで有効でありません。たとえば、標準モジュールの場合、標準モジュールは Line メソッドの出力を表示できないため、オブジェクトの修飾子なしでは Line メソッドを使用できません。

そのメソッドを使用できるオブジェクトを使って、メソッド呼び出しを明示的に修飾します。たとえば、Line メソッドを使ってフォームやピクチャ ボックスを指定できます。

メモ   標準モジュールで使用するときにオブジェクトの修飾子を明示的に指定する必要があるメソッドには、Circle、Print、および Pset などがあります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


対応するかっこがありません。

ステートメントのかっこは、それぞれ前後で対応していなければなりません。エラーの原因と対処方法を次に示します。

•	閉じかっこがありません。

閉じかっこを適切な位置に記述します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モジュールがありません。

モジュールがコード参照からロードされていません。モジュールは、プロジェクトの一部である必要があります。エラーの原因と対処方法を次に示します。

•	要求されたモジュールが指定されたプロジェクト内にありません。たとえば、ステートメント MyModule.SomeVar = 5 で、MyModule がプロジェクト MyProject で参照できないときはエラーになります。

モジュールをオブジェクトに追加する方法の詳細については、ホスト アプリケーションのマニュアルを参照してください。


モジュールが大きすぎます。

モジュールは、プロジェクト内にあって、コードを格納します。エラーの原因と対処方法を次に示します。

•	モジュールにあるコードが多すぎます。

新しいモジュールを作成し、そのモジュールにプロシージャをいくつか移動します。新しいモジュールに移動したプロシージャで参照されるモジュール レベルの宣言がカレント モジュールにある場合は、そのデータを Public で宣言します。

メモ   コメントは、コード行には含まれません。したがって、この場合は、コメントを削除しても効果はありません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


行頭のみ許されるステートメントです。

すべてのキーワードをコード行の先頭に記述できるわけではありません。エラーの原因と対処方法を次に示します。

•	Sub、Function、または Property の各ステートメントと同じ行の先頭に別のステートメントが記述されています。

Sub、Function、または Property の各ステートメントは (Public、Private、または Static の各キーワードを使用する場合を除いて)、常に行の先頭に記述しなければなりません。

•	End If、Else、または ElseIf の各ステートメントと同じ行の先頭に別のステートメントが記述されています。

End If、Else、または ElseIf の各ステートメントは (ブロック形式の If 構造で使用されている場合に限って)、常に行の先頭に記述しなければなりません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


この名前は既にあるモジュール、プロジェクト、オブジェクト ライブラリで使われています。

モジュール、オブジェクト ライブラリ、および参照先プロジェクトはプロジェクト内で他と重複しない名前でなければなりません。エラーの原因と対処方法を次に示します。

•	同じ名前のモジュール、プロジェクト、またはオブジェクト ライブラリが、このプロジェクト内で既に参照されています。ファイル名の拡張子は名前の一部としては判断されないため、別の拡張子を付けてもファイルを区別することはできません。

モジュール、プロジェクト、またはオブジェクト ライブラリの参照の名前とは別の名前を使用します。

•	ファイル名 (拡張子は除く) がカレント プロジェクトのモジュール名と同じプロジェクトまたはオブジェクト ライブラリへの参照を追加しようとしています。

モジュール名または追加しようとしているファイルの名前を変更します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


その名前付き引数は、既に指定されています。

名前付き引数は、各プロシージャ呼び出しの引数リストで 1 回だけ使用できます。エラーの原因と対処方法を次に示します。

•	1 回の呼び出しで、同じ名前の名前付き引数が複数回指定されています。たとえば、プロシージャ MySub の名前付き引数が Arg1 と Arg2 である場合に、次の呼び出しを行うとエラーになります。

Call MySub(Arg1 := 3, Arg1 := 5)

重複している構文を削除します。

•	同じ引数が別の位置に名前付き引数で指定されています。次に例を示します。

Call MySub(1, Arg1 := 3)

重複している構文を削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


名前付き引数は使えません。

すべての場合で名前付き引数を使用できるわけではありません。エラーの原因と対処方法を次に示します。

•	名前付き引数を配列インデックスとして指定しようとしています。次に例を示します。

MyVar = MyArray(MyNamedArg := 1)

通常の変数または定数式を配列インデックスとして使用します。

•	オブジェクトで名前付き引数を指定しようとしています。次に例を示します。

MyVar = MyObject(MyNamedArg := 1)

オブジェクトで引数が必要な場合は、変数または定数式を使用します。たとえば、オブジェクトの既定がメソッドである場合、そのオブジェクト名は既定のメソッドを表します。引数が必要な場合は、位置を合わせて指定します。

•	外部名で名前付き引数を指定しようとしています。

MyVar = [MyName](MyNamedArg := 1)

外部名で引数が必要な場合は、変数または定数式を使用します。

•	オブジェクトのデータ メンバで名前付き引数を指定しようとしています。次に例を示します。

MyVar = [MyObject].MyProperty(MyNamedArg := 1)

データ メンバで引数が必要な場合は、変数または定数式を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Next に対応する For がありません。

Next ステートメントの前に、対応する For ステートメントが必要です。エラーの原因と対処方法を次に示します。

•	Next ステートメントに対応する For ステートメントがありません。

For...Next 構造内にある他の制御構造が正しく対応しているかどうかを確認します。たとえば、For...Next 構造内にある If で、対応する End If がない場合、このエラーになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


文字列が選択されていません。

この操作を行うには、文字列を選択している必要があります。エラーの原因と対処方法を次に示します。

•	[検索] または [置換] を行うための文字列が選択されていません。

ホスト アプリケーションによっては、文字列を検索、置換するときに、実際に文字列が選択されていなくても、選択適用範囲を指定できるものがあります。文字列を選択するには、選択範囲の先頭をポイントし、Shift キーを押しながら方向キーを選択範囲の最後まで移動するか、選択範囲の最後をクリックします。選択した文字列を検索しない場合は、[選択] オプションを元に戻します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


メモリが不足しているため、プロジェクトを保存できません。

プロジェクトが保存されるときに、通常、新しいバージョンや別のプラットフォームでも使用できるようにする情報が同時に保存されます。エラーの原因と対処方法を次に示します。

•	プロジェクトを Visual Basic の新しいバージョンまたは別のプラットフォームでロードするときに必要な情報を保存するためのメモリが不足しています。

プロジェクトを Visual Basic の新しいバージョンまたは別のプラットフォームで開く予定がある場合は、他のアプリケーションをいくつか閉じてから、再度保存し直します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ウォッチ式が選択されていません。

[クイック ウォッチ] コマンドをクリックするときは、式を選択しておかなければなりません。エラーの原因と対処方法を次に示します。

•	[クイック ウォッチ] をクリックする前に、ウォッチする式が選択されていません。

コード ウィンドウのウォッチ式を強調表示してから、[クイック ウォッチ] をクリックします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このオブジェクト ライブラリの機能はサポートされていません。

Visual Basic に付いていない機能をオブジェクト ライブラリで持つことは可能です。エラーの原因と対処方法を次に示します。

•	Visual Basic でサポートできないオブジェクト ライブラリ データ型または関数にアクセスしようとしています。

オブジェクト ライブラリの制作者に、このオブジェクト ライブラリの適切な使用方法と、同時に使用するツールなどについて問い合わせてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Visual Basic for Applications のオブジェクト ライブラリが見つかりません。

Visual Basic for Applications のオブジェクト ライブラリが、スタンドアロン ファイルではなくなりました。ダイナミック リンク ライブラリ (DLL) に組み込まれています。

通常の状況ではありませんが、プロジェクトの言語に対応するオブジェクト ライブラリ (vaxxx.olb または vaxxxx.olb) の以前バージョンが必要であるにもかかわらず、それが見つかりません。エラーの原因と対処方法を次に示します。

•	オブジェクト ライブラリ全体が指定されたフォルダにないか、またはバージョンが間違っています。

ホスト アプリケーションのマニュアルで指定されているフォルダにオブジェクト ライブラリがあるかどうか、ディスクを確認します。

使用するライブラリが、ホスト アプリケーションによってセットアップされた言語バージョンの場合は、再度セットアップ プログラムを実行するのが一番簡単な方法です。プロジェクトで必要なオブジェクト ライブラリが、ホスト アプリケーションに付属するものと言語が異なる場合は (たとえば、別の言語でセットアップされているマシンで記述されたプロジェクトを入手した場合など)、Visual Basic オブジェクト ライブラリの正しい言語バージョンがプロジェクトに含まれていることを確認し、正しい場所にセットアップされていることを確認します。

アプリケーションによっては、それぞれ言語バージョンの異なるオブジェクト ライブラリをサポートしている場合があります。どの言語バージョンが必要なのかを知るには、[参照設定] ダイアログ ボックスを表示し、ダイアログ ボックスの下端に表示される言語を確認します。

オブジェクト ライブラリは、プラットフォームごとに別のバージョンが存在します。したがって、プロジェクトを、たとえば Macintosh から Microsoft Windows に移行するときは、そのプラットフォームの参照先ライブラリに対応した言語バージョンが、ホスト アプリケーションのマニュアルで指定されている場所に格納されている必要があります。言語によっては、2 バイト文字や 3 バイト文字もあります。

使用するプロジェクトやオブジェクト ライブラリが自分のシステムで見つからない場合は、参照元プロジェクトの制作者に問い合わせてください。使用するライブラリが Microsoft アプリケーション オブジェクト ライブラリである場合は、次の方法で入手できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクト ライブラリは登録されていません。

Visual Basic for Applications のオブジェクト ライブラリは、スタンドアロン ファイルではなくなりました。ダイナミック リンク ライブラリ (DLL) に組み込まれています。

以前のバージョンでは、Visual Basic for Applications を使用するアプリケーションを起動すると、特定のオブジェクト ライブラリがロードされます。エラーの原因と対処方法を次に示します。

•	Visual Basic for Applications オブジェクト ライブラリ (vaxxx.olb)、またはホスト アプリケーション オブジェクト ライブラリの以前のバージョンをロードしようとしています。しかし、これらオブジェクト ライブラリに対応する言語バージョンがシステム レジストリに見つかりません。

アプリケーションを登録します。Macintosh では、Macintosh Preferences フォルダから vba.ini ファイルを削除し、アプリケーションを再起動します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクト ライブラリで設定されている言語は、このプロジェクトと互換性がありません。

参照が追加できません。エラーの原因と対処方法を次に示します。

•	カレント プロジェクトの国別情報と互換性のない国別情報のオブジェクト ライブラリに参照を追加しようとしています。参照は追加されません。このオブジェクト ライブラリを使用するには、国別情報がオブジェクト ライブラリのものと互換性のあるプロジェクトを作成する必要があります。

所定の言語の Visual Basic for Applications とホスト アプリケーションの両方を登録してください。オブジェクト ライブラリが [参照設定] ダイアログ ボックスで選択できるようになります。

メモ   Visual Basic がホスト アプリケーションである場合は、プロジェクトの言語設定を変更することはできません。使用されるオブジェクト ライブラリは、[英語/米国] 設定と互換性がある必要があります。


このオートメーション タイプは Visual Basic ではサポートされていません。

すべての型が Visual Basic でサポートされているわけではありません。エラーの原因と対処方法を次に示します。

•	Visual Basic for Applications でサポートされていない型をプログラムで使用しようとしています。たとえば、Visual Basic には、ポインタや符号なし整数型はないので、オブジェクト ライブラリでこれらの型の変数を作成しようとすると、このエラーが発生します。次に示す例では、Rainbow が有効な構造であっても、Visual Basic で解釈できない型が含まれている場合には、その型の変数は作成できません。

Dim MyVar As Rainbow	' エラーになります。

型が、オブジェクト ライブラリの関数の有効なパラメータ型である場合、このエラーは、単にコード内でこの型の変数が作成できないことを示すだけです。オブジェクトのマニュアルで指定されているデータ型で、常に変数を宣言できるとは限りませんが、Visual Basic に同等の機能がある場合もあります。たとえば、Visual Basic には、ポインタ型はありませんが、AddressOf 演算子を使用して関数へのポインタを API 関数に引き渡すことができます。また、Visual Basic で直接提供されていない型の代わりとして、バリアント型 (Variant) の内部処理形式を使用できる場合があります。ただし、Visual Basic に同等の機能がないこともあります。たとえば、データ ポインタは使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


End Sub、End Function または End Property 以降には、コメントのみが記述できます。

プロシージャの外側に記述できるのは、コメント、ディレクティブ、および宣言 だけです。エラーの原因と対処方法を次に示します。

•	プロシージャの外側に実行コードが記述されています。

プロシージャの外側に宣言行以外の行を記述する場合は、コメント記号 (') で始めなければなりません。宣言ステートメントは、最初のプロシージャ宣言の前に記述しなければなりません。コメントは、コードの実行の際には無視されます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


省略可能な引数はバリアント型である必要があります。

Optional 引数には、組み込みデータ型を指定できますが、単一の既定値の型である必要があります。エラーの原因と対処方法を次に示します。

•	配列など、既定値のないパラメータに Optional を指定しようとしています。

Optional を指定する引数に既定値があることを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Option Private Module はオブジェクト モジュール内で使うことはできません。

Option Private Module を使用すると、モジュールの内容を別のプロジェクトから使用できないようにすることができます。ただし、自分のプロジェクトでは使用できます。エラーの原因と対処方法を次に示します。

•	Option Private Module ステートメントがオブジェクト モジュールに記述されています。

モジュールから Option Private Module ステートメントを削除します。オブジェクト モジュールには、既定で Option Private Module の特性が備わっています。コードからは既定の設定を変更できません。オブジェクト モジュール メンバの参照範囲を広げる方法については、ホスト アプリケーションのマニュアルを参照してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


メモリが不足しています。ウォッチが削除された可能性があります。

システムのメモリが不足すると、修復処理に使用できるメモリを確保するため、ウォッチ式が削除されます。エラーの原因と対処方法を次に示します。

•	ロードしているアプリケーション、プロジェクト、またはモジュールの数が多すぎます。

作業を続けるためには、不要になったアプリケーション、プロジェクト、またはモジュールなどをメモリから削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


リソースが不足しています。

"ハンドル" と呼ばれる特定の種類のリソースが、内部でいくつもの処理に使用されています。エラーの原因と対処方法を次に示します。

•	コードで使用できるリソースの限界に達しました。

コードを保存し、一度閉じてから、再度ロードしてみてください。それでも同じエラーになる場合は、コードで参照しているオブジェクトの数を減らします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ParamArray はバリアント型の配列として宣言する必要があります。

ParamArray パラメータへの各引数は、別のデータ型にすることができます。したがって、パラメータ自体は、バリアント型 (Variant) の配列として宣言しなければなりません。。また、任意の数の引数を ParamArray に引き渡すことができます。呼び出しが行われると、呼び出しで指定された各引数は、バリアント型 (Variant) 配列の要素に対応します。次に例を示します。

Sub MySub(ParamArray VarArg())

. . .

End Sub

Call MySub ("First arg", 2, 3.54)

エラーの原因と対処方法を次に示します。

•	プロシージャの定義で、ParamArray パラメータがバリアント型 (Variant) 以外の型の配列として定義されています。

バリアント型 (Variant) の配列として、パラメータの型を宣言し直します。

•	ParamArray パラメータにはデータ型が指定されていませんが、プロシージャ定義が Deftype ステートメントの適用範囲内にあるため、パラメータがバリアント型 (Variant) 以外の型で暗黙的に宣言されています。

As Variant 節を明示的に指定して ParamArray パラメータを宣言します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このエラーの詳細については、Readme ファイルを参照してください。

ヘルプを作成した後に追加されたトピックがいくつかあります。このトピックのヘルプは、ホスト アプリケーションの Readme ファイルにあります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Private の列挙型およびユーザー定義型を、パブリック プロシージャの引数、戻り値、パブリック データ メンバ、またはパブリックのユーザー定義型の要素として使用することはできません。

Public なプロシージャは、プロジェクト内のすべてのモジュールで参照可能ですが、Private Enum 型は、そのモジュール以外では参照できません。エラーの原因と対処方法を次に示します。

•	Public なプロシージャは、Public クラスにありますが、その戻り値またはパラメータが標準モジュールまたは Private クラスで定義されています。

Enum Public を削除します。クラス モジュールに記述しなければなりません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロシージャが大きすぎます。

プロシージャをコンパイルするとき、そのコードは 64K を超えることはできません。エラーの原因と対処方法を次に示します。

•	コンパイル時に、このプロシージャのコードが 64K を超えています。

このプロシージャおよび他の大きなプロシージャを、複数の小さなプロシージャに分割します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクト内で定義されている、プロシージャ、変数、定数などが多すぎます。

プロジェクトのプロシージャ、変数、定数、およびパラメータの名前は名前テーブルに格納されます。エラーの原因と対処方法を次に示します。

•	プロジェクトの名前テーブルの名前数が 32,768 を超えています。

名前テーブルには、一時的にいくつかの重複した名前が格納される場合があります。プロジェクトをディスクに保存し、閉じることで名前テーブルを圧縮することができます。プロジェクトを再度開いたときに、まだ同じエラーになる場合は、複数のプロシージャでローカル変数名を再利用して名前の数を減らし、再度プロジェクトを保存し、閉じて圧縮し、また開きます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクトが見つかりません。

プロジェクトが見つかりませんでした。エラーの原因と対処方法を次に示します。

•	指定されたプロジェクト名が見つかりません。

プロジェクトの指定方法に誤りがないかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モジュール レベルでは定義できません。

状況によっては、修飾名を含むプロシージャ呼び出しができないホスト アプリケーションがあります。エラーの原因と対処方法を次に示します。

•	プロシージャ呼び出しのモジュール名にドット表記 (qualifier.item ) が使用されています。

この場合は、指定した修飾子がホスト アプリケーションで既に認識されていて、プロシージャ呼び出しの際に指定する必要がないことが考えられます。これが原因であれば、修飾子を削除すると、ホスト アプリケーションでプロシージャ呼び出しが正しく行われます。その他の修飾名の制限については、アプリケーションのマニュアルを参照してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


対象はコレクションでなければなりません。

2 つの識別子の間に感嘆符 (!) を記述できるのは、コレクションの場合に限られます。エラーの原因と対処方法を次に示します。

•	感嘆符 (!) の左側に記述されている名前がコレクションの名前でありません。

コレクションの名前を使用するのであれば、その名前が正しいかどうかを確認してください。感嘆符 (!) は、単精度浮動小数点数型 (Single) の型宣言文字としても使用されます。コレクションの名前でない場合は、変数名に付加された型宣言文字 ! が別の名前と連結されている可能性があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


値が有効範囲にありません。

配列の要素数を指定する方法には制限があります。エラーの原因と対処方法を次に示します。

•	配列の境界の指定が間違っています。たとえば、次の範囲は正しくありません。

Dim MyArray(10 To -5)	' 降順は指定できません。

Dim MyArray(0 To 0)	' 配列内に要素がありません。

構文が正しいかどうかを確認します。たとえば、次の範囲は有効です。

Dim MyArray(-5 To 10)

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


RSet は文字列の場合にのみ使用できます。

RSet を使用して、固定長文字列または可変長文字列内の文字列データを右揃えします。エラーの原因と対処方法を次に示します。

•	文字列ではない変数で、RSet ステートメントを使用しようとしています。

可能であれば、変数を文字列に変換します。可能でなければ、RSet は使用しないでください。

メモ   LSet ステートメントを使用して、1 つのユーザー定義型変数の要素を別の互換性のあるユーザー定義型変数の要素に代入できますが、移植性が低いのでお勧めしません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


実行時エラー <番号>

このエラーは、ユーザー定義のエラーです。エラーの原因と対処方法を次に示します。

•	Visual Basic のエラーとは、無関係のエラーが発生しました。

エラーの発生したオブジェクトまたはオブジェクト ライブラリのマニュアルに従って処理します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索文字列が長すぎるか複雑すぎます。

Visual Basic のパターン マッチング機能は、無制限ではありません。エラーの原因と対処方法を次に示します。

•	指定された検索文字列が長すぎるか、またはワイルドカード文字の構文の組み合わせが解釈できません。

検索文字列を短くするか、簡単なものにして、再度検索を行います。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索文字列を指定してください。

検索文字列を指定する必要があります。エラーの原因と対処方法を次に示します。

•	比較するための文字列を指定せずに検索を実行しようとしています。

検索文字列を指定する必要があります。置換文字列に長さ 0 の文字列 ("") を指定することはできますが、検索文字列に長さ 0 の文字列を指定しても意味がありません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索文字列が見つかりません。

検索文字列が見つかりませんでした。エラーの原因と対処方法を次に示します。

•	指定された検索適用範囲の開始点から終了点までの間に、一致する文字列がありません。

検索を続ける場合は、検索の適用範囲を広げてください。

•	パターン マッチング式で左かっこが指定されていません。

左かっこを指定します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Seek の実行に失敗しました。ディスクから読み書きできません。

Seek ステートメントは、直接ディスクに対して実行されます。エラーの原因と対処方法を次に示します。

•	書き込み保護、読み取り専用、またはロックされたディスクまたはファイルから読み取りしようとしています。

書き込み保護属性を解除するか、読み取り専用属性またはロックを変更します。ただし、ファイルが別のプロセスでロックされている場合は、そのロックは解除できません。

•	リムーバル ディスクが物理的に変更されたなどの理由で、ファイルが使用できなくなりました。

ファイルが別のディスクに移動されている場合は、そこからアクセスします。それ以外はアクセスできません。

•	プロジェクト ファイル、オブジェクト ライブラリ、またはタイプ ライブラリから読み取りしようとしましたが、ファイルが破損しています。

ライブラリまたはプロジェクト ファイルの新しいコピーを入手します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Select Case に対応する End Select がありません。

Select Case 構造は、End Select ステートメントで終了しなければなりません。エラーの原因と対処方法を次に示します。

•	Select Case ステートメントに対応する End Select ステートメントがありません。

Select Case...End Select 構造内に、正しく対応していない Select Case...End Select 構造がないかどうかを確認します。Select Case ステートメントをネストしている場合は、それぞれ End Select が対応している必要があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正なウォッチ式が選択されました。

いつでもウォッチ式を選択できるわけではありません。エラーの原因と対処方法を次に示します。

•	[クイック ウォッチ] コマンドがクリックされましたが、選択されている式が有効な式でありません。たとえば、コメントや Sub プロシージャ呼び出しは、ウォッチすることはできません。

有効な式を選択するか、[ウォッチ式の追加] をクリックして、有効な式を入力してください。

•	ウォッチ式は、ウォッチする式が定義されているプロジェクトの国別情報に対応するコード構文である必要があります。

国別情報に対して有効な式を記述してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このコマンドは、現在のプロシージャ内の実行可能な行以外では無効です。

[次のステートメントの設定] コマンドをクリックすると、中断中のプログラムの再開位置を指定できます。エラーの原因と対処方法を次に示します。

•	このコマンドをクリックしたとき、カーソルのある行に実行可能なステートメントが含まれていませんでした。

カーソルを実行可能なステートメントを含む行に移動し、再度コマンドをクリックします。宣言、行ラベル、およびコメントは実行可能ではありません。したがって、宣言、ラベル、またはコメントだけの行は、[次のステートメントの設定] コマンドのターゲットになりません。

•	このコマンドをクリックしたとき、カーソルのある行が現在実行中のプロシージャの外側にありました。

カーソルを現在実行中のプロシージャ内の行に移動します。


SHARE.EXE が必要です。

Visual Basic を起動するときには、SHARE.EXE プログラムが実行されている必要があります。エラーの原因と対処方法を次に示します。

•	Visual Basic を起動する前に、SHARE.EXE が実行されていません。

アプリケーションを閉じて、SHARE.EXE を起動し、再度アプリケーションを起動します。このエラーを繰り返さないようにするには、AUTOEXEC.BAT ファイルに SHARE.EXE を記述しておき、マシンを起動したときに自動的に SHARE.EXE が起動されるようにしておきます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


指定されたファイル (ライブラリまたはプロジェクト) は、既に登録されています。

[参照設定] ダイアログ ボックスには、参照先ライブラリとプロジェクトが表示されます。エラーの原因と対処方法を次に示します。

•	[参照設定] ダイアログ ボックスの [参照] がクリックされた後、[参照設定] ダイアログ ボックスの [参照可能なライブラリ ファイル] セクションに既に表示されているタイプ ライブラリまたはプロジェクトが選択されました。

プロジェクトまたはタイプ ライブラリをプロジェクトに組み込むには、[参照設定] ダイアログ ボックスを表示して、そのタイプ ライブラリ名またはプロジェクト名がオンになっていることを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Type ブロック内では無効なステートメントです。

Type...End Type ステートメント ブロック内では、要素名、要素名の As type 節、およびコメントのみを記述できます。エラーの原因と対処方法を次に示します。

•	ユーザー定義型定義に無効なステートメントが記述されています。

コメント、要素名、および As type 節以外の記述を削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Type ブロック外では無効なステートメントです。

Type...End Type ステートメント ブロックの外側で変数を宣言するときの構文と、ユーザー定義型の要素を宣言するときの構文とは異なります。エラーの原因と対処方法を次に示します。

•	Type...End Type ブロックの外側またはステートメントの外側で、変数を宣言しようとしています。

Type...End Type ブロックの外側で As 節を指定して変数を宣言するときは、Dim、ReDim、Static、Public、または Private の宣言ステートメントを使用します。たとえば、次の例では、1 番目の MyVar の宣言はエラーになりますが、2 番目と 3 番目の MyVar の宣言は有効になります。

MyVar As Double	' 無効な宣言構文です。

Dim MyVar As Double

Type AType

MyVar As Double	' Type ブロック内にあるので、

End Type	' 有効な宣言構文です。

•	End Type ステートメントに対応する Type ステートメントがありません。

問題のある End Type を確認し、Type ステートメントを前に記述するか、End Type ステートメントが必要なければ削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ステートメントが複雑すぎます。

Visual Basic でステートメントの解釈ができません。エラーの原因と対処方法を次に示します。

•	ステートメントが複雑なため、構文解析できません。

ステートメントを細かく分割するか、複雑な条件節を論理演算子と If...Then...Else ステートメントに置き換えます。

•	ステートメントまたは関数での関数呼び出しのネストが多すぎます。

先に関数を呼び出し、その結果を特定の変数に代入しておき、その変数を問題のあるステートメントで使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Select Case と最初の Case の間のステートメントおよびラベルが適切ではありません。

Select Case ステートメントと最初の Case 節との間には、コメント以外は記述できません。エラーの原因と対処方法を次に示します。

•	Select Case と最初の Case 節との間にステートメントが記述されています。次に例を示します。

Select Case SomeVar

' この行はコメントで、有効な行です。

Stop	' Stop ステートメントでさえも、この位置では無効になります。

Case SomeValue

. . .

End Select

Select Case ステートメントと最初の Case ステートメントの間には、何も記述できません。挿入されている式がコメントである場合は、コメント記号 (') を先頭に付けます。その他の場合は、適切な位置に移動するか、削除してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


構文エラー

Visual Basic で解釈ができません。エラーの原因と対処方法を次に示します。

•	キーワードまたは引数が間違っています。

キーワードと名前付き引数の名前は、構文で指定されているものと正確に一致していなければなりません。オンライン ヘルプを参照して名前を確認してください。

•	区切り記号が間違っています。

たとえば、決まった位置のオプションの引数を省略する場合は、その省略する引数のプレースホルダとして、カンマ (,) を代わりに記述する必要があります。

•	プロシージャが定義されていません。

プロシージャ名を確認します。

•	同じプロシージャ定義で、Optional と ParamArray の両方を指定しようとしています。

ParamArray 引数に Optional は指定できません。いずれか一方を削除します。

•	イベント プロシージャの定義で Optional または ParamArray 引数を指定しようとしています。

引数の指定から Optional または ParamArray キーワードを削除してください。

•	RaiseEvent ステートメントで名前付き引数を指定しようとしました。

イベントでは名前付き引数を使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


バイナリ互換 DLL または EXE 内に、Implements ステートメントで指定したデータ型の定義が見つかりません。

バイナリ互換のサーバーでインプリメントしているインターフェイスが、別の DLL ファイルに含まれいている場合は、再コンパイル時に注意が必要です。エラーの原因と対処方法を次に示します。

•	参照している DLL がプロジェクト互換で再コンパイルされたため、インターフェイスの GUID が変更されました。この変更は表面上には識別できないため、予期しないエラーを発生させる場合があります。同様に、他者から提供されたプロジェクト互換の DLL を参照する場合にも、問題が発生することがあります。

通常このエラーは、バイナリ互換の DLL または EXE に含まれているタイプ ライブラリがプロジェクトで参照されており、この参照が破損している場合に発生します。参照が破損する原因としては、タイプ ライブラリが他のファイル (再コンパイル後の DLL/EXE など) によって上書きされた場合、タイプ ライブラリ ファイルが削除された場合、タイプ ライブラリの参照先が他のマシンに変更された場合に、参照先のタイプ ライブラリが変更/登録されていない状況が考えられます。

対処方法の 1 例としては、参照しているタイプ ライブラリ ファイルをローカル マシンにコピーして登録し直す方法があります。この場合、コピーするファイルには、上書きされていないファイル、再コンパイルされていないファイルを使用します。この方法でも対処できない場合は、DLL/EXE ファイルをバイナリ互換ファイルとして使わないように設定を変更してください。


バイナリ互換の DLL または EXE では、引数または戻り値のデータ型に未定義のデータ型が使用されています。

バイナリ互換のサーバーで使用している引数や戻り値の型などの情報が、別の DLL ファイルに含まれている場合には、再コンパイル時に注意が必要です。エラーの原因と対処方法を次に示します。

•	プロジェクトのバージョン互換をバイナリ互換に設定してから再コンパイルすると、プロジェクト互換が自動的に設定され、インターフェイスの GUID (インターフェイス ID) が変更されます。この変更は表面上には識別できないため、予期しないエラーを発生させる場合があります。

通常このエラーは、バイナリ互換の DLL または EXE ファイルに含まれているタイプ ライブラリへの参照が破損している場合に発生します。参照が破損する原因としては、タイプ ライブラリが他のファイル (再コンパイル後の DLL や EXE) によって上書きされた場合、タイプ ライブラリ ファイルが削除された場合、タイプ ライブラリの参照先が他のマシンに変更された場合に、参照先のタイプ ライブラリが変更/登録されていない状況が考えられます。

対処方法の 1 例としては、参照しているタイプ ライブラリ ファイルをローカル マシンにコピーして登録し直す方法があります。この場合、コピーするファイルには、上書きされていないファイル、再コンパイルされていないファイルを使用します。この方法でも対処できない場合は、DLL/EXE ファイルをバイナリ互換ファイルとして使わないように設定を変更してください。


今行った変更により、このオブジェクト モジュールは、指定した互換 ActiveX コンポーネントとの互換性が失われる可能性があります。

互換 ActiveX コンポーネントが、実行可能ファイルまたはダイナミック リンク ライブラリ (DLL) として既に配布され、存在する場合は、そのインターフェイスを変更しないように注意しなければなりません。エラーの原因と対処方法を次に示します。

•	既に実行可能ファイルによって提供されているオブジェクト モジュールのコードを編集しようとしています。

オブジェクトのインターフェイスに影響するような編集を行うと、クラスの前バージョンに対する上位互換性が失われ、コンパイル済みコードの以前のバージョンの部分で新バージョンを使用できなくなります。

Visual Basic では、[ツール] メニューの [参照設定] をクリックすると、ダイアログ ボックスに互換 ActiveX コンポーネントの名前が表示されます。

重要   編集を行う場合は、エラー メッセージ ダイアログ ボックスの [OK] をクリックします。編集を元に戻す場合は、[キャンセル] をクリックします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索が終了しました。

[置換] ダイアログ ボックスの [次を検索] と [置換] をクリックして置換を行うと、置換した総数は表示されません。原因と作用を次に示します。

•	検索と置換を行うときに、選択範囲、プロシージャ、モジュール、またはプロジェクトの領域を指定できます。

領域を選択したら、それが既定の検索領域になります。領域を選択しない場合は、カレント モジュールが既定の検索領域になります。検索の適用範囲を変更するには、[置換] ダイアログ ボックスで別のオプションを選択します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索が終了しました。1 個の項目を置換しました。

[置換] ダイアログ ボックスの [すべて置換] をクリックして置換を行うと、置換された総数が表示されます。原因と作用を次に示します。

•	検索と置換では、指定された文字列のインスタンスだけが検索され、置換が行われます。選択範囲、プロシージャ、モジュール、またはプロジェクトの領域を指定できます。

領域を選択したら、それが既定の検索領域になります。領域を選択しない場合は、カレント モジュールが既定の検索領域になります。検索の適用範囲を変更するには、[置換] ダイアログ ボックスで別のオプションを選択します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索が終了しました。n 個の項目を置換しました。

[置換] ダイアログ ボックスの [すべて置換] をクリックして置換を行うと、置換された総数が表示されます。原因と作用を次に示します。

•	検索と置換を行うときに、選択範囲、プロシージャ、モジュール、またはプロジェクトの領域を指定できます。

領域を選択したら、それが既定の検索領域になります。領域を選択しない場合は、カレント モジュールが既定の検索領域になります。検索の適用範囲を変更するには、[置換] ダイアログ ボックスで別のオプションを選択します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このプロジェクトの VBP ファイルには、不正なライブラリ参照 ID が含まれています。

[参照設定] ダイアログ ボックスで参照が選択されているプロジェクトを保存するとき、プロジェクトの .VBP ファイル (Visual Basic の以前のバージョンでは .MAK ファイルと呼ばれていました。) にエントリが作成されます。たとえば、データ アクセス オブジェクトの場合は次のようになります。

Reference=*\G{00025E01-0000-0000-C000-000000000046}#0.0#0#C:\WINDOWS\SYSTEM\DAO2516.DLL#Microsoft

DAO 2.5 Object Library

このエラーは、この参照が編集されている場合や破損している場合に起こります。エラーの原因と対処方法を次に示します。

•	.VBP ファイル内の参照が無効です。

.VBP ファイルから無効な行を削除し、[ツール] メニューの [参照設定] ダイアログ ボックスを表示し、正しいオブジェクト ライブラリを確認します。その後でプロジェクトを保存すると、正しい情報が .VBP ファイルに記述されます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このコンポーネントはイベントを発生しません。

イベント プロシージャは、オブジェクトで発生できるイベントに対応している必要があります。エラーの原因と対処方法を次に示します。

•	イベントを発生しないオブジェクトに対して、イベント プロシージャが記述されています。

イベントに対応していないイベント プロシージャは、記述できません。

•	イベントを発生しないクラスで、WithEvents を使用しようとしています。

イベントを発生しないクラスでは、WithEvents は使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


引数が多すぎます。

プロシージャの引数の数は 60 までです。エラーの原因と対処方法を次に示します。

•	引数の数が 60 を超えています。

多数の引数を指定する必要がある場合は、ユーザー定義型を定義して異なる型の引数をまとめるか、最後の引数に ParamArray を使用して複数の値を渡します。また、配列を使用して複数の引数を引き渡すこともできます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


次元が多すぎます。

配列の次元の数は、60 までです。エラーの原因と対処方法を次に示します。

•	次元数が 60 を超える配列を宣言しようとしています。

次元の数を減らします。

•	配列宣言は制限内ですが、その配列を実際に作成するためのメモリ容量が不足しています。

使用できるメモリ容量を増やすか、次元数を減らします。配列がバリアント型 (Variant) の配列か、バリアント型 (Variant) 内に含まれる配列の場合は、要素のデータ型で配列を再宣言して、同じ次元数の配列を作成できます。たとえば、整数だけを含んでいる場合、整数型 (Integer) の配列として宣言する方が、各要素がバリアント型 (Variant) である場合よりもメモリの消費量は少なくなります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


行継続文字 ( _) を使いすぎています。

行継続文字で結合できる行数は限られています。エラーの原因と対処方法を次に示します。

•	行継続文字で継続されている行が、25 行を超えているか、または 1 つの論理行に 24 を超える行継続文字があります。

いくつかの行を物理的に長くして必要な行継続文字数を減らすか、複数のステートメントに分割します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


動的なローカル変数が多すぎます。

ローカル変数、非静的変数は、プロシージャ内に定義されており、プロシージャが呼び出されるたびに初期化されます。エラーの原因と対処方法を次に示します。

•	プロシージャのローカル変数、非静的変数、およびコンパイラで生成された一時変数に必要なメモリ容量の合計が 32K を超えています。

可能であれば、Static ステートメントで変数を宣言します。Static 変数は、非静的変数とは異なるメモリ リソースに割り当てられるため、プロシージャの呼び出しの後でも値が残っています。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モジュール レベルの変数が多すぎます。

モジュール レベル変数は、モジュールのプロシージャの前にあるモジュールの宣言セクションで宣言される変数です。エラーの原因と対処方法を次に示します。

•	モジュールのすべてのモジュール レベル変数に必要なメモリ容量の合計が 64K を超えています。

このモジュールの格納領域の制限に達しています。可能であれば、別のモジュールで変数を Public で宣言します。また、モジュール レベル変数が 1 つのプロシージャ内でのみ使用されている場合は、そのプロシージャ内で宣言することもできます。プロシージャ呼び出しの後でも値を残しておくために変数をモジュール レベルで宣言している場合は、その変数が参照されるプロシージャ内で変数を Static で宣言します。

メモ   使用可能なメモリ容量は、オペレーティング システムによって異なります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


型宣言文字と宣言されたデータ型が一致しません。

変数のデータ型は、型宣言文字を追加して別の型に変更することはできません。エラーの原因と対処方法を次に示します。

•	ある型の変数が宣言されていて、その変数と同じ適用範囲内で同じ名前の変数を参照し、一致しない型宣言文字を追加しています。

変数に代入された型を変更するには、その変数をバリアント型 (Variant) で宣言します。無効な型宣言文字が追加されているだけの場合は、削除するか変更します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


型宣言文字は使えません。

Visual Basic で型宣言文字が使用できる一方で、いくつかのデータ型 (Byte、Boolean、Date、Object、および Variant など) には、対応する型宣言文字がありません。エラーの原因と対処方法を次に示します。

•	Dim、Static、Public など、As 節を使用する変数の宣言で型宣言文字を使用しようとしています。

型宣言文字を削除するか、As 節を削除します。

•	型宣言文字を使用せずに暗黙的に宣言されている変数への参照で、型宣言文字を使用しようとしています。

MyVar = 20	' 暗黙的に宣言します。

MyVar% = 25	' エラーになります。

型宣言文字を削除するか、元の変数を宣言し直します。

メモ   変数を明示的に宣言する際に型宣言文字を含めている場合は、後でその変数を参照するときには型宣言文字を省略できます。次に例を示します。

Dim MyStr$

MyStr = "明示的に宣言されているため、$ は省略できます。"

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


型宣言文字が必要です。

型宣言文字が必要かどうかは、識別子の宣言の形式によります。エラーの原因と対処方法を次に示します。

•	型宣言文字で暗黙的に宣言されている変数が、型宣言文字を指定せずに参照されています。次に例を示します。

MyStr$ = "暗黙的宣言"

MyStr = "MyStr$ を参照しようとしていますが、" _

 & "MyStr としているためエラーになります。"

明示的に宣言するか、参照の際に型宣言文字を追加します。

メモ   変数を明示的に宣言する際に型宣言文字を含めている場合は、後でその変数を参照するときには型宣言文字を省略できます。次に例を示します。

Dim MyStr$

MyStr = "明示的に宣言されているため、$ は省略できます。"

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


型が一致しません。配列またはユーザー定義型を指定してください。

引数またはパラメータの型には、それが配列なのか、またはユーザー定義型なのかという情報も含まれます。エラーの原因と対処方法を次に示します。

•	引数では、配列またはユーザー定義型の単一の要素、あるいは通常の変数、リテラル、または定数が指定されています。しかし、これが配列全体またはユーザー定義型全体が必要なパラメータに引き渡されています。

引数を変更するか、パラメータの定義を変更します。

•	引数では配列またはユーザー定義型が指定されていますが、パラメータの型と一致していません。

正しい型の配列を引き渡すか、パラメータ宣言の定義を変更します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ディスクから読み込むことができません。

ディスクからの読み取りで問題があります。エラーの原因と対処方法を次に示します。

•	ディスク ドライブ ドアが正しく閉じられていません。

リムーバル ディスクの場合は、ドライブのドアを確認してください。必要に応じて、正しく閉じてください。

•	ディスクの上下が逆になっている可能性があります。

正しい向きに入れ直してください。

•	ディスクが適切にフォーマットされていない可能性があります。

ディスクに正常に保存されているデータが不要であれば、ディスクをフォーマットします。

•	ネットワークに問題があります。

ネットワークを再起動します。

•	ドライブで読み取りできない密度のディスクが挿入されています。

ドライブを変更するか、ドライブで読み取ることができるディスクに内容をコピーします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ディスクに書き込むことができません。

ディスクへの書き込みで問題があります。エラーの原因と対処方法を次に示します。

•	ディスク ドライブ ドアが正しく閉じられていません。

リムーバル ディスクの場合は、ドライブのドアを確認してください。必要に応じて、正しく閉じてください。

•	ディスクの上下が逆になっている可能性があります。

正しい向きに入れ直してください。

•	ディスクが適切にフォーマットされていない可能性があります。

ディスクに正常に保存されているデータが不要であれば、ディスクをフォーマットします。

•	ネットワークに問題があります。

ネットワークを再起動します。

•	ドライブで書き込みできない密度のディスクが挿入されています。

ドライブを変更するか、ドライブで書き込むことができるディスクに内容をコピーします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


予期せぬｴﾗｰが発生しました。

重大なエラーであるかどうか不明です。エラーの原因と対処方法を次に示します。

•	ホスト アプリケーションまたは Visual Basic で不測のエラーが発生しました。

重大なエラーであると仮定する必要はありません。ただし、エラー番号とエラーを再現するための具体的なコードを記録し、Microsoft テクニカル サポートに連絡してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索文字列内に対応するかっこがありません。

かっこは対応していなければなりません。エラーの原因と対処方法を次に示します。

•	検索文字列でかっこが指定されていますが、対応する閉じかっこがありません。

適切な位置に閉じかっこを挿入します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


認識できない言語設定です。

ロードするプロジェクトで指定されているコードの国別情報が、現在、このアプリケーションでサポートされていません。エラーの原因と対処方法を次に示します。

•	プロジェクトは、このコードの国別情報がサポートされるシステムで作成されましたが、同じ国別情報がサポートされていないシステムに移植されました。たとえば、現在のマシンにある ole2nls.dll は、このコードの国別情報を解釈できないバージョンである場合があります。

その場合は、適切なダイナミック リンク ライブラリ (DLL) を現在のシステムにセットアップします。

•	プロジェクトに対応するオブジェクト ライブラリが見つかりません。

対応するオブジェクト ライブラリが使用できることを確認します。たとえば、パスにオブジェクト ライブラリのフォルダが含まれることを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ユーザー定義型を ByVal で渡すことはできません。

ユーザー定義型は参照渡し (既定) だけで引き渡すことができ、値渡しでは引き渡せません。エラーは、呼び出しを行うまで発生しない場合があります。エラーの原因と対処方法を次に示します。

•	ユーザー定義型を表すパラメータの定義に、キーワード ByVal が記述されています。

キーワード ByVal を削除します。呼び出し元に戻される値が変更されないようにするには、同じ型の一時変数を Dim で定義し、その一時変数をプロシージャに引き渡します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ユーザー定義型は定義されていません。

Visual Basic では、ユーザー独自のデータ型を作成できますが、最初に Type...End Type ステートメントで定義するか、適切に登録されたオブジェクト ライブラリまたはタイプ ライブラリで定義する必要があります。エラーの原因と対処方法を次に示します。

•	未定義のデータ型で変数または引数を宣言しようとしているか、または未知のクラスまたはオブジェクトの名前を指定しています。

新しいデータ型を定義するには、モジュールで Type ステートメントを使用します。クラスへの参照を作成する場合は、そのクラスがプロジェクトで参照可能である必要があります。プログラムでクラスを参照する場合は、指定された名前のクラス モジュールがプロジェクトにある必要があります。型名またはオブジェクト名を確認します。

•	宣言しようとしている型が、別のモジュールで Private で宣言されています。

その型宣言を、Public で宣言できる標準モジュールに移動します。

•	型は有効な型ですが、その型が定義されているオブジェクト ライブラリまたはタイプ ライブラリが Visual Basic に登録されていません。

[参照設定] ダイアログ ボックスを表示し、適切なオブジェクト ライブラリまたはタイプ ライブラリを選択します。たとえば、[参照設定] ダイアログ ボックスで Data Access Object をオンにしていない場合は、Database、Recordset、および TableDef などの型は認識されず、コードで参照するとエラーになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ユーザー定義型にはメンバが必要です。

ユーザー定義型には、少なくとも 1 つの要素が必要です。エラーの原因と対処方法を次に示します。

•	Type...End Type 定義で空のユーザー定義型が指定されています。

Type ステートメントに不要なコメント記号がないかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


変数が定義されていません。

Option Explicit ステートメントを使用して、モジュール内で明示的に宣言されていない変数を使用できなくしたり、記述ミスでエラーが発生したときに、不注意で作成された変数を見つけることができます。エラーの原因と対処方法を次に示します。

•	Option Explicit ステートメントによって変数を明示的に宣言するように指定されているにもかかわらず、未宣言の変数が使用されています。

変数を明示的に宣言するか、変数の名前が間違っている場合には訂正します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


変数が作成されていません。

変数は、ウォッチ ウィンドウまたはイミディエイト ウィンドウに表示する前、およびイミディエイト ウィンドウで値を代入する前に作成しておかなければなりません。エラーの原因と対処方法を次に示します。

•	中断モードで [ステップ イン] コマンドを一度も実行しないうちに、コードで作成されたばかりのローカル変数の値を表示しようとしています。

コードのステップを実行して、新しいステートメントをコンパイルします。

•	[呼び出し履歴] ダイアログ ボックスを使用して呼び出しチェーンのはるか下位にあるプロシージャに移動し、そのプロシージャで追加したばかりのローカル変数の値を表示しようとしています。

コンテキストの値を表示するには、そのプロシージャまで戻る必要があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


変数が必要です。

このエラーは、代入できない状態で値を代入しようとしたときによく発生します。エラーの原因と対処方法を次に示します。

•	数式を Len 関数の引数として使用しようとしています。

Len 関数では数式、数値リテラル、またはバイナリ数式は使用できませんが、文字列変数または数値変数、文字列式、ユーザー定義型の変数は使用できます。

•	Input #、Let、Get、または Put の引数として、関数呼び出しまたは式が使用されています。たとえば、引数として配列変数を指定しているように見えても、実際には同じ名前の関数の呼び出しである場合があります。

Input #、Let、Get、および Put では、関数呼び出しを引数として指定することはできません。

•	既に定数として宣言されている識別子に値を代入しようとしています。

識別子を別の名前にします。

•	For...Next 構造で、ループ カウンタに変数以外のものを使用しようとしています。

カウンタに変数を使用します。

•	値の取得のみ可能なプロパティまたは複数の変数 (X + Y など) の式に値を代入しようとしています。値は、代入されるとメモリに格納されます。指定する式は、単一の書き込み可能な格納場所を表す必要があります。

代入式を記述し直して、データを設定できる単一の変数名にします。

•	タイプ ライブラリで定数として定義されている、明示的に宣言されていない変数を使用しようとしています。

変数の名前を変更するか、明示的に宣言します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


警告 : [言語/国] の設定でユーザー定義を選択すると、汎用性がなくなります。

すべての言語設定が移植できるわけではありません。エラーの原因と対処方法を次に示します。

•	カスタム言語設定がコードで使用されています。

コードでカスタム言語/国設定を選択するときは、コードで使用する言語規約がシステムのコントロール パネルで設定されているものと一致していなければなりません。カスタム コード国別情報設定を使用することはできますが、別の国別情報や別の設定のシステムでは、そのコードが実行できない場合があります。ホスト アプリケーションでは、そのアプリケーションが実行されているマシンのコントロール パネルの設定に基づいて文字列が解析されます。

ターゲット マシンのコントロール パネルの設定が、コードを記述したマシンのものと異なる場合は、国ごとに固有な桁区切り記号に基づくコードなど、ホスト アプリケーションで解析された文字列は機能しません。したがって、コードを他のユーザーに送る予定がある場合は、カスタム言語設定は使用しないようにします。他のユーザーにコードを送る場合は、定義済みの国別情報を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Wend に対応する While がありません。

Wend ステートメントの前に、対応する While ステートメントが必要です。エラーの原因と対処方法を次に示します。

•	Wend ステートメントに対応する While ステートメントがありません。

エラーが発生している While...Wend ループ内に、正しく対応していないループがネストしていないかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


While に対応する Wend がありません。

While ステートメントに対応する Wend ステートメントがありません。エラーの原因と対処方法を次に示します。

•	While...Wend 構造が正しく閉じられていません。

While...Wend 構造内に、正しく対応していない While...Wend 構造がないかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


With の対象は、ユーザー定義型、オブジェクト型、またはバリアント型のいずれかでなければなりません。

With...End With ブロックでは、すべての変数型が使用できるわけではありません。エラーの原因と対処方法を次に示します。

•	オブジェクト型 (Object)、ユーザー定義型、またはオブジェクトを含むバリアント型 (Variant) でない変数を With ブロックで使用しようとしています。

オブジェクト、ユーザー定義型、またはバリアント型 (Variant) 変数が正しいかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


配列の次元が一致していません。

配列を参照するには、その配列が宣言されている次元と同じ数の次元に一致するインデックスを使用しなければなりません。。エラーの原因と対処方法を次に示します。

•	配列を参照するのに、実際の次元数とは異なる次元数が使用されています。たとえば、Dim X(5) (1 次元) と定義されている配列を X(2,4) (2 次元) として参照するとこのエラーになります。

配列の宣言を確認し、2 次元を 1 次元に変更して参照してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このアクションを実行するとプロジェクトがリセットされます。実行しますか ?

中断モードでコードを編集できますが、編集によっては実行を続けることができない場合があります。エラーの原因と対処方法を次に示します。

•	静的変数の宣言など、実行を続けることができない編集を行おうとしています。

[はい] をクリックすると、実行が終了され、コードを編集することができます。[いいえ] を選択すると、中断した位置からコードの実行を続けることができます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


#If ブロックの最後には #EndIf が必要です。

#If は条件付きコンパイラ ディレクティブです。エラーの原因と対処方法を次に示します。

•	#If ブロックが #End If で終了していません。

適切な位置に #End If を追加します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プライベート オブジェクト モジュールを、パブリック オブジェクト モジュール内で、パブリック プロシージャの引数または戻り値、パブリック データ メンバ、またはパブリックのユーザー定義型のフィールドとして、使用することはできません。

エラーの原因と対処方法を次に示します。

•	プライベート オブジェクト モジュールをパブリック オブジェクト モジュール内で引数として使おうとしました。あるいはパブリック プロシージャの戻り値、データ メンバまたはパブリック ユーザー 定義型のフィールドとして使おうとしました。


パブリック オブジェクト モジュールで定義されたパブリック ユーザー定義型に限り、クラス モジュール内のパブリック プロシージャの引数または戻り値、またはパブリック ユーザー定義型の要素として使用することができます。

エラーの原因と対処方法を次に示します。

•	パブリック ユーザー定義型を、クラス モジュールのパブリック プロシージャの引数または戻り値として使おうとしました。またはパブリック ユーザー定義型のフィールドとして使おうとしました。パブリック ユーザー定義型がパブリック オブジェクト モジュール内で定義されている場合にのみ、このような使い方が可能です。.


無効なオブジェクト ライブラリです。または定義されていないオブジェクトへの参照を含んでいます。

エラーの原因と対処方法を次に示します。

•	参照先のオブジェクト定義が見つからないか、あるいは参照先のオブジェクト定義が不正です。


引数は省略できません。(Error 449)

引数の数と型は、指定されているものと一致していなければなりません。エラーの原因と対処方法を次に示します。

•	引数の数が一致しません。

必要な引数をすべて指定します。たとえば、Left 関数には 2 つの引数が必要で、1 番目の引数には処理対象の文字列を指定し、2 番目の引数には文字列の左端から取り出す文字数を指定します。この 2 つの引数は省略できないため、両方とも指定しなければなりません。

•	省略した引数は省略できません。

引数が省略できるのは、プロシージャ宣言の Optional で宣言されているユーザー定義プロシージャを呼び出すときだけです。呼び出すときに引数を指定するか、定義でパラメータを Optional で宣言します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


DLL が正しく呼び出せません。(Error 49)

ダイナミック リンク ライブラリ (DLL) または Macintosh コード リソース ルーチンに引き渡す引数は、ルーチンで指定されているものと正確に一致させる必要があります。呼び出し規約では、引数の数、型および順番が決められています。エラーの原因と対処方法を次に示します。

•	DLL (Windows) または コード リソース (Macintosh) のルーチンを呼び出す際に引き渡す引数の型が違っています。

すべての引数の型が、呼び出すルーチンの宣言で指定されているものと一致するかどうかを確認します。

•	DLL (Windows) または コード リソース (Macintosh) のルーチンを呼び出す際に引き渡す引数の数が違っています。

引数の数が、呼び出すルーチンの宣言で指定されているものと一致するかどうかを確認します。

•	DLL のルーチンを呼び出す際に、StdCall 呼び出し規約が使用されていません。

DLL ルーチンの引数が値渡しである場合は、このルーチンの引数を宣言するときにキーワード ByVal を指定しているかを確認します。

•	Windows DLL の Declare ステートメントに CDecl が含まれています。

キーワード CDecl は、Macintosh のみで使用できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ファイル モードが不正です。(Error 54)

ファイルの内容を操作するのに使用するステートメントは、ファイルを開いたときのモードに対応している必要があります。エラーの原因と対処方法を次に示します。

•	Put ステートメントまたは Get ステートメントで、シーケンシャル ファイルが指定されています。

Put ステートメントおよび Get ステートメントは、Random アクセスまたは Binary アクセスで開いたファイルだけを参照できます。

•	Print # ステートメントで、Output または Append 以外のアクセス モードで開いたファイルが指定されています。

別のステートメントを使用してファイルにデータを書き込むか、適切なモードでファイルを開き直します。

•	Input # ステートメントで、Input 以外のアクセス モードで開いたファイルが指定されています。

別のステートメントを使用してファイルにデータを書き込むか、Input モードでファイルを開き直します。

•	読み取り専用ファイルに書き込みをしようとしています。

ファイルの読み取り/書き込み状態を変更するか、書き込みをしないようにします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ファイル名またはファイル番号が不正です。(Error 52)

指定されたファイルをアクセスしようとしてエラーが発生しました。エラーの原因と対処方法を次に示します。

•	ステートメントからファイルを参照する際に、ファイル番号またはファイル名に次のエラーがあります。

•	Open ステートメントで指定されていないか、Open ステートメントで指定されていても、その後に閉じられています。

Open ステートメントでファイル名を指定します。引数を指定せずに Close ステートメントを実行すると、現在開いているファイルがすべて閉じられてしまい、ファイル番号もすべて無効になってしまいます。

•	ファイル番号 (1 - 511) が範囲外です。

ファイル番号をコードで計算して求めている場合は、番号が正しいかどうかを確認します。

•	名前または番号が無効です。

ファイル名は、オペレーティング システムの規則と共に Basic のファイルの名前付け規則にも準拠している必要があります。Microsoft Windows では、ファイルとフォルダには次の名前付け規則が使用されます。

•	ファイル名またはフォルダ名は、名前と拡張子の 2 つの部分に分けることができます。名前と拡張子は、myfile.new のようにピリオド (.) で区切ります。

•	名前は最大 255 文字までです。

•	名前は文字または数字で始めなければなりません。名前には、ダブル クォーテーション (")、クォーテーション (')、スラッシュ (/)、円記号 (\)、コロン (:)、および縦棒 (|) を除いて、大文字、小文字の文字が使用できます (ファイル名では、大文字/小文字は区別されません)。

•	名前にスペースを含めることができます。

•	次の名前は予約されているため、ファイル名またはフォルダ名には使用できません。CON、AUX、COM1、COM2、COM3、COM4、LPT1、LPT2、LPT3、PRN、および NUL。たとえば、Open ステートメントでファイル名に PRN を指定すると、Open ステートメントで指定されたファイル番号に指定され、既定のプリンタが Print # ステートメントおよび Write # ステートメントの出力先になります。

•	次に Microsoft Windows で有効なファイル名の例を示します。

LETTER.DOC

My Memo.Txt

BUDGET.92

12345678.901

Second Try.Rpt

•	Macintosh では、コロン (:) 以外の文字であれば、スペースも含めて、どんな文字でも使用できます。Null 文字 (Chr(0)) は、ファイル名に使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


レコード長が一致しません。(Error 59)

Get ステートメントまたは Put ステートメントで指定するレコード変数の長さは、対応する Open ステートメントで指定された長さでなければなりません。エラーの原因と対処方法を次に示します。

•	レコード変数の長さが、対応する Open ステートメントで指定された長さと異なります。

レコード変数の型を定義しているユーザー定義型の固定長変数のサイズの合計は、Open ステートメントの Len 節で指定されている値と同じである必要があります。たとえば、RecVar が適当な型の変数であるとすると、Len 関数を使用して次のように長さを指定することができます。

Open MyFile As #1 Len = Len(RecVar)

•	Put ステートメントの変数が可変長文字列です (または変数に可変長文字列が含まれます)。

Put ステートメントでランダム アクセス ファイルに書き込まれる可変長文字列には、常に 2 バイトの記述子が追加されるため、可変長文字列は、Open ステートメントの Len 節で指定されているレコード長に比べて、少なくとも 2 バイト短くしなければなりません。

•	Put ステートメントの変数がバリアント型 (Variant) です (または変数にバリアント型 (Variant) が含まれます)。

可変長文字列と同様に、バリアント型 (Variant) でも 2 バイトの記述子が必要になります。可変長文字列を含むバリアントは、4 バイトの記述子が必要になります。したがって、バリアント型 (Variant) の可変長文字列では、Len 節で指定されているレコード長に比べて、少なくとも 4 バイト短くしなければなりません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


レコード番号が不正です。(Error 63)

ファイルをアクセスしようとしてエラーが発生しました。エラーの原因と対処方法を次に示します。

•	Put ステートメントまたは Get ステートメントで指定されているレコード番号が 0 以下です。

レコード番号を求めている計算を確認します。レコード番号を含む変数、またはレコード番号を計算するのに使用されている変数が正しいかどうかを確認します。モジュールで Option Explicit が記述されていない場合、変数の名前が間違っていても、変数が暗黙的に宣言され、初期値に 0 が設定されます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


必要なテンポラリファイルを作成できません。(Error 322)

実行可能ファイルを作成するときに、テンポラリファイルを作成する必要があります。エラーの原因と対処方法を次に示します。

•	環境変数 TEMP で指定されているフォルダがあるドライブに、空き容量がありません。

そのドライブのファイルを削除するか、環境変数 TEMP で別のドライブを指定します。

•	環境変数 TEMP で指定されているドライブまたはフォルダが無効または読み取り専用になっています。

環境変数 TEMP で有効なドライブを指定するか、現在指定されているドライブまたはフォルダの読み取り専用の制限を解除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


要求された操作は実行できません。(Error 17)

プロジェクトの現在の状態が無効になるような操作は実行できません。エラーの原因と対処方法を次に示します。

•	要求された操作を実行すると、プロジェクトの現在の状態が無効になります。たとえば、プログラムが中断モードのときに、[参照設定] ダイアログ ボックスで新しいプロジェクトかオブジェクト ライブラリに参照を追加するとエラーになります。

カレント コードの実行を中止してから、操作を再度試行します。

•	現在実行中のコードをプログラムで変更しようとしています。たとえば、コードで、ディスク ファイルから現在実行中のモジュールにコードを取り込もうとしています。

プロジェクト内のモジュールは、そのモジュールを実行していないときであれば変更できますが、実行中のモジュールは変更できません。モジュールを変更するのであれば、モジュールの実行を中止してから、追加や変更を行い、実行を再開します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ディスク名は変更できません。(Error 74)

Name ステートメントで名前が変更できるファイルは、カレント ドライブにあるファイルだけです。エラーの原因と対処方法を次に示します。

•	Name ステートメントを使用して、ファイルを別のドライブに移動しようとしています。

FileCopy を使用してファイルを別のドライブに書き込み、Kill ステートメントで元のファイルを削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


テンポラリ ファイルに保存できません。(Error 735)

コンポーネントの一時的な情報をディスクに保存する必要がある場合があります。エラーの原因と対処方法を次に示します。

•	コンポーネントで、TEMP フォルダが見つかりません。

TEMP フォルダを作成し、TEMP 環境変数にそのパスを設定します。

•	TEMP フォルダのあるドライブまたはパーティションに、情報を保存するための十分な空き容量がありません。

不要なファイルを削除してドライブの空き容量を増やすか、別のパーティションに TEMP フォルダを作成し、TEMP 環境変数にそのパスを設定します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


クラスはオートメーションをサポートしていません。(Error 430)

すべてのオブジェクトがオートメーション インターフェイスを公開しているわけではありません。エラーの原因と対処方法を次に示します。

•	GetObject 関数または CreateObject 関数の呼び出しで指定されているクラスは見つかりましたが、プログラムで利用できるインターフェイスが公開されていません。

オートメーションが公開されていないオブジェクトを制御するコードを記述することはできません。このオブジェクトのクラスでオートメーションを使用する上での制限を、オブジェクトが作成されたアプリケーションのマニュアルで確認してください。

•	DLL プロジェクトを EXE プロジェクトに、あるいはその逆に変更しようとしました。たとえば、既にコンパイルされた DLL が存在し、レジストリに登録されている場合に、プロジェクトの種類を EXE に変更して再コンパイルしたとします。この場合、システムに登録された DLL と EXE の両方が存在することになるので、この DLL または EXE のどちらからもオブジェクトが作成できないことになります。この問題を回避するには、古い DLL あるいは EXE のレジストリ情報を手動で削除する必要があります。

この場合に問題となっているのは、プロジェクト互換と、 EXE から DLL へのプロジェクトの種類の変更の 2 つです。プロジェクト互換では、クラス ID は以前と同じものが保持されますが、インターフェイス ID は保持されません。結果的に同一のクラス ID が、インプロセス サーバーとローカル サーバーの 2 つによって登録されたことになります。インスタンスが作成されたときは、インプロセス サーバーのクラスが選択されますが、インターフェイスへの参照が発生した場合は、インターフェイス ID が変更されているので、インターフェイスを参照することができません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コード リソースのロック エラーです。(Error 455)

このエラーは、Macintosh でのみ発生します。コード リソースにアクセスするときは、そのコード リソースをロックしなければなりません。エラーの原因と対処方法を次に示します。

•	コード リソースのプロシージャが呼び出されました。コード リソースは見つかりましたが、リソースをロックしようとしたときにエラーが発生しました。

"不正な空のハンドルです。" または "不正な空のブロックです。" など、Hlock で返されたエラーを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コード リソースが見つかりません。(Error 454)

このエラーは、Macintosh のみで発生します。エラーの原因と対処方法を次に示します。

•	コード リソースのプロシージャが呼び出されましたが、コード リソースが見つかりません。

リソースが使用できるもので、正しく参照しているかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


リモート プロセス用のタイプ ライブラリまたはオブジェクト ライブラリへの参照は失われました。参照設定を解除して [OK] を押してください。(Error 442)

リモート アクセス中に (つまり、別のプロセスの一部であるオブジェクト、または別のマシンで実行されているオブジェクトをアクセスしているとき)、オブジェクト情報が含まれるライブラリへの接続が切断されました。エラーの原因と対処方法を次に示します。

•	リモート プロセスのオブジェクト ライブラリまたはタイプ ライブラリへの接続が切断されました。

再度接続するには、次の手順に従います。

1.	Application オブジェクトを再起動します。

2.	このヘルプ トピックを入力したエラー ダイアログ ボックスで、[OK] をクリックして、[参照設定] ダイアログ ボックスを表示します。

3.	失われた参照の左側に 「MISSING」 が表示されます。

4.	失われた参照を削除します。

5.	[参照設定] ダイアログ ボックスで、手順 1 で起動したオブジェクトのチェック ボックスをオンにします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


デバイス I/O エラーです。(Error 57)

外部デバイスは、予期せぬエラーが発生しやすくなる場合があります。エラーの原因と対処方法を次に示します。

•	プリンタやディスク ドライブなどのデバイスをプログラムで使用中に、入力エラーまたは出力エラーが発生しました。

デバイスが正しく動作しているかを確認し、操作を再試行します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


デバイスが準備されていません。(Error 68)

エラーの原因と対処方法を次に示します。

•	アクセスしようとしているデバイスがオンラインでないか、または存在しません。

デバイスの電源、およびデバイスをコンピュータに接続しているケーブルを確認します。ネットワーク上のプリンタにアクセスしようとしている場合は、LPT1 に対応するネットワーク プリンタ ID の接続など、コンピュータとプリンタの間の論理接続を確認します。

•	ネットワーク接続が切断している可能性があります。

ネットワークを再度接続し、操作を再試行します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ディスクの空き容量が不足しています。(Error 61)

エラーの原因と対処方法を次に示します。

•	ディスクに Print #、Write #、または Close の操作を実行するための十分な空き容量がありません。

ファイルをいくつか別のディスクに移動するか、削除します。

•	ディスクに必要なファイルを作成するための十分な空き容量がありません。

ファイルをいくつか別のディスクに移動するか、削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ディスクが準備されていません。(Error 71)

エラーの原因と対処方法を次に示します。

•	指定されたドライブにディスクがありません。

ディスクをドライブに装着し、操作を再試行します。

•	指定されたドライブのドライブ ドアが開いています。

ドライブ ドアを閉じて、操作を再試行します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


0 で除算しました。(Error 11)

ゼロ (0) で除算することはできません。エラーの原因と対処方法を次に示します。

•	除数として使用されている式の値がゼロです。

式の変数が正しいかどうかを確認します。変数の名前が間違っていると、暗黙的に初期値ゼロの数値変数が作成されることがあります。式の変数のそれまでの処理を確認し、特に別のプロシージャからそのプロシージャに渡される引数を確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


DLL 読み込み時のエラーです。(Error 48)

ダイナミック リンク ライブラリ (DLL) は、Declare ステートメントの Lib 節で指定されたライブラリです。エラーの原因と対処方法を次に示します。

•	ファイルが DLL 実行可能ファイルでありません。

ファイルがソース テキスト ファイルである場合は、コンパイルおよびリンクを行って DLL 実行可能形式にする必要があります。

•	ファイルが Microsoft Windows DLL でありません。

ファイルと同等の Microsoft Windows DLL を入手してください。

•	ファイルが Microsoft Windows プロテクト モードと互換性のない以前のバージョンの Microsoft Windows DLL です。

DLL の最新バージョンを入手してください。

•	DLL で参照している別の DLL がありません。

参照している DLL を入手し、使用できるようにします。

•	DLL または参照している DLL のうちの 1 つが、パスで指定されているフォルダにありません。

DLL を参照先のフォルダに移動するか、現在のフォルダをパスで指定します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


既に同名のファイルが存在しています。(Error 58)

エラーの原因と対処方法を次に示します。

•	実行時に Name ステートメントで指定されているファイル名など、新しいファイル名が、既に存在するファイル名と同じ場合に、このエラーが発生します。

Name ステートメントで別のファイル名を指定するか、Name ステートメントで指定する前に、同じ名前のファイルを削除します。

•	[名前を付けて保存] コマンドを使用して、現在ロードされているプロジェクトを保存しようとしましたが、既に同じ名前のプロジェクトが存在します。

同じ名前のプロジェクトを上書きしない場合は、別の名前で保存します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ファイルは既に開かれています。(Error 55)

別の Open ステートメントまたは別の操作を行う前に、ファイルを閉じておかなければなりません。エラーの原因と対処方法を次に示します。

•	シーケンシャル出力モードの Open ステートメントが、既に開いているファイルに対して実行されました。

シーケンシャル アクセスで既に開いているファイルは、別のシーケンシャル アクセスで開く前に、閉じておかなければなりません。たとえば、Input で開いているファイルは、Output で開く前に閉じておきます。

•	Kill、SetAttr、または Name などのステートメントで、開いているファイルを参照しています。

ファイルを閉じてから、ステートメントを実行します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ファイルが見つかりません。 (Error 53)

指定された場所にファイルが見つかりません。エラーの原因と対処方法を次に示します。

•	Kill、Name、または Open などのステートメントで、存在しないファイルを参照しています。

ファイル名とパスが正しいかどうかを確認します。

•	ダイナミック リンク ライブラリ (DLL) または Macintosh コード リソースでプロシージャが呼び出されましたが、Declare ステートメントの Lib 節で指定されている名前のライブラリ ファイル または リソース ファイルが見つかりません。

ファイル名とパスが正しいかどうかを確認します。

•	開発環境で、存在しないプロジェクトを開こうとしたり、テキスト ファイルをロードしようとすると、このエラーが発生します。

プロジェクト名またはファイル名とパスが正しいかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


For ループが初期化されていません。(Error 92)

For ループのカウンタは、初期化しておかなければなりません。エラーの原因と対処方法を次に示します。

•	For...Next ループの途中にジャンプしました。

ループの途中へのジャンプを削除してください。For...Next ループ内にラベルを記述することは、お勧めできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ファイルにこれ以上データがありません。(Error 62)

ファイルの末尾以降を読み込むことはできません。エラーの原因と対処方法を次に示します。

•	Input # ステートメントまたは Line Input # ステートメントで、すべてのデータが読み込まれたファイルまたは空のファイルから読み込もうとしています。

Input # ステートメントの直前で EOF 関数を使用し、ファイルの末尾を検出します。

•	Binary アクセスで開いているファイルに対して、EOF 関数が使用されました。

EOF は、シーケンシャル Input アクセスで開いたファイルに対してだけ使用できます。Binary アクセスで開いたファイルに対しては、Seek 関数と Loc 関数を使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


内部エラーです。(Error 51)

このエラーが、Error ステートメントまたは Raise メソッドで生成されたものでないことを確認します。エラーの原因と対処方法を次に示します。

•	Visual Basic 内部で障害が発生しました。

このエラーが Error ステートメントまたは Raise メソッドで生成されたものでなければ、Microsoft 製品テクニカル サポートに連絡して、メッセージが表示されたときの状況を知らせてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


クリップボードのデータ形式が不正です。(Error 460)

クリップボードに格納できるデータの形式は決まっています。エラーの原因と対処方法を次に示します。

•	コンポーネントからクリップボードにデータを格納しようとしましたが、そのデータの形式がクリップボードと互換性がありません。

コンポーネントのマニュアルを確認し、そのコンポーネントからクリップボードにデータを転送できるかどうかを調べます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正なファイル形式です。(Error 321)

ディスク ファイルの中には、独自のデータ形式で保存されているものがあります。エラーの原因と対処方法を次に示します。

•	コンポーネントにファイルをロードしようとしましたが、そのファイルのデータ形式がコンポーネントと互換性がありません。

コンポーネントのマニュアルを確認し、ディスク ファイル データの正しい形式を調べ、コンポーネントでデータ形式の変換がサポートされているか調べます。

•	コンポーネント データをファイルに保存しようとしましたが、データの形式がファイルの形式と互換性がありません。

コンポーネントのマニュアルを確認し、コンポーネントで他のデータ形式への変換がサポートされているか調べます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


序数が不正です。(Error 452)

ダイナミック リンク ライブラリ (DLL) への呼び出しで、#num 構文を使用して、プロシージャ名の代わりに番号を使用するように指定されています。エラーの原因と対処方法を次に示します。

•	num 式を序数に変換しようとしましたが、変換できませんでした。

式によって有効な番号を表していることを確認します。またはプロシージャをプロシージャ名で呼び出します。

•	指定された num で DLL 内の関数が指定されていません。

num で DLL 内にある関数を指定します。

•	タイプ ライブラリで無効な宣言があるため、無効な序数が内部で使用されています。

問題のあるプロシージャ呼び出しのコードをコメントにします。プロシージャの Declare ステートメントを記述し、問題点をタイプ ライブラリのベンダーに連絡してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


パターン文字列が不正です。(Error 93)

検索の Like 演算子で指定されているパターン文字列が無効です。エラーの原因と対処方法を次に示します。

•	たとえば、文字リスト式 [a-b は、右かっこ (]) がないため、無効です。

リスト式の文字を確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロシージャの呼び出し、または引数が不正です。(Error 5)

呼び出しの一部が完成できません。エラーの原因と対処方法を次に示します。

•	引数が許容値の範囲を超えている可能性があります。たとえば、Sin 関数で扱える値の範囲は決まっています。2,147,483,648 未満の値は有効ですが、2,147,483,648 ではエラーになります。

引数に指定できる値の範囲を確認します。

•	現在のプラットフォームで無効のプロシージャを呼び出そうとするときにも、このエラーが発生します。たとえば、Microsoft Windows または Macintosh のみで使用できるプロシージャなどがあります。

プロシージャについてのプラットフォーム固有の情報を確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティ配列のインデックスが不正です。(Error 381)

プロパティ値は、値の配列にすることができます。エラーの原因と対処方法を次に示します。

•	コンポーネントのプロパティ配列は、最小値の 0 から最大値の配列の要素数 -1 までの範囲になります。または 1 から配列の要素数までの範囲も可能です。

コンポーネントのマニュアルを確認し、インデックスが、指定されたプロパティの有効な範囲内にあることを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Null の使い方が不正です。(Error 94)

Null 値は、データ アイテムに有効なデータが格納されていないことを示すのに使用されるバリアント型 (Variant) の内部処理形式です。エラーの原因と対処方法を次に示します。

•	Null 値のバリアント型 (Variant) 変数、または式の値を取得しようとしています。次に例を示します。

MyVar = Null

For Count = 1 To MyVar

. . .

Next Count

変数に有効な値が格納されていることを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


名前付き引数が見つかりません。(Error 448)

名前付き引数は、プロシージャで定義されていない限り、プロシージャの起動には使用できません。エラーの原因と対処方法を次に示します。

•	名前付き引数が指定されていますが、プロシージャ側が名前でその引数を受け付けられるように定義されていません。

引数名が正しいかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このプロパティには配列のインデックスが必要です。(Error 385)

このプロパティ値は、単一の値ではなく、配列からなる値です。エラーの原因と対処方法を次に示します。

•	アクセスしようとしているプロパティ配列に対して、インデックスが指定されていません。

コンポーネントのマニュアルを確認し、配列に対応するインデックスの範囲を調べます。プロパティ アクセス ステートメントで、正しいインデックスを指定します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトは現在の国別情報の設定をサポートしていません。(Error 447)

すべてのオブジェクトで、すべての国別情報の設定がサポートされているわけではありません。エラーの原因と対処方法を次に示します。

•	カレント プロジェクトの国別情報設定をサポートしていないオブジェクトにアクセスしようとしています。たとえば、カレント プロジェクトの国別情報設定が Canadian French である場合は、アクセスしようとしているオブジェクトで、その国別情報がサポートされていなければなりません。

オブジェクトでサポートされている国別情報を確認します。

•	OLE2NLS.DLL など、オブジェクトで使用されている国際言語サポートのダイナミック リンク ライブラリ (DLL) または Macintosh コード リソースが古い可能性があります。

カレント オブジェクトの国別情報をサポートしている DLL の最新バージョンを入手します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトは名前付き引数をサポートしていません。(Error 446)

すべてのオブジェクトで、名前付き引数がサポートされているわけではありません。エラーの原因と対処方法を次に示します。

•	名前付き引数をサポートしていないメソッドがあるオブジェクトにアクセスしようとしています。

オブジェクトのメソッドを実行するときは、引数を正しい位置に指定してください。引数の位置と型の詳細については、オブジェクトのマニュアルを参照してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトはこの動作をサポートしていません。(Error 445)

すべてのオブジェクトで、すべての処理がサポートされているわけではありません。エラーの原因と対処方法を次に示します。

•	このオブジェクトでサポートされていないメソッドまたはプロパティが参照されました。

オブジェクトの詳細については、オブジェクトのマニュアルを参照し、プロパティとメソッドが正しいかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Property Let プロシージャが定義されておらず、Property Get プロシージャからオブジェクトが返されませんでした。(Error 451)

特定のプロパティ、メソッド、および操作は、Collection オブジェクトだけに適用されます。エラーの原因と対処方法を次に示します。

•	コレクションに排他的な操作またはプロパティが指定されていますが、オブジェクトがコレクションでありません。

オブジェクト名またはプロパティ名を確認し、オブジェクトが Collection オブジェクトであることを確認します。また、コレクションにオブジェクトを追加するのに使用されている Add メソッドの構文と識別子が正しいかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトが必要です。(Error 424)

プロパティまたはメソッドを参照するときに、オブジェクト修飾子を明示的に指定する必要がある場合があります。エラーの原因と対処方法を次に示します。

•	オブジェクトのプロパティまたはメソッドが参照されていますが、オブジェクト修飾子が指定されていません。

オブジェクト修飾子を指定します。たとえば、フォーム独自のモジュール内からフォームのプロパティを参照するときは、オブジェクト修飾子を省略できますが、標準モジュールからプロパティを参照するときは、修飾子を明示的に指定しなければなりません。

•	オブジェクト修飾子が指定されていますが、オブジェクトとして認識されません。

オブジェクト修飾子が正しいかどうかを確認し、プログラム内の参照位置からそのオブジェクトが参照できることを確認します。Collection オブジェクトの場合は、Add メソッドの構文とすべての要素が正しいかどうかを確認します。

•	有効なオブジェクト修飾子が指定されていますが、呼び出しの他の部分でエラーがあります。

ホスト アプリケーションの [開く] コマンドの引数に間違ったパスを指定すると、このエラーが発生します。引数を確認します。

•	オブジェクトへの参照で代入されている Set ステートメントが使用されていません。

CreateObject 関数呼び出しの戻り値にバリアント型 (Variant) 変数を代入している場合は、Set ステートメントが省略されていても、必ずしもこのエラーが発生するとは限りません。次のコード例では、Microsoft Excel のインスタンスが暗黙的に作成され、その既定プロパティ (文字列 "Microsoft Excel") が返されて、バリアント型 (Variant) 変数 RetVal に代入されています。この RetVal を続けてオブジェクト参照として使用しようとするとエラーになります。

Dim RetVal	' 暗黙的なバリアント型。

' 既定プロパティを Type 8 Variant RetVal に代入します。

RetVal = CreateObject("Excel.Application")

RetVal.Visible = True	' ここでエラーになります。

オブジェクトへの参照を代入するときは、Set ステートメントを使用します。

•	まれなケースとして、オブジェクトが有効である場合でも、そのオブジェクトに対して無効な処理を実行しようとすると、このエラーになることがあります。たとえば、値の取得のみ可能なプロパティに値を設定しようとすると、このエラーになります。

オブジェクトのマニュアルを参照し、実行しようとしている処理が有効かどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクト変数または With ブロック変数が設定されていません。(Error 91)

オブジェクト変数を作成する方法には 2 種類あります。まず、オブジェクト変数を宣言します。次に、Set ステートメントで、そのオブジェクトへの参照を代入します。同様に、With...End With ブロックは、With ステートメントの開始位置で初期化しておく必要があります。エラーの原因と対処方法を次に示します。

•	有効なオブジェクトを参照していないオブジェクト変数を使用しようとしています。

オブジェクト変数への参照を指定し直します。たとえば、次のコードで Set ステートメントが省略されると、MyObject への参照でエラーになります。

Dim MyObject As Object	' オブジェクト変数を作成します。

Set MyObject = Sheets(1)	' 有効なオブジェクト参照を作成します。

MyCount = MyObject.Count	' Count の値を MyCount に代入します。

•	Nothing に設定されているオブジェクト変数を使用しようとしました。

Set MyObject = Nothing	' オブジェクトを解放します。

MyCount = MyObject.Count	' 解放されたオブジェクトへの参照を作成します。

オブジェクト変数への参照を指定し直します。たとえば、新しい Set ステートメントを使用して、オブジェクトに新しい参照を設定します。

•	オブジェクトは有効なオブジェクトですが、そのオブジェクトが記述されているオブジェクト ライブラリが [参照設定] ダイアログ ボックスで選択されていないため、そのオブジェクトがまだ設定されていません。

[参照設定] ダイアログ ボックスでオブジェクト ライブラリを選択します。

•	GoTo ステートメントのターゲットが、With ブロックの内側にあります。

With ブロックの内側にジャンプしないようにします。ブロックが、With ステートメントの開始位置で初期化されていることを確認します。

•	[次のステートメントの設定] コマンドをクリックしたときに、With ブロックの内側の行が指定されています。

With ブロックは、With ステートメントを実行して初期化しておく必要があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オートメーション エラーです。(Error 440)

オートメーション オブジェクトにアクセスするとき、特殊なエラーが発生することがあります。エラーの原因と対処方法を次に示します。

•	メソッドの実行中、またはオブジェクト変数のプロパティの取得または設定でエラーが発生しました。エラー メッセージは、オブジェクトを作成したアプリケーションによって表示されます。

Err オブジェクトのプロパティを確認し、エラーの原因と特質を調べてください。また、アクセス ステートメントの直後に On Error Resume Next ステートメントを記述し、そのアクセス ステートメントの直後でエラーを確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)

すべてのオブジェクトで、すべてのプロパティとメソッドがサポートされているわけではありません。エラーの原因と対処方法を次に示します。

•	このオートメーション オブジェクトに存在しないメソッドまたはプロパティが指定されています。

オブジェクトの詳細については、オブジェクトのマニュアルを参照し、プロパティとメソッドが正しいかどうかを確認してください。

•	Friend プロシージャが実行時バインディングで呼び出される指定になっています。

Friend プロシージャの名前は、コンパイル時にわかっていなければなりません。実行時バインディング呼び出しでは、わかりません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


メモリが不足しています。(Error 7)

メモリが不足しているか、または 64K セグメントの境界に達しました。エラーの原因と対処方法を次に示します。

•	開いているアプリケーション、ドキュメント、またはソース ファイルの数が多すぎます。

不要なアプリケーション、ドキュメント、またはソース ファイルを閉じます。

•	モジュールまたはプロシージャのサイズが大きすぎます。

モジュールまたはプロシージャを小さく分割します。メモリは節約できませんが、64K セグメントの境界に達しないようにできます。

•	仮想メモリが不足しています。

ディスクの空き容量を増やして仮想メモリを増やすか、少なくとも、いくらかのスペースが使用できることを確認します。

•	メモリ常駐プログラムが実行されています。

メモリ常駐プログラムを削除します。

•	ロードされているデバイス ドライバの数が多すぎます。

不要なデバイス ドライバを削除します。

•	Public 変数の領域が不足しています。

Public 変数を減らします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


スタック領域が不足しています。(Error 28)

スタックはメモリの作業領域で、プログラムの実行に合わせてサイズが動的に変化します。エラーの原因と対処方法を次に示します。

•	Function、Sub、または Property の各アクティブなプロシージャ呼び出しの数が多すぎます。

プロシージャのネストが深すぎないかどうかを確認します。これは、特に、自分自身を呼び出す再帰プロシージャでよく発生します。再帰プロシージャが正しく終了していることを確認します。どのプロシージャが (スタックで) アクティブなのかを表示するには、[呼び出し履歴] ダイアログ ボックスを使用します。

•	ローカル変数で必要な領域が不足しています。

可能であれば、モジュール レベルで変数を宣言します。また、キーワード Property、Sub、または Function の前に Static を付加して、プロシージャ内のすべての変数を静的に宣言することもできます。または、Static ステートメントを使用して、プロシージャ内で個々の Static 変数を宣言することもできます。

•	固定長文字列の数が多すぎます。

プロシージャの固定長文字列はアクセスが速くなりますが、文字列データがスタック上に置かれるため、可変長文字列に比べてスタック領域を大量に消費します。可能であれば、固定長文字列のいくつかを可変長文字列で定義し直します。可変長文字列をプロシージャで宣言すると、データ自体ではなく、文字列記述子だけがスタック上に配置されます。また、モジュール レベルに定義した文字列もスタック領域を必要としません。モジュール レベルに宣言された変数は Public が既定なので、モジュールの全プロシージャで参照可能です。

•	ネストされている DoEvents 関数呼び出しが多すぎます。

[呼び出し履歴] ダイアログ ボックスを使用して、スタック上でアクティブなプロシージャを表示します。

•	コードでイベント連鎖が発生しました。

既にスタックにあるイベント プロシージャを呼び出すイベントを発生させると、イベント連鎖が発生します。イベント連鎖は、終わりのない再帰プロシージャのようなものですが、コードから明示的に呼び出されるのではなく、Visual Basic で呼び出されるため、再帰プロシージャに比べてわかりにくくなっています。[呼び出し履歴] ダイアログ ボックスを使用して、スタック上でアクティブなプロシージャを表示します。

[呼び出し履歴] ダイアログ ボックスを表示するには、ローカル ウィンドウの [プロシージャ] ボックスの隣の [...] ボタンをクリックするか、[呼び出し履歴] コマンドをクリックします。詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


文字列領域が不足しています。(Error 14)

Visual Basic では大量の文字列が使用できますが、他のプログラムからの要求や、文字列の操作方法によっては、このエラーが発生する場合があります。エラーの原因と対処方法を次に示します。

•	評価する際に、一時的な文字列が必要な式でこのエラーが発生した可能性があります。たとえば次のコードでは、オペレーティング システムによっては、「文字列領域が不足しています。」のエラーが発生します。

MyString = "Hello"

For Count = 1 To 100

MyString = MyString & MyString

Next Count

文字列を別の名前の変数に代入します。

•	システムのメモリが不足しているために、文字列が割り当てられない可能性があります。

不要なアプリケーションをメモリから削除して、領域を増やします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オーバーフローしました。(Error 6)

オーバーフローは、代入先の値の限度を超えるような代入を行ったときに発生します。エラーの原因と対処方法を次に示します。

•	代入、計算、またはデータ型変換の結果が、その型の変数で表すことのできる値の範囲を超えています。

許容値の範囲が広い型の変数に代入します。

•	プロパティへの代入が、プロパティで許容されている最大値を超えています。

代入が、プロパティの許容範囲に収まることを確認します。

•	数値計算で数値が内部的に整数型として処理されている場合に、計算結果が整数型の範囲を超えています。次の例では、値がオーバーフローします。

    Dim x As Long

    x = 2000 * 365   ' エラー: 値がオーバーフローします。

このようなエラーでは、次のように対処してください。

    Dim x As Long

    x = CLng(2000) * 365

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


パスが見つかりません。(Error 76)

ファイルのパスには、ファイルの場所を示すドライブ名とフォルダ、サブフォルダを含める必要があります。パスには、相対パスと絶対パスがあります。エラーの原因と対処方法を次に示します。

•	Open、MkDir、ChDir、または RmDir などのファイル アクセスまたはディスク アクセス操作の際に、指定されたパスがオペレーティング システムで見つかりません。

パスを指定し直します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


パス名が無効です。(Error 75)

Open、MkDir、ChDir、または RmDirなどのファイル アクセスまたはディスク アクセス操作の際に、オペレーティング システムでパスとファイル名を関連付けることができませんでした。エラーの原因と対処方法を次に示します。

•	ファイル指定の形式が間違っています。

ファイル名には、絶対パスと相対パスがあります。絶対パスは (パスが別のドライブの場合は) ドライブ名で始めて、ルートからファイルまでのパスを明示的に指定します。絶対パスで指定されていないパスは、カレント ドライブとフォルダへの相対パスになります。

•	既存の読み取り専用ファイルと同じ名前でファイルを保存しようとしています。

ターゲット ファイルの読み取り専用の属性を変更するか、別のファイル名で保存します。

•	読み取り専用ファイルをシーケンシャル Output または Append モードで開こうとしています。

Input モードで開くか、読み取り専用属性を変更します。

•	データベースまたはドキュメントの Visual Basic プロジェクトを変更しようとしています。

プロジェクトのデザイン変更はできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


書き込みできません。(Error 70)

書き込み保護のディスクに書き込もうとしているか、またはロックされているファイルにアクセスしようとしています。エラーの原因と対処方法を次に示します。

•	書き込み保護のファイルをシーケンシャル Output または Append で開こうとしています。

ファイルを Input で開くか、書き込み保護属性を変更します。

•	書き込み保護のディスクにあるファイルを Output または Append で開こうとしています。

書き込み保護になっているデバイスをディスクから削除するか、ファイルを Input で開きます。

•	別のプロセスでロックされているファイルに書き込もうとしています。

別のプロセスが解放してから、ファイルを開きます。

•	レジストリにアクセスしようとしましたが、ユーザーのアクセス権に、この種類のレジストリのアクセス権が含まれていません。

32 ビット版 Microsoft Windows システムでは、ユーザーがシステム レジストリにアクセスするには、適切なアクセス権が必要になります。アクセス権を変更するか、システム管理者に変更してもらいます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プリンタ エラーです。(Error 482)

エラーの原因と対処方法を次に示します。

•	プリンタでエラーが発生しましたが、その他の情報がコンピュータに返されていません。

プリンタを実際に調べる必要があります。コンピュータとプリンタ間の接続が正しいことを確認します。多くのプリンタでは、「用紙切れ」や「オフライン」などのエラー情報が表示されます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


実行時には値を取得できません。(Error 393)

すべてのプロパティが実行時情報を返すわけではありません。エラーの原因と対処方法を次に示します。

•	アクセスしようとしているプロパティは、デザイン時にのみ値の取得が可能です。

実行を終了し、デザイン時にプロパティを表示します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


値を取得できません。値の設定のみ可能なプロパティです。(Error 394)

すべてのプロパティが情報を返すわけではありません。エラーの原因と対処方法を次に示します。

•	アクセスしようとしているプロパティが、情報を返しません。

プロパティの状態を変更することはできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティまたはメソッドが見つかりません。(Error 423)

オブジェクト名は、オブジェクト ライブラリの定義と一致していなければなりません。エラーの原因と対処方法を次に示します。

•	object.method または object.property を参照していますが、method または property が定義されていません。

object の名前が間違っている可能性があります。object で定義されているプロパティおよびメソッドを調べるには、オブジェクト ブラウザを表示します。対応するオブジェクト ライブラリを選択し、使用できるプロパティとメソッドのリストを表示します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティが見つかりません。(Error 422)

すべてのオブジェクトでプロパティの同じセットがサポートされているわけではありません。エラーの原因と対処方法を次に示します。

•	このオブジェクトでは、指定されたプロパティはサポートされていません。

プロパティ名が正しいかどうかを確認します。また、オブジェクトで実際にサポートされているのが "caption" プロパティや、それに似た名前のプロパティであるにもかかわらず、"text" プロパティなどにアクセスしている可能性もあります。オブジェクトのマニュアルを参照してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティは、実行時には設定できません。(Error 382)

実行時に、プロパティへの参照を取得できない場合があります。エラーの原因と対処方法を次に示します。

•	実行時に値の取得または設定のみ可能なプロパティへの参照を取得しようとしています。

参照は、値の取得と設定の両方に使用できるので、実行時に参照を取得できるように、プロパティでは両方の操作を実行時にサポートしている必要があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティは値の取得のみ可能です。(Error 383)

実行時に、プロパティへの参照を取得できない場合があります。エラーの原因と対処方法を次に示します。

•	実行時に値の設定のみ可能なプロパティへの参照を取得しようとしています。

参照は、値の取得と設定の両方に使用できるので、実行時に参照を取得できるように、プロパティでは両方の操作を実行時にサポートしている必要があります。このプロパティでは、Property Get プロシージャだけが使用できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティは値を設定できません。(Error 387)

すべてのプロパティで、参照が返されるわけではありません。エラーの原因と対処方法を次に示します。

•	参照を返さないプロパティへの参照を取得しようとしています。

Property Let プロシージャおよび Property Get プロシージャで、このプロパティにアクセスできないようにします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


置換後の文字列が長すぎます。(Error 746)

置換文字列の長さは、指定された最大長を超えることはできません。エラーの原因と対処方法を次に示します。

•	許容されている長さを超えた置換文字列が指定されています。

コンポーネントのマニュアルを参照して、最大長を確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


エラーが発生していないときに Resume を実行することはできません。(Error 20)

Resume ステートメントは、エラー処理ルーチン内だけに記述でき、アクティブなエラー処理ルーチン内でのみ実行できます。エラーの原因と対処方法を次に示します。

•	Resume ステートメントがエラー処理コードの外側に記述されています。

エラー処理ルーチン内に記述するか、削除します。

•	エラーが発生していないにもかかわらず、エラー処理ルーチン内にジャンプしました。

行ラベルが間違っている可能性があります。プロシージャを超えたラベルにジャンプすることはできないので、エラーが発生すると、そのプロシージャ内にあるエラー処理ルーチンのラベルが検索されます。On Error GoTo ステートメントのジャンプ先であるはずのラベルが、GoTo ステートメントのジャンプ先として指定されている場合は、その行ラベルを正しいものに変更します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Return に対応する GoSub がありません。(Error 3)

Return ステートメントは GoSub ステートメントと対応している必要があります。エラーの原因と対処方法を次に示します。

•	Return ステートメントに対応する GoSub ステートメントがありません。

GoSub ステートメントが不注意で削除されていないかどうかを確認してください。

For...Next、While...Wend、および Sub...End Sub は、コンパイル時に照合されますが、GoSub と Return は実行時に照合されます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


関数は指定された DLL には定義されていません。(Error 453)

ユーザー ライブラリ参照のダイナミック リンク ライブラリ (DLL) は見つかりましたが、指定された DLL 関数が DLL 内で見つかりません。エラーの原因と対処方法を次に示します。

•	関数宣言で指定されている序数が無効です。

序数を確認するか、関数名を指定して呼び出します。

•	DLL 名は正しいのですが、指定された関数を含むバージョンでありません。

適切なバージョンがマシンにある場合でも、別のバージョンを含むフォルダがパスで先に指定されていると、別の DLL の方にアクセスしてしまいます。別のバージョンがマシンに含まれているかどうかを確認します。以前のバージョンであれば、作成者に最新バージョンがないか問い合わせます。

•	32 ビット版の Microsoft Windows プラットフォームで作業している場合、DLL 名とエイリアスが使用されているときは、そのエイリアスも正しくなければなりません。

DLL 名とエイリアスが正しいかどうかを確認してください。

•	32 ビット DLL の中には、関数が Unicode 文字列か ANSI 文字列をサポートしているかで、バージョンが少し変わります。関数名の最後が "A" であれば、ANSI バージョンを示します。関数名の最後が "W" であれば、Unicode バージョンを示します。

関数が文字列型の引数を持つ場合は、関数名の最後に "A" を付加してみます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


式が複雑すぎます。(Error 16)

浮動小数点式でネストできる式の数は、プラットフォームによって異なります。たとえば、32 ビット版の Microsoft Windows オペレーティング システムでは、8 レベルまでの浮動小数点式のネストが可能です。エラーの原因と対処方法を次に示します。

•	浮動小数点式でネストされている式の数が多すぎます。

エラーが発生しなくなる数まで、式を分割します。

メモ   以前のバージョンの Visual Basic では、Error 16 は、「文字列式が複雑すぎます。」でした。このエラーは、もう発生しません。したがって、このエラーをトラップし、処理する以前のバージョンのコードがある場合は、新しいエラーと間違えないように、削除しておく必要があります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


検索文字列が見つかりませんでした。(Error 744)

エラーの原因と対処方法を次に示します。

•	指定された文字列が見つかりません。

この文字列は存在しません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Sub、Function、または Property が定義されていません。(Error 35)

Sub、Function、または Property の各プロシージャは、定義していなければ呼び出せません。エラーの原因と対処方法を次に示します。

•	プロシージャの名前が間違っています。

名前を確認し、訂正します。

•	別のプロジェクトからプロシージャを呼び出そうとしていますが、そのプロジェクトへの参照が [参照設定] ダイアログ ボックスで明示的に追加されていません。

参照を追加するには

1.	[参照設定] ダイアログ ボックスを表示します。

2.	呼び出すプロシージャを含むプロジェクトの名前を見つけます。[参照設定] ダイアログ ボックスにプロジェクト名が表示されない場合は、[参照] をクリックして検索します。

3.	プロジェクト名の左側にあるチェック ボックスをオンにします。

4.	[OK] をクリックします。

•	指定されたプロシージャが、呼び出し元のプロシージャから参照できません。

モジュール内で Private で宣言されているプロシージャは、そのモジュールの外にあるプロシージャからは呼び出せません。Option Private Module が有効である場合は、モジュール内のプロシージャは他のプロジェクトでは使用できません。プロシージャの位置を探してください。

•	Windows ダイナミック リンク ライブラリ (DLL) ルーチンまたは Macintosh コード リソース ルーチンが宣言されていますが、指定されたライブラリまたはコード リソースにありません。

•	ルーチンの序数または名前を確認します。使用する DLL または Macintosh コード リソースのバージョンが正しいかどうかを確認してください。そのルーチンが以前のバージョンの DLL または Macintosh コード リソースにしかない場合もあります。正しいバージョンの DLL または Macintosh コード リソースがあるフォルダよりも、別のバージョンのフォルダがパスで先に指定されていると、別の DLL または Macintosh コード リソースにアクセスしてしまいます。DLL の名前または Macintosh コード リソースは正しく指定されていますが、指定された関数を含むバージョンではありません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


インデックスが有効範囲にありません。(Error 9)

配列の要素とコレクションのメンバは、定義された範囲内だけでアクセスできます。エラーの原因と対処方法を次に示します。

•	存在しない配列要素が参照されています。

添字が定義されているものよりも大きいか小さいか、またはアプリケーションのこの時点で、まだ配列に次元が代入されていません。配列の宣言でインデックス番号の上限および下限を確認します。次元が再定義されている配列では、UBound 関数と LBound 関数を使用して、配列アクセスの条件を指定します。インデックスが変数で指定されている場合は、その変数が正しいかどうかを確認します。

•	配列が宣言されていますが、要素数が指定されていません。たとえば、次のコードはエラーになります。

Dim MyArray() As Integer

MyArray(8) = 234	' Error 9 が発生します。

範囲が指定されていない配列は、Visual Basic では、0 - 10 で暗黙的に定義されません。Dim または ReDim を使用して、配列の要素数を明示的に指定する必要があります。

•	存在しないコレクション メンバが参照されています。

インデックス要素を指定する代わりに、For Each...Next 構造を使用します。

•	無効な要素を暗黙的に指定している添字の省略形が使用されています。

たとえば、コレクションで演算子 ! を使用すると、! によってキーが暗黙的に指定されます。つまり、object!keyname.value は object.item(keyname).value と同じです。この場合、keyname でコレクションの無効なキーを表している場合は、エラーになります。エラーを修正するには、コレクションの有効なキー名またはインデックスを使用します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このコンポーネントでは、イベントはサポートされていません。(Error 459)

すべてのコンポーネントでイベントの宣言および発生がサポートされているわけではありません。エラーの原因と対処方法を次に示します。

•	WithEvents 変数の宣言で指定されたコンポーネントは、イベントをサポートしません。原因の 1 例として、変数に Implements ステートメントを使ってインプリメントしたオブジェクトを指定した場合が考えられます。Implements ステートメントは、メソッドやプロパティをインプリメントしますが、イベントのインプリメントは自動的には行われません。よって、そのようなオブジェクトを WithEvents ステートメントで指定した場合、このエラーが発生します。

コンポーネントがイベント ソースとして機能していない場合は、このコンポーネントからイベントを受け取ることはできません。

•	プライベート ユーザー コントロールの場合、オブジェクト イベントの起動時に必要なタイプ情報が実行時には利用できないため、WithEvents 変数の宣言では使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


DLL クライアント アプリケーションの数が多すぎます。(Error 47)

Visual Basic のダイナミック リンク ライブラリ (DLL) は、同時に 50 までのホスト アプリケーションで使用できます。エラーの原因と対処方法を次に示します。

•	アプリケーション自身がアクセスしているものも含めて、Visual Basic ホストであるアプリケーションが、Visual Basic DLL を同時にアクセスしようとしています。

Visual Basic をアクセスしている開いているアプリケーションの数を減らします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ファイルが多すぎます。(Error 67)

同時に開くことができるディスク ファイルの数には限度があります。エラーの原因と対処方法を次に示します。

•	MS-DOS オペレーティング システム: オペレーティング システムで許容されている数以上のファイルをルート フォルダに作成しようとしています。

MS-DOS オペレーティング システムでは、ルート フォルダに作成できるファイルの数には制限があり、通常 512 までです。プログラムが、ルート フォルダでファイルを開いたり、閉じたり、保存したりしている場合は、サブフォルダを使用するように変更してください。

•	MS-DOS オペレーティング システム: CONFIG.SYS ファイルの files= で指定されている数以上のファイルを開こうとしています。

CONFIG.SYS ファイルの files= で指定されている数を増やし、コンピュータを再起動します。

•	Macintosh: ファイルを 40 以上開こうとしています。

Macintosh では、通常、40 までのファイルしか開くことができません。この制限値は、ユーティリティでブート ブロックの MaxFiles パラメータを編集して変更できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


型が一致しません。(Error 13)

Visual Basic では、変換と強制によって、以前のバージョンではできなかったデータ型の割り当てができるようになっていますが、このエラーが発生する可能は残っています。エラーの原因と対処方法を次に示します。

•	変数またはプロパティの型が正しくありません。たとえば、整数値が必要な変数では、文字列全体が整数型として認識されない限り、文字列値を格納することはできません。

互換性のあるデータ型の間のみで代入を行います。たとえば、整数型 (Integer) は常に長整数型 (Long) に代入することができ、単精度浮動小数点数型 (Single) は常に倍精度浮動小数点数型 (Double) に代入できます。また、任意の型 (ユーザー定義型を除く) は、バリアント型 (Variant) に代入することができます。

•	単一のプロパティまたは値が指定されているプロシージャに、オブジェクトが渡されています。

適切な単一のプロパティを渡すか、オブジェクトに対応するメソッドを呼び出します。

•	式を指定するところで、モジュールまたはプロジェクトの名前が指定されています。次に例を示します。

Debug.Print MyModule

表示できる式を指定します。

•	従来の Basic エラー処理ルーチンと内部処理形式 Error を持つバリアント型 (Variant) (10, vbError) が混在しています。次に例を示します。

Error CVErr(n)

エラーを再度発生させるには、組み込みの Visual Basic またはユーザー定義のエラーに変換してからエラーを生成します。

•	CVErr 値は Date に変換できません。次に例を示します。

MyVar = CDate(CVErr(9))

Select Case ステートメントを使用するか、同様の構造を使用して、CVErr の戻り値を変換します。

•	実行時には、このエラーは通常、式で使用されているバリアント型 (Variant) の内部処理形式が間違っているか、配列を含むバリアント型 (Variant) が Print # ステートメントに記述されていることを示します。

配列を出力するには、各要素を個々に出力するループを作成します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ユーザーによる割り込みが発生しました。(Error 18)

実行中に割り込む処理は便利ですが、処理せずに放置すると、アプリケーションは終了してしまいます。エラーの原因と対処方法を次に示します。

•	ユーザーが Ctrl + Break キーを押したか、別の割り込みキーを押しました。

開発環境では、実行を続行します。実行時にこの条件を受け付けるときは、エラーを適切に処理します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Visual Basic でサポートされていないオートメーションが変数で使用されています。(Error 458)

タイプ ライブラリまたはオブジェクト ライブラリにあるすべての変数が、すべてのプログラミング言語で使用できるわけではありません。エラーの原因と対処方法を次に示します。

•	Visual Basic でサポートされていないデータ型を持つタイプ ライブラリまたはオブジェクト ライブラリに定義されている変数を使用しようとしています。

Visual Basic で認識できない型の変数は、Visual Basic プログラムで使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


引数の数が一致していません。または不正なプロパティを指定しています。(Error 450)

プロシージャに指定する引数の数は、そのプロシージャで定義されているパラメータの数と一致していなければなりません。エラーの原因と対処方法を次に示します。

•	プロシージャの呼び出しに指定する引数の数が、そのプロシージャで定義されている引数の数と一致していません。

呼び出しでの引数の並びとプロシージャの宣言または定義を確認します。

•	コントロール配列の部分ではないコントロールのインデックスが指定されています。

インデックス構文は引数に変換されますが、インデックスと引数共に指定されていないので、エラーになります。インデックス構文を削除するか、コントロール配列の作成手順に従います。デザイン時に、コントロールのプロパティ シートまたはプロパティ ウィンドウで、Index プロパティにゼロ以外の値を設定します。

•	値の取得のみ可能なプロパティに値を設定しようとしているか、Property Let プロシージャがないプロパティに値を設定しようとしています。

プロパティに値を設定するのは、オブジェクトの Property Let プロシージャに値を引数として引き渡すのと同じです。Property Let プロシージャを適切に定義します。Property Let プロシージャの引数の数は、対応する Property Get プロシージャよりも 1 つ多くする必要があります。値の取得のみ可能なプロパティの場合は、値を設定できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ActiveX コンポーネントはオブジェクトを作成できません。(Error 429)

オブジェクトを作成するには、そのオブジェクトのクラスがシステム レジストリに登録されていることが必要で、関連付けられたダイナミック リンク ライブラリ (DLL) が使用できることが必要です。エラーの原因と対処方法を次に示します。

•	クラスが登録されていません。たとえば、システム レジストリにクラスが登録されていないか、または登録されていても、間違った型のファイルが指定されているか、指定されているファイルが見つかりません。

可能であれば、そのオブジェクトのアプリケーションを起動します。レジストリ情報が古い場合や間違っている場合は、アプリケーションによってレジストリが調べられて、情報が修正されるはずです。アプリケーションを起動しても問題が解決されない場合は、アプリケーションのセットアップをやり直してください。

•	オブジェクトで必要な DLL が、見つからないか、または破損しているために使用できません。

関連するすべての DLL が使用できることを確認します。たとえば、Data Access Object (DAO) では、プラットフォームごとに異なる DLL をサポートする必要があります。このようなオブジェクトでエラーが発生している場合は、セットアップ プログラムを再度実行する必要があります。

•	オブジェクトはマシンで使用できますが、そのオブジェクトはライセンスされたオートメーション オブジェクトで、インスタンス作成するのに必要なライセンスが可能かどうかどうかを確認できません。

オブジェクトの中には、オブジェクトが作業中のマシンでインスタンス作成用に登録されていることを示すライセンス キーがコンポーネントで見つかった後にだけ、インスタンス作成できるものがあります。適切にセットアップされているタイプ ライブラリまたはオブジェクト ライブラリを使用してオブジェクトに参照が作成されると、正しいキーが自動的に供給されます。

CreateObject 呼び出しまたは GetObject 呼び出しの結果としてインスタンス作成をしようとしている場合は、オブジェクトでキーが必要になります。この場合は、システム レジストリが検索されるか、セットアップ時に作成される拡張子 .lic などのファイルが検索されます。キーが見つからない場合は、オブジェクトのインスタンス作成はできません。エンド ユーザーによるオブジェクトのアプリケーションのセットアップが正しく行われていない場合や、必要なファイルが不注意に削除されている場合、またはシステム レジストリが変更されている場合は、オブジェクトでキーが見つからない場合があります。キーが見つからない場合は、オブジェクトのインスタンス作成はできません。この場合は、インスタンス作成は開発者のシステムでは作成可能であっても、ユーザーのシステムでは作成できません。ユーザーが、ライセンスされたオブジェクトを再度セットアップする必要があります。

•	GetObject 関数を使用して、Visual Basic で作成されたクラスへの参照を取得しようとしています。

GetObject 関数を使用して、Visual Basic で作成されたクラスへの参照を取得することはできません。

•	オブジェクトへのアクセスが明示的に拒否されました。

たとえば、現在使用中で、デッドロックを回避するためにロックされているデータ オブジェクトにアクセスしようとしている可能性があります。この場合は、しばらくしてから、オブジェクトにアクセスできるようになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティ値が不正です。(Error 380)

ほとんどのプロパティでは、設定できる値の型と範囲が決まっています。エラーの原因と対処方法を次に示します。

•	不適切な値がプロパティに割り当てられています。

プロパティのヘルプ トピックを参照して、プロパティに設定できる値の型と範囲を調べます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ピクチャが不正です。(Error 481)

Picture プロパティまたは Picture オブジェクトに割り当てできるのは、ピクチャだけです。エラーの原因と対処方法を次に示します。

•	アイコン、ビットマップ、または Microsoft Windows メタファイルと認識できないものが、Picture プロパティまたは Picture オブジェクトに割り当てられています。

使用するオブジェクトの Picture オブジェクトまたは Picture プロパティのヘルプ トピックを参照し、使用できるピクチャの型を調べます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


リソース ファイルの形式が不正です。(Error 325)

リソース ファイルにアクセスするとき、取得しようとするリソースの形式は有効なものである必要があります。エラーの原因と対処方法を次に示します。

•	取得しようとしているリソース ファイルの形式が無効か、ファイル内の特定のリソースの形式が無効です。

ファイルの内容が破損している場合は、元のディスクからファイルを再度セットアップします。それでもエラーが発生する場合は、リソースの供給者に連絡して、新しいファイルまたは指定の形式のリソースのバージョンを入手します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このキーは既にこのコレクションの要素に割り当てられています。(Error 457)

キーは、コレクションの特定のメンバを一意に識別する Add メソッドで指定される文字列です。エラーの原因と対処方法を次に示します。

•	コレクションのメンバに、既にコレクションの別のメンバを識別しているキーが指定されています。

このメンバに別のキーを選択します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


この配列は固定されているか、または一時的にロックされています。(Error 10)

すべての配列の次元が再定義できるわけではありません。また、動的に宣言されている配列や、バリアント型 (Variant) 変数の配列の場合でも、一時的にロックされる場合があります。エラーの原因と対処方法を次に示します。

•	ReDim を使用して、固定サイズの配列の要素数を変更しようとしています。たとえば、次のコードでは、固定サイズの配列 FixedArr がプロシージャ NextOne の SomeArr に渡され、その SomeArr のサイズが変更されています。

Sub FirstOne

Dim FixedArr(25) As Integer	' 固定サイズの配列を作成し、

NextOne FixedArr()	' 別のプロシージャに渡します。

End Sub

Sub NextOne(SomeArr() As Integer)

ReDim SomeArr(35)	' ここで Error 10 が発生します。

. . .

End Sub

元の配列を固定サイズではなく、配列がプロシージャ内で定義されている場合は、ReDim を使用して動的に宣言し、配列がモジュール レベルで宣言されている場合は、要素数を指定せずに宣言します。

•	要素のうちの 1 つだけが引数として、プロシージャに渡されているモジュール レベルの動的配列のサイズを変更しようとしています。たとえば、次のコードで、ModArray はモジュール レベルの動的配列で、45 番目の要素が参照渡しでプロシージャ Test に渡されています。

Dim ModArray () As Integer	' モジュール レベルの動的配列を作成します。

. . .

Sub AliasError()

ReDim ModArray (1 To 73) As Integer

Test ModArray (45)	' 動的配列の要素をプロシージャ Test に渡します。

End Sub

Sub Test(SomeInt As Integer)

ReDim ModArray (1 To 40) As Integer	' ここでエラーになります。

End Sub

この場合は、モジュール レベルの配列要素がモジュール内のすべてのプロシージャで参照可能であるため、これを引き渡す必要はありません。ただし、要素を引き渡すと、プロシージャ内のパラメータへの参照に割り当てられたメモリが解除されないように配列がロックされるため、プロシージャがリターンするときに予期せぬ動作をする場合があります。

•	配列を含んでいるバリアント型 (Variant) 変数に値を代入しようとしましたが、そのバリアント型 (Variant) が現在ロックされています。たとえば、コードで For Each...Next ループを使用して、配列を含むバリアントを繰り返し処理する場合、ループの開始時点で配列がロックされ、ループの終了時にロックが解除されます。

SomeArray = Array(9,8,7,6,5,4,3,2,1)

For Each X In SomeArray

SomeArray = 301	' 配列がロックされているため、エラーになります。

Next X

For Each...Next ループではなく、For...Next を使用して繰り返し処理を行います。配列が For Each...Next ループのオブジェクトであるときは、その配列を読み取ることはできますが、書き込むことはできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オートメーション操作中にファイル名またはクラス名を見つけられませんでした。(Error 432)

GetObject 関数は、パスが指定されたファイル名、またはシステムに登録されているクラスの名前が必要です。エラーの原因と対処方法を次に示します。

•	GetObject 関数の呼び出しで指定されているファイル名またはクラス名が見つかりません。

名前を確認し、再試行します。パラメータ class で使用されている名前がシステムに登録されている名前と一致することを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オートメーション オブジェクトには既定値がありません。(Error 443)

プロパティまたはメソッドを指定せずにオブジェクト名を指定すると、プロジェクトの既定メンバ (プロパティまたはメソッド) が参照されているものとみなされます。ただし、すべてのオブジェクトで既定メンバが公開されているわけではありません。エラーの原因と対処方法を次に示します。

•	Visual Basic で、指定されたオブジェクトの既定メンバが決定できません。

オブジェクトのマニュアルを確認し、プロパティまたはメソッドを明示的に指定します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


リモート サーバーがないか、使用できる状態ではありません。 (Error 462)

CreateObject 関数には有効なサーバーを指定しなければなりません。エラーの原因と対処方法を次に示します。

•	引数にサーバーが指定されていましたが、サーバーに接続できないか、あるいはサーバーが見つかりませんでした。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ローカル マシンにクラスが登録されていません。 (Error 463)

CreateObject 関数には有効なサーバーを指定しなければなりません。エラーの原因と対処方法を次に示します。

•	引数にサーバーが指定されていましたが、指定されたクラスのプログラム ID (CreateObject 関数の最初の引数) はローカル システムのレジストリに登録されていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


メソッドまたはデータ メンバが見つかりません。 (Error 461)

指定したコレクション、オブジェクト、またはユーザー定義型 には、参照するメンバ.が含まれていません。エラーの原因と対処方法を次に示します。

•	オブジェクトまたはメンバの名前が間違っています。

指定した名前のスペルを確認してください。また、Type ステートメントまたは指定したオブジェクトのドキュメントを参照して、メンバが適切かどうか、あるいはスペルが間違っていないかどうかを確認してください。

•	コレクションのインデックスに範囲外の値が指定されています。

Count プロパティを使用して、指定したインデックスを持つメンバが存在するかどうかを確認してください。コレクションのインデックスの最小値は、0 ではなく 1 であるため、Count プロパティの値はインデックスに指定できる最大値と同じになります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> は有効なコントロール タイプではありません。(Error 720)

有効な ActiveX コンポーネントのみフォームのコントロールに割り当てられます。エラーの原因と対処方法を次に示します。

•	不正な ActiveX コンポーネントをフォームのコントロールに割り当てようとしました。

使用するオブジェクトの ActiveX コントロールのヘルプ トピックを参照し、使用できるコントロールの構成を調べます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


予期せぬエラーが発生しました。終了します。

不測のエラーが発生し、実行を続けることができません。ハードウェアに問題があるか、システムの他のプログラムの影響を受けている可能性があります。


有効な値の範囲は 1 ～ 32 です。

TabStop プロパティに許容範囲を超えた値を設定しようとしています。このフィールドの許容値は 1 から 32 までです。


有効な値の範囲は 2 ～ 60 です。

Grid Width または Grid Height に許容範囲を超えた値を設定しようとしています。このフィールドの許容値は 2 から 60 までです。


バイナリ フォームは、Visual Basic にロードできません。

以前のバージョンの Visual Basic で作成されたバイナリ フォームは、現バージョンの Visual Basic にロードできません。Visual Basic Version 2.0 および Version 3.0 は、バイナリ フォームの ASCII コードへの変換がサポートされています。Visual Basic 2.0 または 3.0 がある場合は、そのバージョンと Version 1.0 で作成されたフォームをロードし、テキストとして保存できます。その後、そのフォームを現バージョンの Visual Basic にインポートすることができます。


プロジェクト ファイルは読み取り専用です。

プロジェクト ファイルが書き込み可能でありません。変更するには、別の名前で保存するか、読み取り専用属性を解除します。


ファイルは読み取り専用です。

ファイルが書き込み可能でありません。変更するには、別の名前で保存するか、読み取り専用属性を解除します。


このプロシージャ名は既に存在しています。

同じ適用範囲内のプロシージャ名は、重複できません。プロシージャの名前を変更してください。


指定されたプロジェクト ファイルには、不正なキーの値が含まれています。値の範囲は 0 ～ 3 です。

キー値が許容範囲内にありません。指定された範囲内の値にします。


プロジェクト名が長すぎます。名前は短く切り詰められます。

プロジェクト名の長さが許容値を超える場合は、最大許容値に縮められます。


指定されたプロジェクト ファイルには、不正なキーの値が含まれています。プロジェクトをロードできません。

プロジェクト ファイルに無効なキーが含まれている場合は、そのプロジェクトはロードできません。


不正なキーです。ファイルはロードできません。

ファイルに無効なキーが含まれている場合は、そのファイルはロードできません。


プロジェクト ファイルには、不正なキーの値が含まれています。

指定されたキー値が無効です。訂正してください。


メモリが不足しています。終了します。

実行に必要なメモリが確保できません。他のアプリケーションを閉じて、再度実行してください。


オペレーティング システムのバージョンが適切ではありません。Windows NT 4.0 (ビルド <番号> とサービス パック <番号> 以降) または Windows 95 (ビルド <番号> 以降) が必要です。

このバージョンの Visual Basic を実行するには、指定されたビルド バージョンの Windows 95 または Windows NT Version 4.0 を起動しなければなりません。


システム エラーが発生しました。

システムまたは外部コンポーネントでエラーが発生しました。


指定されたファイルは、現在のバージョンの Visual Basic でサポートされていない形式のファイルのため、ロードできません。

Visual Basic Version 1.0 のフォーム、または現バージョン以降のバージョンのフォームをロードしようとしています。これのフォームはサポートされていません。


プロジェクト ファイルは破損しています。ロードできません。

プロジェクト ファイルが読み込めません。このエラーは、ファイルを Visual Basic ではなく、エディタで編集したときに発生します。問題に対処するようにファイルの変更内容を元に戻します。


デザイナ キャッシュ ファイルに書き込めません。ロード時には通常のファイルを使います。

ActiveX デザイナでキャッシュ ファイルに情報を書き込むことができないため、キャッシュされていない情報を使用してロードします。

次回、Visual Basic を起動するときに性能を向上させるために、ActiveX デザイナはキャッシュ ファイルに情報を書き込みます。ディスクの空き容量が不足しているか、またはドライブのアクセス権限が無効であるために、デザイナはキャッシュ ファイルに書き込むことができません。十分なディスク空き容量があるかどうかを確認し、ドライブへの書き込み権限を持っていることを確認します。それでも問題が解決されない場合は、ActiveX デザイナのベンダーに問い合わせてください。


メモリが不足しているためファイルの読み込みができません。

ファイルをロードするのに必要なメモリが確保できません。他のアプリケーションを閉じて、再度実行します。


プロシージャ名が重複しています。

同じ名前のプロシージャを複数個定義しています (または定義しようとしています)。プロシージャの名前を変更してください。同じプロシージャの重複する Declare ステートメントの Alias キーワードが同じであることを確認します。


ヘルプを表示できません。

Windows のヘルプ アプリケーションが使用できません。MSDN ライブラリ ビューアがマシンにある場合は、パスが正しいかどうかを確認してください。マシンにない場合は、ヘルプを参照する前にインストールしてください。


システム情報を表示できません。

Microsoft Visual Basic の [バージョン情報] ダイアログ ボックスで [システム情報] をクリックしたにもかかわらず、システム情報が表示されません。メモリが不足しているか、または必要なファイルが破損しているか見つかりません。


アプリケーションの説明には 2000 バイト以上を記述することはできません。

アプリケーション説明は、2,000 文字を超えることはできません。説明から適当な文字を削除します。


印刷する対象を指定してください。

印刷対象が指定されていません。[ファイル] メニューの [印刷] をクリックして表示される [印刷] ダイアログ ボックスで、少なくとも 1 つの [フォーム] チェック ボックスまたは [コード] チェック ボックスをオンにします。


オブジェクト名が不正です。

フォーム名またはコントロール名は文字で始まり、文字、数字、アンダースコア (_) を含めて最大 40 文字以内でなければなりません。

フォームまたはコントロールの Name プロパティは、Caption、Text、および Value プロパティなど、実行時にコントロールの内容をラベルにしたり表示したりする Label プロパティとは異なります。これらのプロパティは予約キーワードを使用でき、数字で始めたり、英数字以外の文字を含めることもできます。


指定された名前のモジュール、プロジェクト、またはオブジェクト ライブラリが既に存在します。

このエラーは次の原因で発生します。

•	名前が競合するオブジェクトを含むフォーム、User Control、User Document、または Property Page がロードされました。このエラーは、ファイルを Visual Basic を使用せずに編集したときに発生します。

•	このエラーは、フォームの名前をプロジェクト、別のフォーム、またはモジュールと同じ名前に変更しようとするときに発生します。また、プロジェクトの名前をフォームやモジュールと同じ名前に変更しようとするときにも発生します。


現時点ではプロジェクト名は設定できません。

この時点では、プロジェクト名を設定できません。


オブジェクト コンポーネントが適切に登録されていないか、あるいは見つかりません。

コンポーネントは、システム レジストリに登録されている必要があります。このエラーの原因と解決方法を次に示します。

•	コンポーネントのレジストリ情報が正しくないため、コンポーネントが見つかりません。

レジストリを訂正します。必要に応じて、コンポーネントを再セットアップします。

•	アプリケーションの削除 (アンインストール) プログラムを使用せずに、コンポーネントが削除されています。

レジストリで指定されているフォルダにコンポーネント ファイルを置きます。

詳細については、目的の項目を選択して、Windows の場合は F1 キー、Macintosh の場合は Help キーを押してください。


プロジェクトが保護されているため、操作を実行することができません

プロジェクトが保護されていると、特定の操作が行えません。このエラーの原因と解決方法を次に示します。

•	プロジェクトに、不注意で保護が設定されています。

保護を解除して、操作をやり直します。

•	プロジェクトに、意図的な保護が設定されています。

保護を設定した人が保護を解除するまで、その操作は行わないでください。

詳細については、目的の項目を選択して、Windows の場合は F1 キー、Macintosh の場合は Help キーを押してください。


現在のセッションを終了するまでは、新しく記録することはできません。

レコーディングは "ネスト" できません。このエラーの原因と解決方法を次に示します。

•	レコーダが実行中です。

カレント レコーディングを終了してから、新しいレコーディングを開始します。

詳細については、目的の項目を選択して、Windows の場合は F1 キー、Macintosh の場合は Help キーを押してください。


指定されたオブジェクトを削除する前にエクスポートしますか ?

フォームとモジュールをエクスポートして、別のときに再ロードすることができます。このエラーの原因と解決方法を次に示します。

•	プロジェクトからフォームまたはモジュールを削除しようとしています。

モジュールを残しておくには、エクスポートします。将来、インポートすることができるようになります。

詳細については、目的の項目を選択して、Windows の場合は F1 キー、Macintosh の場合は Help キーを押してください。


指定されたファイルに含まれるフォーム クラスが Visual Basic for Applications でサポートされていません。ファイルは読み込めません。

Visual Basic for Applications は、UserForm フォーム オブジェクトのみサポートしています。このエラーの原因と解決方法を次に示します。

•	Visual Basic の以前のバージョンのフォーム、または単独で使用する Visual Basic の現在のバージョンのフォームをロードしようとしています。

最も簡単な方法は、Visual Basic for Applications の UserForm ツールを使用して、フォームを再設計することです。ASCII 形式でフォームを保存できる場合は、フォームを編集してインポートすることができますが、この場合は、各種のフォーム パッケージの形式や制限に対する十分な知識が必要です。

詳細については、目的の項目を選択して、Windows の場合は F1 キー、Macintosh の場合は Help キーを押してください。


指定されたファイルを読み込むことはできません。

すべてのファイルが Visual Basic for Applications でロードできるわけではありません。このエラーの原因と解決方法を次に示します。

•	ロードしようとしているファイルが、Visual Basic で解釈できない形式か、またはファイルが破損しています。

このファイルはロードできません。

詳細については、目的の項目を選択して、Windows の場合は F1 キー、Macintosh の場合は Help キーを押してください。


このコマンドを使うとデバッグは中断します。

コマンドや操作の中には、Visual Basic のコードの解析が停止するものがあります。このエラーの原因と解決方法を次に示します。

•	編集 (Static 変数の宣言など) や、新しいモジュールやフォームの追加などのコマンドによっては、実行中または中断中のコードが停止します。

実行中のコードを停止させたくない場合は、コマンドの追加や実行を行わないでください。

詳細については、目的の項目を選択して、Windows の場合は F1 キー、Macintosh の場合は Help キーを押してください。


設定をする前に、プロジェクトを保存する必要があります。

保存されていないプロジェクトに参照を設定することはできません。このエラーの原因と解決方法を次に示します。

•	保存されていないプロジェクトに参照を設定しようとしています。

プロジェクトを保存してから参照を設定します。

詳細については、目的の項目を選択して、Windows の場合は F1 キー、Macintosh の場合は Help キーを押してください。


オブジェクトの使い方が不正です。(Error 425)

ほとんどのオブジェクトは用途が特定されており、通常、適切な適用範囲外でオブジェクトを使用しようとすると、このエラーが発生します。たとえば、ドラッグ/ドロップ イベントに渡されたオブジェクト参照は、そのイベントのコンテキスト内でのみ使用できます。


フォームのイメージをこのプリンターで印刷することはできません。(Error 486)

フォーム イメージを印刷するには、グラフィックスを印刷できるプリンタが必要です。


指定されたオブジェクトは、Show メソッドのオーナー フォームとして使用できません。(Error 371)

Show メソッドに対応したオブジェクトを使用する必要があります。


指定された ActiveX コントロールが見つかりません。(Error 363)

ロードされているフォームに、カレント プロジェクトの一部でない ActiveX コントロールが含まれています。このエラーの原因と対処方法を次に示します。

•	プロジェクトの .VBP ファイルを手動で編集して、プロジェクトの一部ではない ActiveX コントロールを含むフォームを追加している可能性があります。

プロジェクトをロードした後、[ファイル] メニューの [ファイルの追加] を使用して、ActiveX コントロールをプロジェクトに追加します。

•	プロジェクトの .VBP ファイルを手動で編集して、プロジェクトの一部になっている ActiveX コントロールよりも以前のバージョンの ActiveX コントロールを含むフォームを追加している可能性があります。

プロジェクトをロードした後、フォームから以前のバージョンのコントロールを削除し、最新のバージョンのコントロールをフォームに追加します。


ActiveX コンポーネントが正しく登録されていません。(Error 336)

ActiveX コンポーネントがシステム レジストリに正しく登録されていません。


データ値が見つかりません。(Error 327)

データ値が見つかりません。


ピクチャが不正です。(Error 481)

無効な形式のグラフィックスが Picture プロパティに割り当てられました。

Picture プロパティに指定した読み込みたいファイルが、Visual Basic でサポートされているグラフィックスであるかどうかを確認します。


プリンタ エラーです。(Error 482)

何らかの問題のため、印刷ができません。このエラーの原因と対処方法を次に示します。

•	Windows のコントロール パネルでセットアップされているプリンタがありません。

[コントロール パネル] を開いて、[プリンタ] フォルダをダブルクリックし、[プリンタの追加] をダブルクリックしてプリンタをセットアップします。

•	プリンタがオンラインでありません。

プリンタのスイッチでオンラインに切り替えます。

•	プリンタで用紙が詰まっているか、用紙がなくなっています。

用紙を確認します。

•	文字列だけしか印刷できないプリンタで、フォームを印刷しようとしています。

グラフィックスを印刷できるセットアップ済みのプリンタに切り替えます。


プリンタ ドライバは指定されたプロパティをサポートしていません。(Error 483)

使用中のプリンタのプリンタ ドライバで、Printer オブジェクトのこのプロパティがサポートされていません。このエラーの原因と対処方法を次に示します。

•	Printer オブジェクトのプロパティの効果は、プリンタの製造元から供給されているドライバによって異なります。プロパティの設定値の中には効果がないものや、複数の異なるプロパティの設定値で同じ効果があるものもあります。許容範囲外の設定値でエラーが発生することもありますが発生しないこともあります。

詳細については、ドライバの製造元のマニュアルを参照してください。


システムからプリンタ情報を受けるときに問題が発生しました。プリンタが正しく設定されているかを確かめてください。(Error 484)

システムからプリンタ情報が取得できません。このエラーの原因と対処方法を次に示します。

•	Windows のコントロール パネルでセットアップされているプリンタがありません。

[コントロール パネル] を開いて、[プリンタ] フォルダをダブルクリックし、[プリンタの追加] をダブルクリックしてプリンタをセットアップします。

•	プリンタがオンラインでありません。

プリンタのスイッチでオンラインに切り替えます。

•	プリンタで用紙が詰まっているか、用紙がなくなっています。

用紙を確認します。


ピクチャの形式が不正です。(Error 485)

ロードしようとしているリソース ファイルのピクチャの形式が、オブジェクトで指定されたプロパティと一致しません。このエラーの原因と対処方法を次に示します。

•	LoadResPicture メソッドを使用して、ビットマップ リソースをフォームの Icon プロパティとしてロードしようとしています。

プロパティを Picture プロパティに変更するか、LoadResPicture の引数 format を vbResIcon に変更します。

•	LoadResPicture メソッドを使用して、カーソル リソースを MousePointer プロパティではなく、別のオブジェクトまたはコントロールのプロパティとしてロードしようとしています。

プロパティへの参照を MousePointer プロパティに変更します。


Clipboard を空にできません。(Error 520)

Clipboard は開いていますが、空にできません。このエラーの原因と対処方法を次に示します。

•	別のアプリケーションで Clipboard が使用されており、解放されていません。

コード内にこの状況のエラー トラップを設定し、[再試行] ボタンと [キャンセル] ボタンがあるメッセージ ボックスを表示して、しばらくしてからユーザーが再試行できるようにします。


Clipboard を開けません。(Error 521)

Clipboard が、既に別のアプリケーションで開かれています。このエラーの原因と対処方法を次に示します。

•	別のアプリケーションで Clipboard が使用されており、解放されていません。

コード内に、この状況のエラー トラップを設定し、[再試行] ボタンと [キャンセル] ボタンがあるメッセージ ボックスを表示して、しばらくしてからユーザーが再試行できるようにします。


データの形式が一致しません。(Error 461)

指定された Clipboard の形式が実行中のメソッドと互換性がありません。このエラーの原因と対処方法を次に示します。

•	GetText メソッドまたは SetText メソッドを、vbCFText または vbCFLink ではなく、他の Clipboard 形式で使用しようとしています。

これらのメソッドを使用する前に、GetFormat メソッドを使用して、Clipboard の現在の内容が指定された形式と一致するかどうかを確認します。

•	GetData メソッドまたは SetData メソッドを、vbCFBitmap、vbCFDIB、または vbCFMetafile ではなく、他の Clipboard 形式で使用しようとしています。

これらのメソッドを使用する前に、GetFormat メソッドを使用して、Clipboard の現在の内容が指定されたグラフィックス形式と一致するかどうかを確認します。


クリップボードのデータ形式が不正です。(Error 460)

指定された Clipboard の形式が実行中のメソッドと互換性がありません。このエラーの原因と対処方法を次に示します。

•	GetText メソッドまたは SetText メソッドを、vbCFText または vbCFLink ではなく、他の Clipboard 形式で使用しようとしています。

無効な形式を削除し、2 つの有効な形式のうちの 1 つを指定します。

•	GetData メソッドまたは SetData メソッドを、vbCFBitmap、vbCFDIB、または vbCFMetafile ではなく、他の Clipboard 形式で使用しようとしています。

無効な形式を削除し、3 つの有効なグラフィックス形式のうちの 1 つを指定します。


このコンポーネントのライセンス情報が見つかりません。デザイン環境でこの機能を使うために必要なライセンスがありません。(Error 429)

ActiveX コントロールのライセンスを持ったユーザーでありません。このエラーの原因と対処方法を次に示します。

•	デザイン時に、フォーム上に ActiveX コントロールを配置しようとしているか、または ActiveX コントロールを配置したフォームをプロジェクトに追加しようとしていますが、関連する情報がレジストリにありません。

レジストリの情報が削除されたか、破損している可能性があります。ActiveX コントロールを再セットアップするか、コントロールのベンダーに問い合わせてください。


既にフォームは表示されています。モーダルにできません。(Error 400)

Show メソッドを使用して、既に表示されているフォームをモーダルとして表示することはできません。このエラーの原因と対処方法を次に示します。

•	既に表示されているフォームに対して、引数 style に 1 (vbModal) を設定して、Show を使用しようとしています。

Unload ステートメントまたは Hide メソッドをフォームで使用してから、モーダル フォームとして表示します。


一番手前 (前面) のモーダル フォームを先に閉じてください。(Error 402)

閉じるか非表示にしようとしているモーダル フォームが、Z オーダーの最前面にありません。このエラーの原因と対処方法を次に示します。

•	閉じるか非表示にしようとしているモーダル フォームよりも Z オーダーの前面に別のモーダル フォームがあります。

Z オーダーの前面にあるモーダル フォームで、Unload ステートメントまたは Hide メソッドを最初に使用します。モーダル フォームとは、引数 style に 1 (vbModal) が設定されている、Show メソッドで表示されるフォームです。


このオブジェクトは、ロードまたはアンロードすることはできません。(Error 361)

Load ステートメントまたは Unload ステートメントで参照しているオブジェクトまたはコントロールが無効です。このエラーの原因と対処方法を次に示します。

•	Screen、Printer、または Clipboard など、ロードできないオブジェクトをロードまたはアンロードしようとしています。

コードから、エラーのステートメントを削除します。

•	コントロール配列の一部でない既存のコントロールをロードまたはアンロードしようとしています。たとえば、Name プロパティに Text1 が設定されている TextBox が存在する場合、Load Text1 はエラーになります。

コードから、エラーのステートメントを削除するか、コントロール配列内のコントロールを参照するように変更します。

•	Click イベントで、親メニューの Menu コントロールをアンロードしようとしています。

別のプロシージャで Menu コントロールをアンロードします。

•	Menu コントロールの最後に表示されたメニュー項目をアンロードしようとしています。

コントロール配列にある他のメニュー項目の Visible プロパティの設定を確認してから、メニュー項目をアンロードするか、コードからエラーのステートメントを削除します。


このオブジェクトは既にロードされています。(Error 360)

コントロール配列のコントロールは、既にロードされています。このエラーの原因と対処方法を次に示します。

•	実行時に、Load ステートメントでコントロールをコントロール配列に追加しようとしていますが、参照されたインデックス値は既に存在します。

インデックス参照を新しい値に変更するか、コードで、同じ Load ステートメントで複数回、同じインデックス値を参照していないかを確認します。


フォームが見つかりません。(Error 424)

フォームが見つかりません。このエラーの原因と対処方法を次に示します。

•	Add メソッドでフォームを UserForms コレクションに追加しようとしていますが、指定された名前のフォーム クラスがありません。たとえば、UserForms.Add "MyForm" で MyForm が存在しません。

メモ   クラス名がプロジェクトで使用できるものであることを確認します。


現在アンロードできません。(Error 365)

状況によって、フォームまたはフォームのコントロールをアンロードできない場合があります。このエラーの原因と対処方法を次に示します。

•	Paint イベントを持つフォームのコントロール、またはフォームの Paint イベントに Unload ステートメントがあります。

Paint イベントから Unload ステートメントを削除します。

•	ComboBox の Change、Click、または DropDown の各イベントに Unload ステートメントがあります。

イベントから Unload ステートメントを削除します。

•	HScrollBar コントロールまたは VScrollBar コントロールの Scroll イベントに Unload ステートメントがあります。

イベントから Unload ステートメントを削除します。

•	Data、Form、MDIForm、または PictureBox の各コントロールの Resize イベントに Unload ステートメントがあります。

イベントから Unload ステートメントを削除します。

•	MDI 子フォームをアンロードしようとしている MDIForm の Resize イベントに Unload ステートメントがあります。

イベントから Unload ステートメントを削除します。

•	Data コントロールの RePosition イベントまたは Validate イベントに Unload ステートメントがあります。

イベントから Unload ステートメントを削除します。

•	OLE Container コントロールの ObjectMove イベントに Unload ステートメントがあります。

イベントから Unload ステートメントを削除します。


システム DLL をロードできません。(Error 298)

DDEML.DLL、VERSION.DLL、または WINSPOOL.DRV など、オペレーティング システムで提供されている .DLL ファイルが見つかりません。このエラーの原因と対処方法を次に示します。

•	ファイルが正しいパスにありません。

DLL が Windows のシステム パスにあるかどうかを確認します。

•	DLL が破損しているか、削除されています。

DLL を再ロードします。

•	メモリ容量が不足しているか、スワップ領域が不足しています。

他のアプリケーションを閉じて、メモリを解放します。


キャラクタ デバイスは使えません。(Error 320)

Visual Basic 内では、キャラクタ デバイス ドライバと同じ名前をファイルに付けることはできません。このエラーの原因と対処方法を次に示します。

•	AUX、CON、COM1、COM2、LPT1、LPT2、LPT3、LPT4、または NUL などのファイル名を使用しようとしています。

別のファイル名にします。


不正なファイル形式です。(Error 321)

Visual Basic フォーム ファイルが破損しています。このエラーの原因と対処方法を次に示します。

•	フォームの ActiveX コントロールが破損しています。

フォームの ActiveX コントロールを置き換えます。

•	ActiveX コントロールの現在のバージョンのプロパティ数が、指定されているものと一致しません。

旧バージョンまたは最新バージョンの ActiveX コントロールに置き換えます。


不正なパラメータです。配列に書き込めません。(Error 328)

不正なパラメータがメソッドに渡されています。このエラーの原因と対処方法を次に示します。

•	ユーザー コントロールの WriteProperties イベントで、X が配列の PropBag.WriteProperty X を使用しようとしています。これはサポートされていません。

配列の各要素を個々に記述する必要があります。


システム レジストリにアクセスできません。(Error 335)

システム レジストリの読み取りまたは書き込みに失敗しました。


ActiveX コンポーネントが見つかりません。(Error 337)

要求された EXE ファイルまたは DLL ファイルが見つかりません。


ActiveX コンポーネントが正常に実行されませんでした。(Error 338)

ActiveX コンポーネントの EXE ファイルが正しく実行されません。レジストリ内の情報に問題がある可能性があります。


既にアンロードされています。(Error 364)

フォームが、そのフォーム自体の _Load プロシージャからアンロードされました。このエラーの原因と対処方法を次に示します。

•	_Load プロシージャ内の Unload ステートメントのフォームが、暗黙的にロードされています。たとえば次の例では、YourForm がロードされていない場合、暗黙的にロードされます。MyForm.BackColor = YourForm.BackColor.

Form_Load プロシージャから Unload ステートメントを削除します。


ファイルは古い形式で作成されています。このプログラムには新しい形式のファイルが必要です。(Error 368)

古いバージョンの ActiveX コントロールが使われています。このエラーの原因と対処方法を次に示します。

•	ActiveX コントロールの現在のバージョンのプロパティ数が、指定されているものと一致しません。

最新バージョンの ActiveX コントロールに置き換えます。


プロパティの値が不正です。(Error 380)

不適当な値がプロパティに割り当てられています。このエラーの原因と対処方法を次に示します。

•	オブジェクトまたはコントロールのプロパティの 1 つに、許容範囲外の値を設定しようとしています。

プロパティの値を有効な設定値に変更します。たとえば、MousePointer プロパティには、0 から 15 まで、または 99 の整数を設定しなければなりません。


プロパティは、実行時には設定できません。(Error 382)

このプロパティは、実行時には値の取得のみ可能です。このエラーの原因と対処方法を次に示します。

•	デザイン時にのみ値が設定できるプロパティの設定または変更をしようとしています。

コードから、そのプロパティへの参照を削除するか、実行時にプロパティの値を返すだけの参照に変更します。


プロパティは値の取得のみ可能です。(Error 383)

このプロパティは、デザイン時、実行時共に値の取得のみ可能です。このエラーの原因と対処方法を次に示します。

•	値の取得のみ可能なプロパティの値を設定または変更をしようとしています。

コードから、そのプロパティへの参照を削除するか、実行時にプロパティの値を返すだけの参照に変更します。


プロパティは実行時に値の取得はできません。(Error 393)

このプロパティは、デザイン時にのみ使用できます。このエラーの原因と対処方法を次に示します。

•	デザイン時にのみアクセスできるプロパティを、実行時に参照しようとしています。

コードを変更し、プロパティへの参照を削除します。


プロパティは設定のみ可能です。(Error 394)

このプロパティは、値を取得できません。このエラーの原因と対処方法を次に示します。

•	プロパティは、値を取得できません。たとえば、ctl.property = 3 は正しいのですが、"Print ctl.property" ではエラーになります。

コードを変更し、プロパティへの参照を削除します。


オブジェクトを利用できません。(Error 419)

指定されたオブジェクトにアクセスするのに必要な権限がありません。このエラーの原因と対処方法を次に示します。

•	現在、このオブジェクトにアクセスする権限がありません。

アクセス権を変更するには、システム管理者またはオブジェクトの作成者に問い合わせてください。


AutoRedraw イメージを作成できません。(Error 480)

フォームまたはピクチャの自動再描画のための継続表示属性を持つビットマップは Visual Basic で作成できません。このエラーの原因と対処方法を次に示します。

•	AutoRedraw プロパティに真 (True) を設定するのに必要なメモリが不足しています。

AutoRedraw プロパティに偽 (False) を設定し、Paint イベント プロシージャで再描画を行うか、PictureBox コントロールまたは Form オブジェクトを小さくしてから、再度、AutoRedraw プロパティに真 (True) を設定します。


メモリが不足しています。(Error 31001)

指定された操作に対して、十分なメモリまたはディスク領域の割り当て、またはアクセスができません。


オブジェクトがありません。(Error 31004)

存在しないオブジェクトに対して処理を実行しようとしています。


クラスが設定されていません。(Error 31018)

ソース ドキュメント (SourceDoc プロパティ) を指定しない場合は、Action = 0 (CreateEmbed メソッド) を設定するときに、システムで使用可能なクラスの名前を Class プロパティに設定する必要があります。

デザイン時に、使用可能なクラス名のリストを表示するには、OLE コンテナ コントロールをクリックし、[オブジェクトの挿入] コマンドをクリックします。


オブジェクトをアクティブにできません。(Error 31027)

オブジェクトのソース ドキュメントがロードできないか、そのオブジェクトを作成したアプリケーションが使用できません。

リンク オブジェクトをアクティブにしようとしたときに (Action = 7 に設定)、SourceDoc プロパティに指定されているファイルが削除されているか、または存在しないときに、このエラーが発生します。

また、オブジェクトをアクティブにしたときに (Action = 7 に設定)、Verb プロパティで指定された処理が無効のときにも、このエラーが発生します。オブジェクトを提供するアプリケーションの中には、アプリケーションの状態によって、サポートする OLE 動詞が異なるものがあります。アプリケーションでサポートされるすべての OLE 動詞は、ObjectVerbs プロパティ リストに表示されます。ただし、OLE 動詞によっては、アプリケーションのそのときの状態によって使用できないものがあります。


埋め込みオブジェクトが作成できません。(Error 31032)

オブジェクトを作成しているアプリケーションで、SourceDoc プロパティで指定されたオブジェクトを作成できません。

たとえば、ワークシート オブジェクトを埋め込もうとしているとき、および SourceDoc で指定されているワークシートが表計算アプリケーションでロードできないほど大きい場合に、このエラーが発生します。


ファイルへの書き込み中にエラーが発生しました。(Error 31036)

オブジェクトをファイルに書き込めません (Action = 11、または 18 に設定)。エラーの原因を次に示します。

•	FileNumber プロパティが無効です。

•	指定されたファイルが、Binary モードで開かれていません。

•	ディスク領域が不足しています。


ファイルの読み込み中にエラーが発生しました。(Error 31037)

指定されたファイルから読み込もうとしたときにエラーが発生しました (Action = 12 に設定)。エラーの原因を次に示します。

•	FileNumber プロパティが無効です。

•	ファイルが Binary モードで開かれていません。

•	ファイルが正しく保存されていません (Action = 11 に設定)。

•	ファイルが破損しています。

•	ファイル位置が、有効な OLE オブジェクトの先頭にありません。


指定された行 : フォーム名が不正です。このフォームは読み込めません。

ASCII 形式ファイルに格納されるフォーム名が、Visual Basic で無効な文字列です。このフォームをロードできません。


指定された行 : 埋め込みオブジェクトを作成できません。

テキスト ファイルからフォーム、User Control、User Document、または Property Page をロードしている間に埋め込みオブジェクトは作成できません。たとえば、フォームに Microsoft Word のドキュメントを挿入してある場合、システムから Microsoft Word を削除すると、このエラーが発生します。このエラー メッセージは、エラー ログ ファイルに書き込まれます。


指定された行 : 埋め込みオブジェクトを作成できません。ライセンスが見つかりません。

ライセンス ファイルが見つからないため、テキスト ファイルからフォーム、User Control、User Document、または Property Page をロードしている間に埋め込みオブジェクトが作成できません。このオブジェクトを使用するにはライセンスが必要です。詳細については、オブジェクトのベンダーに問い合わせてください。このエラー メッセージは、エラー ログ ファイルに書き込まれます。


指定された行 : コントロールの最大ネスト (入れ子) レベルを超えています。

ASCII 形式ファイルに含まれるコントロールのネストが 7 レベルを超えています。


指定された行 : すべてのコントロールはメニューの前に置いてください。コントロールがロードできません。

コントロールが、ASCII 形式ファイルの間違った位置にあります。すべてのコントロールは、メニューの前にロードされなければなりません。


指定された行 : 親メニューは区分線にはなりません。

ASCII 形式ファイルに含まれる Menu コントロールの親メニュー、または最上位のメニューがメニューの区分線として定義されています。最上位のメニューはメニューの区分線として定義できません。この場合、区分線は設定されません。


指定された行 : Checked プロパティは設定できません。親メニューはチェックできません。

ASCII 形式ファイルにある最上位の Menu コントロールの Checked プロパティに真 (True) が設定されています。最上位のメニューはチェックできません。Menu コントロールはロードされますが、Checked プロパティは設定されません。


指定された行 : Shortcut プロパティが設定できません。親メニューにはショートカット キーを設定することはできません。

ASCII 形式ファイルにある最上位の Menu コントロールにショートカット キーが定義されています。最上位のメニューには、ショートカット キーは設定できません。Menu コントロールはロードされますが、Shortcut プロパティは設定されません。


指定された行 : Form 名が既に使われています。このフォームをロードできません。

ASCII 形式ファイルに格納されるフォーム名が、アプリケーションで既に使用されています。フォームはロードされません。


重複している属性が見つかりました。既定値が使用されます。

フォーム、User Control、Property Page、User Document、または Class Module の属性ステートメントのいくつかが、それぞれの型に必要な設定値と競合しています。たとえば、フォームの VB_PredeclaredId 属性は常に真 (True) である必要があります。このエラーは、ファイルを Visual Basic ではなく、エディタで編集したときに発生する可能性があります。


読み取り専用ファイルです。

読み取り専用ファイルに保存しようとしています。読み取り 専用ファイルは、プロジェクト エクスプローラで、 [image] と表示されます。読み取り専用ファイルには保存できません。[名前を付けて保存] を使用します。


指定された行 : 参照を作成できませんでした。

指定された行で示される参照が作成できません。


指定された行 : ファイルが読み込めません。

構文エラーが発生すると、ファイルの解析またはロードはできません。またフォーム名が競合していると、ASCII 形式ファイルはロードできません。そのフォームはロードされず、プロジェクト エクスプローラにもフォーム名が表示されません。

このエラーが発生しているファイルが、有効な ASCII 形式ファイルであるかどうかを確認し、プロジェクト内の別のフォームと競合していないかを確認します。


ロード中にエラーが発生しました。

エラーの詳細な内容については、エラー ログを調べます。


アドイン は読み込めません。利用可能なアドイン のリストから削除しますか ?

[アドイン マネージャ] ダイアログ ボックスの [利用可能なアドイン] リストで選択したアドインがロードできません。[はい] をクリックするとリストから削除され、[いいえ] をクリックすると削除されずに残ります。どちらを選択しても、そのアドインはロードできません。


アドインはシステム レジストリに登録されていないため読み込めません。すべてのアドインが正しくインストールされているかどうかを確認してください。

[アドイン マネージャ] ダイアログ ボックスの [利用可能なアドイン] リストで選択したアドインが、システム レジストリに正しく登録されていないか、既に登録が解除されているためにロードできません。


より詳細なロード エラーを表示しますか ?

エラーの表示を続ける場合は [OK] をクリックし、これ以上表示しない場合は [キャンセル] をクリックします。


読み込むことはできません。

構文エラーが発生すると、ファイルの解析またはロードはできません。またフォーム名が競合していると、ASCII 形式ファイルはロードできません。フォームはロードされず、プロジェクト エクスプローラにもフォーム名が表示されません。

このエラーが発生しているファイルが、有効な ASCII 形式ファイルであるかを確認し、プロジェクト内の別のフォームと競合していないかを確認します。


バージョン番号がないか不正です。

バージョン サインが見つからないか、または指定されたバージョンが認識できません。ASCII 形式ファイルの空白行またはコメント行を除く先頭の行に、正しいバージョンが指定されているかどうかを確認します。


プロジェクトに参照されています。更新することはできません。

指定されたコントロールが複数のプロジェクトから参照されています。1 つのプロジェクトで更新しても、別のプロジェクトでは無効になる場合があります。


使用中のコントロールまたは参照を削除することはできません。

削除しようとしている ActiveX コントロールまたは参照が、プロジェクト内にあるフォームの 1 つで使用されています。コントロールまたは参照されているオブジェクトをフォームから削除したあと、リストから選択を解除します。


終了できません。

Visual Basic の実行モードまたは中断モードのときに Windows を終了することはできません。また、ダイアログ ボックスやメッセージ ボックスが表示されているときにも、Windows を終了することはできません。


読み込み中のエラーです。プロパティを読み込めません。続けますか ?

プロジェクトに既にあるフォームと名前が競合するコントロールがあるフォームをロードしようとしています。たとえば、Form1 コントロールを含む Form2 をロードしようとすると、このエラーが発生します。


読み込み中のエラーです。コントロールを読み込めません。続けますか ?

このエラー メッセージは、別のエラーが発生したあとで表示されます。そのエラーに対して適切な処理を行ったあと、このエラー メッセージが表示されます。コントロールをロードするには、[はい] をクリックします。ロードをキャンセルするには [いいえ] をクリックします。


古いフォーマットで作成されています。保存する場合は、新しいフォーマットに変更されます。

このファイルは以前のバージョンの Visual Basic で作成されています。このファイルを保存するときには、現在のバージョンのファイル形式で保存されます。


プロジェクト中に既に存在します。

指定されたファイルが、既にプロジェクトの一部になっています。同じファイルをプロジェクトに複数回追加することはできません。プロジェクト内で別のファイルと同じ名前でファイルを保存することはできません。


読み込み中にエラーが発生しました。

ASCII 形式ファイル内に、何らかの予期せぬものが見つかりました。エラーについての詳細な情報がログ ファイルにあります。ログ ファイルを調べて、問題の重要度を調べます。無視しても何の問題もないエラーもあります (たとえば、「バージョン番号がないか不正です。」 など)。しかし、エラーのためにフォームが思ったように実行されない場合もあります (たとえば、「MyControl コントロールの MyClass クラスは、ロードされていません。」 など)。


文字列が長すぎるため処理できません。フォームの読み込みを中止します。

ロード中のフォームに埋め込まれている文字列が長すぎます。


プロジェクト中のファイルが変更されています。変更を保存しますか ?

プロジェクト内のファイルで、プロパティの設定値かコード ステートメントが変更されていますが、その変更内容がまだ保存されていません。別のプロジェクトをロードする前に保存できるのは、この時点だけです。


登録できませんでした。

指定されたファイルがシステム レジストリに登録できません。このエラーは、Visual Basic 開発環境のコンポーネントで使用されるタイプ ライブラリに関連したもので、システム レジストリ内での指定されたファイルのエントリが破損しているか、DLL 自体が見つからないか破損していることを表しています。


他のアプリケーションがこのプログラム内のオブジェクトを利用しています。このプログラムを終了するとエラーが発生することがあります。プログラムを終了しますか ?

現在実行中の Visual Basic プログラムにあるオートメーション オブジェクト が、少なくとも 1 つ以上の別のアプリケーションからアクセスされています。プログラムの実行を終了すると、これら別のアプリケーションでエラーが発生します。プログラムを終了する場合は [はい] をクリックし、実行を続ける場合は [いいえ] をクリックします。


プロパティが不正です。いくつかのプロパティが正しく設定されていない可能性があります。

指定されたファイルの 1 つ以上のプロパティの設定値が無効です。このエラーは、プロジェクト ファイルに関してのみ発生します。


重複した名前が見つかりました。名前を変更します。

フォーム、User Control、Property Page、または User Document のソース ファイルに同じ名前のフォームが 2 つあります。このエラーは、ファイルを Visual Basic ではなく、エディタで編集したときに発生する可能性があります。


指定された行 : コントロール名が不正です。

ASCII 形式ファイルに格納されるコントロール名が Visual Basic で無効な文字列です。コントロールはロードされません。


指定された行 : プロパティ名が不正です。

ASCII 形式ファイルに格納されるプロパティ名が、そのコントロールで無効なプロパティです。


コントロールのプロパティ名が不正です。

ASCII 形式ファイルで、プロパティ名の代わりに引用符で囲まれた文字列が記述されています。このプロパティ名は、引用符で囲むことはできません。


指定された行 : コントロールのプロパティのプロパティ インデックスが不正です。

ASCII 形式ファイルに格納されるプロパティ名のプロパティ インデックスが 255 を越えています。


指定された行 : プロパティが読み込めません。

ASCII 形式ファイルに未知のプロパティが格納されています。フォームをロードするときに、そのプロパティは無視されます。


指定された行 : コントロールのプロパティ名が不正です。

ASCII 形式ファイルに格納されるプロパティを引用符で囲む必要があるにもかかわらず、引用符で囲まれていません。フォームのこの行は無視されます。


指定された行 : プロパティが不正な値です。

ASCII 形式ファイルに格納されるプロパティの値が、このコントロールで無効の値です。このプロパティには、既定値が設定されます。


指定された行 : プロパティのファイル参照が不正です。

ASCII 形式ファイルに格納されるファイルへの参照が、指定されたフォルダ内で見つかりません。


指定された行 : プロパティが設定できません。

ASCII 形式ファイルのフォーム記述で示されたとおりに、指定されたコントロールのプロパティを設定できません。


指定された行 : クラスはロードされていません。

ASCII 形式ファイルに格納されるコントロール クラスが Visual Basic で認識できません。このクラスのカスタム コントロールをプロジェクトに追加します。


指定された行 : コントロールの Index プロパティがありません。

インデックスがないためにコントロールがロードできず、そのコントロールの名前が、既にロードされているコントロールと同じです。


指定された行 : コントロール名が長すぎるので切り詰めます。

ASCII 形式ファイルに格納されるコントロール名が 40 文字を越えています。このコントロールは、ロードされるときに名前が 40 文字に縮められます。


指定された行 : クラス名が長すぎるので切り詰めます。

ASCII 形式ファイルに格納されるクラス名が 40 文字を越えています。このクラスは、ロードされるときに名前が 40 文字に縮められます。


指定された行 : 構文エラーです。プロパティに等号 (=) がありません。

ASCII 形式ファイルに格納されるプロパティ名と値の間に等号 (=) がありません。プロパティはロードされません。


指定された行 : コントロールがロードできません。不正なコンテナです。

有効でないコンテナのコントロールに、コントロールをロードしようとしています。


指定された行 : コントロールを読み込めません。この名前は既に使われています。

ASCII 形式ファイルで指定されているコントロールと同じ名前がアプリケーション内で既に使用されているため、このコントロールをロードできません。


指定された行 : ファイルのコントロール クラスがないか、不正です。

ASCII 形式ファイルに格納されるコントロール クラスがフォーム記述にないか、またはクラス名が Visual Basic の有効な文字列でありません。


指定された行 : ファイルのコントロール名がないか、不正です。

ASCII 形式ファイルに格納されるコントロール名がフォーム記述にないか、またはコントロール名が Visual Basic の有効な文字列でありません。


指定された行 : コントロールはロードできません。ライセンスが見つかりません。

テキスト ファイルからフォーム、User Control、User Document、または Property Page をロードしている間、ActiveX コントロールは作成できません。コントロールが見つからないか、破損している可能性があります。コントロールを再セットアップして、やり直します。このエラー メッセージは、エラー ログ ファイルに書き込まれます。


指定された行 : CLSID が不正です。

テキスト ファイルから Form、User Control、User Document、または Property Page をロードしている間、オブジェクトは作成できません。ファイルで指定された CLSID が有効でありません。Font オブジェクトのようなプロパティのオブジェクトのみに適用されます。このエラー メッセージは、エラー ログ ファイルに書き込まれます。


参照設定することができません。

ファイルのロード中に、参照を構築する過程でエラーが発生したため、その参照は追加されません。


ロードされません。Name は既に使用されています。

指定された種類のアイテムは、同じ名前で 2 つロードすることはできません。


ChDir ステートメントの使用例

次の例は、ChDir ステートメントを使って、現在のフォルダを変更します。 Macintosh の場合、既定のドライブ名は 党HD媒 で、パス名の区切り文字には円記号 ("\") ではなくコロン (":") を使用してフォルダを指定します。また、Macintosh のフォルダの指定では、ワイルドカード文字は使用できません。

' 現在のフォルダを "MYDIR" に変更します。

ChDir "MYDIR"

' 現在のドライブは、"C:" であると仮定します。次のステートメントは、ドライブ

' "D:" の現在のフォルダを変更します。現在のドライブは、"C:" のままです。

ChDir "D:\WINDOWS\SYSTEM"


ChDrive ステートメントの使用例

次の例は、ChDrive ステートメントを使って、現在のドライブを変更します。Macintosh の場合、既定のドライブ名は 党HD:媒 になり、ChDrive を実行すると、現在のフォルダは指定したドライブのルート フォルダに変更されます。以下の例では、マシンに "D" という名前のドライブが接続されていると想定します。

' Microsoft Windows での例

ChDrive "D"	' "D" を現在のドライブにします。


CurDir 関数の使用例

次の例は、CurDir 関数を使って、現在のパスを求めます。Macintosh の場合、CurDir の引数 drive の指定は無視されます。 既定のドライブ名は 党HD媒 で、パス名の区切り文字には円記号 ("\") ではなくコロン (":") を使用してフォルダを指定します。

' C ドライブの現在のパスは、"C:\WINDOWS\SYSTEM" であると仮定します。 (Microsoft Windows の場合).

' D ドライブの現在のパスは、"D:\EXCEL" であると仮定します。

' 現在のドライブは、C ドライブであると仮定します。

Dim MyPath

MyPath = CurDir	' "C:\WINDOWS\SYSTEM" を返します。

MyPath = CurDir("C")	' "C:\WINDOWS\SYSTEM" を返します。

MyPath = CurDir("D")	' "D:\EXCEL" を返します。


Dir 関数の使用例

次の例は、Dir 関数を使って、指定したファイルまたはフォルダがあるかどうかを確認します。Macintosh, の場合、既定のドライブ名は 党HD:媒 で、パスの区切り文字には円記号 ("\") ではなくコロン (":") を使用してフォルダを指定します。また、ワイルドカード文字は、Mac のフォルダ指定では使用できませんが、MacID 関数を使用すると複数のファイルを指定することができます。

Dim MyFile, MyPath, MyName

' "WIN.INI" が存在する場合、そのファイル名を返します(Microsoft Windows の場合)。

MyFile = Dir("C:\WINDOWS\WIN.INI")

' 指定した拡張子を持つファイル名を返します。複数の *.INI ファイル

' が存在すると、最初に見つかったファイル名を返します。

MyFile = Dir("C:\WINDOWS\*.INI")

' 引数を指定せずに再度 Dir 関数を呼び出すと、

' 同じフォルダにある次の *.INIファイルを返します。

MyFile = Dir

' 隠しファイル属性を持つ *.TXT ファイルであり、最初に見つかったファイル名を返します。

MyFile = Dir("*.TXT", vbHidden)

' C:\ 内のフォルダの名前を表示します。

MyPath = "c:\"	' パスを設定します。

MyName = Dir(MyPath, vbDirectory)	' 最初のフォルダ名を返します。

Do While MyName <> ""	' ループを開始します。

' 現在のフォルダと親フォルダは無視します。

If MyName <> "." And MyName <> ".." Then

' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。

If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then

Debug.Print MyName	' フォルダであれば、それを表示します。

End If

End If

MyName = Dir	' 次のフォルダ名を返します。

Loop


Environ 関数の使用例

次の例は、Environ 関数を使って、環境文字列テーブルから環境変数 PATH のエントリ番号とバイト長を取得します。Macintosh では使用できません。

Dim EnvString, Indx, Msg, PathLen	' 変数を宣言します。

Indx = 1	' インデックスを 1 に設定します。

Do

EnvString = Environ(Indx)	' 環境変数を取得します。

If Left(EnvString, 5) = "PATH=" Then	' 環境変数 PATH のエントリ番号を調べます。

PathLen = Len(Environ("PATH"))	' バイト長を取得します。

Msg = "PATH のｴﾝﾄﾘ番号は " & Indx & " 、長さは " & PathLen & "です。"

Exit Do

Else

' 見つからない場合は、インデックス (Indx) の値を増やします。

Indx = Indx + 1、

End If

Loop Until EnvString = ""

If PathLen > 0 Then

MsgBox Msg	' メッセージを表示します。

Else

MsgBox "環境変数 PATH が存在しません。"

End If


FileCopy ステートメントの使用例

次の例は、FileCopy ステートメントを使って、ファイルをコピーします。この例のファイル SRCFILE には、データが含まれているものと仮定します。

Dim SourceFile, DestinationFile

SourceFile = "SRCFILE"	' コピー元のファイル名を指定します。

DestinationFile = "DESTFILE"	' コピー先のファイル名を指定します。

FileCopy SourceFile, DestinationFile	' ファイルをコピーします。


FileDateTime 関数の使用例

次の例は、FileDateTime 関数を使って、ファイルが作成または最後に変更された日付と時刻を求めます。表示される日付と時刻の形式は、国別情報の設定によって異なります。

Dim MyStamp

' TESTFILE が最後に更新された日付は、1993 年 2 月 12 日午後 4 時 35 分 47 秒であると仮定します。

' 国別情報には、"日本/日本語" が設定されているものと仮定します。

MyStamp = FileDateTime("TESTFILE")	' "93/2/12 4:35:47 PM" を返します。


FileLen 関数の使用例

次の例は、FileLen 関数を使って、ファイルの長さをバイト単位で求めます。この例の、TESTFILE には、データが含まれているものと仮定します。

Dim MySize

MySize = FileLen("TESTFILE")	' ファイルの長さをバイト数で返します。


GetAttr 関数の使用例

次の例は、GetAttr 関数を使って、ファイルおよび、フォルダの属性を求めます。Macintosh の場合、vbNormal、vbReadOnly、vbHidden および vbAlias の定数値のみが使用できます。

Dim MyAttr

' TESTFILE は、隠しファイル属性であると仮定します。

MyAttr = GetAttr("TESTFILE")	' 2 を返します。

' TESTFILE が隠しファイル属性の場合は、0 以外の値を返します。

Debug.Print MyAttr And vbHidden

' TESTFILE は、隠しファイル属性で読み取り専用であると仮定します。

MyAttr = GetAttr("TESTFILE")	' 3 を返します。

' TESTFILE が隠しファイル属性の場合は、0 以外の値を返します。

Debug.Print MyAttr And (vbHidden + vbReadOnly)

' MYDIR は、フォルダであると仮定します。

MyAttr = GetAttr("MYDIR")	' 16 を返します。


Kill ステートメントの使用例

次の例は、Kill ステートメントを使って、ファイルをディスクから削除します。

' ファイル TESTFILE には、データが含まれているものと仮定します。

Kill "TestFile"	' ファイルを削除します。

' 現在のフォルダにあるすべての *.TXT ファイルを削除します。

Kill "*.TXT"


MkDir ステートメントの使用例

次の例は、MkDir ステートメントを使って、フォルダを作成します。ドライブが指定されない場合、新規のフォルダは、現在のドライブに作成されます。

MkDir "MYDIR"	' フォルダを作成します。


Name ステートメントの使用例

次の例は、Name ステートメントを使って、ファイルの名前を変更します。この例では、指定するフォルダは既に存在するものと仮定します。Macintosh の場合、既定のドライブ名は 党HD:媒 で、パスの区切り文字には円記号 ("\") ではなく、コロン (":") を使用してフォルダを指定します。

Dim OldName, NewName

OldName = "OLDFILE": NewName = "NEWFILE"	' ファイル名を定義します。

Name OldName As NewName	' ファイル名を変更します。

OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE"

Name OldName As NewName	' ファイルの移動と名前の変更を行います。


QBColor 関数の使用例

次の例は、QBColor 関数を使って、引数 MyForm として渡されたフォームの BackColor プロパティを引数 ColorCode で示される色に設定します。QBColor 関数は、0 ～ 15 の範囲の整数値を取得します。

Sub ChangeBackColor (ColorCode As Integer, MyForm As Form)

MyForm.BackColor = QBColor(ColorCode)

End Sub


RGB 関数の使用例

次の例は、RGB 関数を使って表示される、色の RGB 値を表すすべての数値を返します。アプリケーションの色を設定するメソッドやプロパティでは、RGB 値が使われます。この例で使っている MyObject オブジェクトは、RGB 関数について説明するためのサンプル オブジェクトです。MyObject という名前のオブジェクトが存在しない場合や、オブジェクトに Color プロパティがない場合は、エラーが発生します。

Dim RED, I, RGBValue, MyObject

Red = RGB(255, 0, 0)	' 赤色の値を返します。

I = 75	' オフセット値を初期化します。

RGBValue = RGB(I, 64 + I, 128 + I) 	' RGB(75, 139, 203) と同じ値です。

MyObject.Color = RGB(255, 0, 0)	' MyObject オブジェクトの Color プロパティに赤色を設定します。


RmDir ステートメントの使用例

次の例は、RmDir ステートメントを使って、既に存在するフォルダを削除します。

' MYDIR は、空のフォルダであると仮定します。

RmDir "MYDIR"	' MYDIR を削除します。


SetAttr ステートメントの使用例

次の例は、SetAttr ステートメントを使って、ファイルの属性を設定します。Macintosh の場合、vbNormal、vbReadOnly、vbHidden および vbAlias の定数値のみが使用できます

' ファイル TESTFILE に隠しファイル属性を設定します。

SetAttr "TESTFILE", vbHidden

' ファイル TESTFILE に隠しファイル属性、および読み取り専用属性を設定します。

SetAttr "TESTFILE", vbHidden + vbReadOnly


ChDir ステートメント

現在のフォルダを変更します。

構文

ChDir path

引数 path は必ず指定します。引数 path には、新しく設定するフォルダを表す文字列式を指定します。引数 path には、既定のドライブ名が含まれています。ドライブ名を省略してフォルダを指定すると、ChDir ステートメントは現在のフォルダを現在のドライブの該当するフォルダに変更します。

解説

ChDir ステートメントを使用すると、フォルダを変更できます。ただし、ドライブは変更されません。たとえば、現在のドライブが C のとき、次に示すステートメントは、D ドライブのフォルダを変更しますが、現在のドライブは C のまま変更されません。

ChDir "D:\TMP"

Macintosh の場合は、既定のドライブは引数 path に指定したドライブに必ず変更されます。絶対パスを指定する場合は、先頭にドライブ名を指定し、相対パスで指定する場合は先頭にコロン (":") を入力してください。また ChDir の引数にはエイリアスを指定することもできます。

ChDir "MacDrive:Tmp"	' Macintosh の場合

ディレクトリを変更するときは、Microsoft Windows と Macintosh とでは相対位置を表す記号が異なる点に注意してください。

ChDir ".."	' Microsoft Windows で一階層上のディレクトリに移動する場合

ChDir "::"	' Macintosh で一階層上のディレクトリに移動する場合


ChDrive ステートメント

現在のドライブを変更します。

構文

ChDrive drive

引数 drive は必ず指定します。引数 drive には、ドライブを示す文字列式を指定します。引数 drive に長さ 0 の文字列 (" ") を指定したときは、現在のドライブは変更されません。引数 drive に 2 文字以上の文字列を指定した場合、最初の 1 文字だけが使用されます。

Macintosh で ChDrive を使用した場合、現在のフォルダは指定したドライブのルート フォルダに変更されます。


CurDir 関数

指定したドライブの現在のパスを表すバリアント型 (内部処理形式 String の Variant) の値を返します。

構文

CurDir[(drive)]

引数 drive は省略可能です。引数 drive には、ドライブを示す文字列式を指定します。引数 drive を省略した場合、または長さ 0 の文字列 (" ") を指定した場合は、現在のドライブのパスを返します。Macintosh で CurDir を使用した場合、引数 drive 指定した値は無視され、現在のドライブのパスが返されます。


Dir 関数

指定したパターンやファイル属性と一致するファイルまたはフォルダの名前を表す文字列型 (String) の値を返します。ドライブのボリューム ラベルも取得できます。

構文

Dir[(pathname[, attributes])]

Dir 関数の構文は、次の指定項目から構成されます。

指定項目	内容
pathname	省略可能です。ファイル名を表す文字列式を指定します。フォルダ名およびドライブ名も含めて指定できます。引数 pathname に指定した内容が見つからないときは、長さ 0 の文字列 (" ") を返します。
attributes	省略可能です。取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。省略すると、標準ファイルの属性になります。
設定値

引数 attributes の設定値は次のとおりです。

定数	値	内容
vbNormal	0	標準ファイル
vbReadOnly	1	読み取り専用ファイル
vbHidden	2	隠しファイル
vbSystem	4	システム ファイル。Macintosh では使用できません。
vbVolume	8	ボリューム ラベル。この値を指定すると、すべての属性は無効になります。Macintosh では使用できません。
vbDirectory	16	フォルダ
vbAlias	64	エイリアス ファイル。Macintosh でのみ使用できます。
メモ   これらの定数は、Visual Basic で定義されています。したがって、実際の数値の代わりにコードで使用することができます。

解説

Windows の場合、複数のファイルを指定するための "*" (アスタリスク) および "?" (疑問符) のワイルドカード文字を使用できます。Macintosh の場合、これらの文字は有効なファイル名の文字として扱われるため、このワイルドカード文字を使用して複数ファイルを指定することはできません。

また、Macintosh でワイルドカード文字がサポートされていないため、ファイルの種類によって複数のファイルを識別することができません。特定の種類のファイルを指定するには、ファイル名を使用せずに MacID 関数を使用します。例えば、次の例では、最初に見つかった、タイプが TEXT のファイルを返します。

Dir("SomePath", MacID("TEXT"))

フォルダ内のすべてのファイルに対して繰り返して処理を実行する場合は、引数を指定せずにDir を実行してください。

Dir("")

Windows で MacID 関数と Dir 関数を組み合わせて使用した場合はエラーが発生します。

引数 attribute に 256 より大きな値を指定した場合は MacID 関数の値と見なされます。

Dir 関数を最初に呼び出すとき、引数 pathname を指定しないとエラーになります。またファイル属性 (引数 attributes) を指定する場合にも、引数 pathname を指定する必要があります。

Dir 関数は、引数 pathname と一致する最初のファイル名を返します。それ以外のファイル名で引数 pathname と一致するファイル名を取得するには、引数を指定せずに再び Dir 関数を呼び出してください。一致するファイル名がない場合は、Dir 関数は長さ 0 の文字列を返します。長さ 0 の文字列が返された場合は、次に Dir 関数を呼び出すときに引数 pathname を再び指定しなければなりません。指定しないとエラーが発生します。現在の引数 pathname と一致するファイル名をすべて取得していなくても、途中で引数 pathname の指定を変更できます。ただし、Dir 関数を再帰的に呼び出すことはできません。vbDirectory 属性を指定して Dir 関数を続けて呼び出しても、連続する下位レベルのサブフォルダは返しません。

ヒント   取得したファイルを整理する必要があるときには、ファイル名を配列に格納して並べ替え (ソート) を行ってください。


Environ 関数

オペレーティング システムの環境変数に割り当てられた文字列型 (String) を返します。Macintosh では使用できません。

構文

Environ({envstring | number})

Environ 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
envstring	省略可能です。環境変数の名前を表す文字列式を指定します。
number	省略可能です。環境文字列テーブルの中における環境文字列の順番を示す数式を指定します。名前付き引数 number には任意の数式を指定できますが、評価される前に整数に丸められます。
解説

名前付き引数 envstring に指定した環境変数名が環境文字列テーブルに存在しない場合は、長さ 0 の文字列 (" ") が返されます。名前付き引数 envstring に指定した環境変数名が環境文字列テーブルに存在していれば、その環境変数に割り当てられた文字列 (環境文字列テーブルの中で、指定した環境変数の等号 (=) の後に記述されている文字列) が返されます。

名前付き引数 number に順番を指定すると、環境文字列テーブルの中でその順番に該当する文字列が返されます。この場合、名前付き引数 envstring を含むすべての文字列が返されます。該当する環境文字列が存在しなければ、長さ 0 の文字列 (" ") が返されます。


FileCopy ステートメント

ファイルをコピーします。

構文

FileCopy source, destination

FileCopy ステートメントの構文は、次の名前付き引数から構成されます。

指定項目	内容
source	必ず指定します。コピーするファイル名を示す文字列式を指定します。フォルダ名およびドライブ名を含めて指定できます。
destination	必ず指定します。コピー後のファイル名を示す文字列式を指定します。フォルダ名およびドライブ名を含めて指定できます。
解説

既に開いているファイルに対して、FileCopy ステートメントを実行しようとすると、エラーが発生します。


FileDateTime 関数

指定したファイルの作成日時または最後に修正した日時を示すバリアント型 (内部処理形式 Date の Variant) の値を返します。

構文

FileDateTime(pathname)

引数 pathname は必ず指定します。引数 pathname には、ファイル名を示す文字列式を指定します。フォルダ名およびドライブ名を含めて指定できます。


FileLen 関数

ファイルのサイズをバイト単位で表す長整数型 (Long) の値を返します。

構文

FileLen(pathname)

引数 pathname は必ず指定します。引数 pathname には、ファイル名を示す文字列式を指定します。フォルダ名およびドライブ名を含めて指定できます。

解説

FileLen 関数を呼び出したときに、指定したファイルが既に開いていると、FileLen 関数はファイルが開かれる前のサイズを表す値を返します。

メモ   既に開いているファイルのサイズが必要なときは、LOF 関数を使用してください。


GetAttr 関数

ファイルまたはフォルダの属性を表す整数型 (Integer) の整数を返します。

構文

GetAttr(pathname)

引数 pathname は必ず指定します。引数 pathname には、ファイル名を示す文字列式を指定します。フォルダ名およびドライブ名を含めて指定できます。

戻り値

GetAttr 関数の戻り値は、次の各属性を表す整数の合計値です。

定数	値	内容
vbNormal	0	通常ファイル
vbReadOnly	1	読み取り専用ファイル
vbHidden	2	隠しファイル
vbSystem	4	システム ファイル。Macintosh では使用できません。
vbDirectory	16	フォルダ
vbArchive	32	アーカイブ (属性最後にバックアップした後で、変更されたファイル)。Macintosh では使用できません。
vbAlias	64	エイリアス ファイル。Macintosh でのみ使用できます。
メモ   これらの定数は、Visual Basic で定義されています。実際の数値の代わりにコードで使用することができます。

解説

ファイル属性を調べるには、And 演算子を使って、GetAttr 関数の返す値と調べたいファイル属性の値をビット単位で比較します。演算結果が 0 以外の値 (真 (True)) の場合、指定したファイルにはその属性が設定されています。たとえば、アーカイブ属性が設定されていないとき、次の And 式は 0 を返します。

Result = GetAttr(FName) And vbArchive

アーカイブ属性が設定されている場合は、0 以外の値を返します。


Kill ステートメント

ディスクからファイルを削除します。

構文

Kill pathname

引数 pathname は必ず指定します。引数 pathname には、1 つまたは複数の削除するファイル名を示す文字列式を指定します。フォルダおよびドライブを含めて指定できます。

解説

Windows の場合、Kill ステートメントでは、複数のファイルを指定するための "*" (アスタリスク) および "?" (疑問符) のワイルドカード文字を使用できます。. Macintosh の場合はこれらの文字が有効なファイル名の文字として扱われるため、ワイルドカード文字を使用して複数のファイルを指定することはできません。

また、Macintosh でワイルドカード文字がサポートされていないため、ファイルの種類によって複数のファイルを削除するように指定できません。特定の種類のファイルを指定するには、ファイル名を個別にしていするのではなく、MacID 関数を使用します。次の例では、現在のフォルダ内でタイプが TEXT のファイルすべて削除します。

Kill MacID("TEXT")

Windows で Kill ステートメントと MacID 関数を使用した場合はエラーが発生します。

Kill ステートメントを使って、開いているファイルを削除しようとすると、エラーが発生します。

メモ   フォルダを削除するには、RmDir ステートメントを使用してください。


MkDir ステートメント

新しいフォルダを作成します。

構文

MkDir path

引数 path は必ず指定します。引数 path には、作成するフォルダ名を示す文字列式を指定します。ドライブ名も含めて指定できます。ドライブ名を省略したときは、現在のドライブに新しいフォルダが作成されます。


Name ステートメント

ファイルまたはフォルダの名前を変更します。

構文

Name oldpathname As newpathname

Name ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
oldpathname	必ず指定します。名前を変更するファイル名を示す文字列式を指定します。フォルダ名およびドライブ名も含めて指定できます。
newpathname	必ず指定します。新しいファイル名を示す文字列式を指定します。フォルダ名およびドライブ名も含めて指定できます。引数 newpathname には、既に存在しているファイル名は指定できません。
解説

Name ステートメントはファイル名を変更して、必要に応じて他のフォルダにファイルを移動します。Name ステートメントでは、ドライブ間ではファイルを移動しますが、newpathname と oldbathname で指定したドライブ名が同じ場合は、単に既存のフォルダの名前を変更します。ファイルやフォルダを新しく作成することはありません。

現在、開いているファイルに対して Name ステートメントを実行すると、エラーが発生します。ファイル名を変える前に、開いているファイルを閉じてください。引数 Name には、複数の文字を指定するためのアスタリスク (*) および単一の文字を指定するための疑問符 (?) のワイルド カード文字を指定できません。


QBColor 関数

指定した色番号に対応する RGB コードを表す長整数型 (Long) の値を返します。

構文

QBColor(color)

引数 color には、0 ～ 15 の範囲の整数を指定します。

設定値

引数 color の設定値は次のとおりです。

番号	色	番号	色
0	黒	8	灰色
1	青	9	明るい青
2	緑	10	明るい緑
3	シアン	11	明るいシアン
4	赤	12	明るい赤
5	マゼンタ	13	明るいマゼンタ
6	黄	14	明るい黄
7	白	15	明るい白
解説

引数 color の各設定値は、他のバージョンの Basic (Microsoft Visual Basic for MS-DOS、Microsoft Basic Compiler など) で使用されている色値に対応しています。返される値は、Microsoft Visual Basic for Applications で使用される RGB システムに対応する赤、緑、および青の値を最下位バイトから並べたものです。


RGB 関数

色の RGB 値を表す長整数型 (Long) の値を返します。

構文

RGB(red, green, blue)

RGB 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
red	必ず指定します。この名前付き引数は、バリアント型 (内部処理形式 Integer の Variant) のデータ形式で指定します。RGB の R (赤) の割合を 0 ～ 255 の範囲の整数で指定します。
green	必ず指定します。この名前付き引数は、バリアント型 (内部処理形式 Integer の Variant) のデータ形式で指定します。RGB の G (緑) の割合を 0 ～ 255 の範囲の整数で指定します。
blue	必ず指定します。この名前付き引数は、バリアント型 (内部処理形式 Integer の Variant) のデータ形式で指定します。RGB の B (青) の割合を 0 ～ 255 の範囲の整数で指定します。
解説

色の設定を行うアプリケーションのメソッドやプロパティでは、色の RGB 値を表す整数が使われます。色の RGB 値は、赤、緑、および青の相対的な明度を指定します。これらの明度の組み合わせによって、特定の色が表示されます。

RGB 関数のそれぞれの引数の値が 255 を超えたときは、255 とみなされます。

いくつかの代表的な色の赤、緑、および青の値を次に示します。

色	赤	緑	青
黒	0	0	0
青	0	0	255
緑	0	255	0
シアン	0	255	255
赤	255	0	0
マゼンタ	255	0	255
黄色	255	255	0
白	255	255	255
この関数によって返される RGB 色の値は Macintosh のオペレーティング システムで使用されている値とは互換がありません。これらの値は、Macintosh 用の Microsoft アプリケーションにおいて使用することはできますが、Macintosh のオペレーティングシステムの色設定に直接変更を加えるような処理には使用しないでください。


RmDir ステートメント

既存のフォルダを削除するステートメントです。

Syntax

RmDir path

引数 path は必ず指定します。引数 path には、削除するフォルダ名を表す文字列式を指定します。ドライブ名も含めて指定できます。ドライブ名を省略すると、現在のドライブのフォルダを削除します。

解説

指定したフォルダ内にファイルが存在していると、エラーが発生します。フォルダを削除する前に、Kill ステートメントを使用してすべてのファイルを削除してください。


SetAttr ステートメント

ファイルの属性を設定します。

構文

SetAttr pathname, attributes

SetAttr ステートメントの構文は、次の名前付き引数から構成されます。

指定項目	内容
pathname	必ず指定します。属性を設定するファイル名を表す文字列式を指定します。フォルダ名およびドライブ名を含めて指定できます。
attributes	必ず指定します。取得するファイルが持つ属性の値の合計を指定します。次に示す定数または数式を使用して指定します。
設定値

引数 attributes の設定値は次のとおりです。

定数	値	内容
vbNormal	0	(既定値) 通常ファイル
vbReadOnly	1	読み取り専用ファイル
vbHidden	2	隠しファイル
vbSystem	4	システム ファイル.。Macintosh では使用できません。
vbArchive	32	アーカイブ (属性最後にバックアップした後で、変更されたファイル)
vbAlias	64	エイリアス ファイル。Macintosh でのみ使用できます。
メモ   これらの定数は、Visual Basic で定義されています。実際の数値の代わりにコードで使用することができます。

解説

開いているファイルの属性を変更しようとすると、実行時エラーが発生します。


Close ステートメントの使用例

次の例は、Close ステートメントを使って、シーケンシャル出力モード (Output) で開いている 3 つのファイルをすべて閉じます。

Dim I, FileName

For I = 1 To 3	' ループを 3 回繰り返します。

FileName = "TEST" & I	' ファイル名を作成します。

Open FileName For Output As #I	' ファイルを開きます。

Print #I, "This is a test."	' ファイルに文字列を書き込みます。

Next I

Close	' 3 つのファイルをすべて閉じます。


EOF 関数の使用例

次の例は、EOF 関数を使って、ファイルの終端に達したかどうかを調べます。この例では、ファイル MYFILE は、複数行のデータを含むテキスト ファイルと仮定します。

Dim InputData

Open "MYFILE" For Input As #1	' シーケンシャル入力モードで開きます。

Do While Not EOF(1)	' ファイルの終端かどうかを確認します。

Line Input #1, InputData	' データ行を読み込みます。

Debug.Print InputData	' イミディエイト ウィンドウに表示します。

Loop

Close #1	' ファイルを閉じます。


FileAttr 関数の使用例

次の例は、FileAttr 関数を使って、開いているファイルのファイル ハンドルとファイル モードを返します。ファイル ハンドルは、16 ビット システムを使用している場合にのみ返されます。32 ビット システムでは、引数 2 を指定するとエラーが発生します。

Dim FileNum, Mode, Handle

FileNum = 1	' ファイル番号を割り当てます。

Open "TESTFILE" For Append As FileNum	' ファイルを開きます。

Mode = FileAttr(FileNum, 1)	' 8 (追加モード (Append)) を取得します。

Handle = FileAttr(FileNum, 2)	' ファイル ハンドルを取得します。

Close FileNum	' ファイルを閉じます。


FreeFile 関数の使用例

次の例は、FreeFile 関数を使って、次に使用可能なファイル番号を返します。この例では、ループ内で 5 つのファイルをシーケンシャル出力モード (Output) で開いています。各ファイルには、サンプル データが書き込まれているものと仮定します。

Dim MyIndex, FileNumber

For MyIndex = 1 To 5	' ループを 5 回繰り返します。

FileNumber = FreeFile	' 未使用のファイル番号を取得します。

Open "TEST" & MyIndex For Output As #FileNumber	' ファイル名を作成します。

Write #FileNumber, "これはサンプルです。"	' 文字列を出力します。

Close #FileNumber	' ファイルを閉じます。

Next MyIndex


Get ステートメントの使用例

次の例は、Get ステートメントを使って、ファイルのデータを読み込み、1 つの変数に代入しています。ファイル TESTFILE には、ユーザー定義型 Record 型のレコードが 5 つ含まれているものと仮定します。

Type Record	' ユーザー定義型を定義します。

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, Position	' 変数を宣言します。

' サンプル ファイルを ランダム アクセス モードで開きます。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' Get ステートメントを使って、サンプル ファイルを読み込みます。

Position = 3	' レコード番号を定義します。

Get #1, Position, MyRecord	' 3 番目のレコードを読み込みます。

Close #1	' ファイルを閉じます。


Input # ステートメントの使用例

次の例は、Input # ステートメントを使って、ファイルのデータを読み込み、2 つの変数に代入しています。この例のファイル TESTFILE には、Write # ステートメントを使って、データが書き込まれているものと仮定します。データは、"Hello", 234 のように、文字列はダブル クォーテーション (") で囲まれ、数値はカンマ (,) で区切られています。

Dim MyString, MyNumber

Open "TESTFILE" For Input As #1	' シーケンシャル入力モードで開きます。

Do While Not EOF(1)	' ファイルの終端までループを繰り返します。

Input #1, MyString, MyNumber	' データを 2 つの変数に代入します。

Debug.Print MyString, MyNumber	' イミディエイト ウィンドウに表示します。

Loop

Close #1	' ファイルを閉じます。


Input 関数の使用例

次の例は、Input 関数を使って、ファイルから 1 文字ずつ読み込んでいます。読み込んだ文字はイミディエイト ウィンドウに表示されます。ファイル TESTFILE は、複数行のデータを含むテキスト ファイルと仮定します。

Dim MyChar

Open "TESTFILE" For Input As #1	' ファイルを開きます。

Do While Not EOF(1)	' ファイルの終端までループを繰り返します。

MyChar = Input(1, #1)	' 1 文字のデータを読み込みます。

Debug.Print MyChar	' イミディエイト ウィンドウに表示します。

Loop

Close #1	' ファイルを閉じます。


Line Input # ステートメントの使用例

次の例は、Line Input # ステートメントを使って、シーケンシャル ファイルから 1 行ずつ読み込んで変数に代入しています。ファイル TESTFILE は、複数行のデータを含むテキスト ファイルと仮定します。

Dim TextLine

Open "TESTFILE" For Input As #1	' ファイルを開きます。

Do While Not EOF(1)	' ファイルの終端までループを繰り返します。

Line Input #1, TextLine	' 行を変数に読み込みます。

Debug.Print TextLine	' イミディエイト ウィンドウに表示します。

Loop

Close #1	' ファイルを閉じます。


Loc 関数の使用例

次の例は、Loc 関数を使って、開いているファイル内の現在の読み書き位置を返します。ファイル TESTFILE は、複数行のデータを含むテキスト ファイルと仮定します。

Dim MyLocation, MyLine

Open "TESTFILE" For Binary As #1	' 作成したファイルを開きます。

Do While MyLocation < LOF(1)	' ファイルの終端までループを繰り返します。

MyLine = MyLine & Input(1, #1)	' 文字を変数に代入します。

MyLocation = Loc(1)	' ファイル内の現在位置を取得します。

Debug.Print MyLine; Tab; MyLocation	' イミディエイト ウィンドウに表示します。

Loop

Close #1	' ファイルを閉じます。


Lock ステートメント、Unlock ステートメントの使用例

次の例は、Lock ステートメントと Unlock ステートメントを使って、レコードを変更するときに変更操作が終わるまで、他のプロセスからアクセスできないようにそのレコードをロックしています。ファイル TESTFILE には、ユーザー定義型 Record 型のレコードが 5 つ含まれているものと仮定します。

Type Record	' ユーザー定義型を定義します。

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, RecordNumber	' 変数を宣言します。

' サンプル ファイルをランダム アクセス モードで開きます。

Open "TESTFILE" For Random Shared As #1 Len = Len(MyRecord)

RecordNumber = 4	' レコード番号を定義します。

Lock #1, RecordNumber	' レコードをロックします。

Get #1, RecordNumber, MyRecord	' レコードを読み込みます。

MyRecord.ID = 234	' レコードを変更します。

MyRecord.Name = "田中一郎"

Put #1, RecordNumber, MyRecord	' 変更したレコードを書き込みます。

Unlock #1, RecordNumber	' カレント レコードのロックを解除します。

Close #1	' ファイルを閉じます。


LOF 関数の使用例

次の例は、LOF 関数を使って、開いたファイルのサイズを調べます。ファイル TESTFILE は、サンプル データを含むテキスト ファイルと仮定します。

Dim FileLength

Open "TESTFILE" For Input As #1	' ファイルを開きます。

FileLength = LOF(1)	' ファイルのサイズを取得します。

Close #1	' ファイルを閉じます。


Open ステートメントの使用例

次の例は、Open ステートメントを使って、さまざまなモードでファイルを開いています。

次のコード例では、ファイル TESTFILE をシーケンシャル入力モード (Input) で開きます。

Open "TESTFILE" For Input As #1

' 他のモードで開く前に、このファイルを一度閉じます。

Close #1

次のコード例では、ファイルを書き込み専用のバイナリ ファイル モード (Binary) で開きます。

Open "TESTFILE" For Binary Access Write As #1

' 他のモードで開く前に、このファイルを一度閉じます。

Close #1

次のコード例では、ファイルをランダム アクセス モード (Random) で開きます。ファイルには、ユーザー定義の Record 型のレコードが含まれているものと仮定します。

Type Record	' ユーザー定義型を定義します。

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record	' 変数を宣言します。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' 他のモードで開く前に、このファイルを一度閉じます。

Close #1

次のコード例では、ファイルをシーケンシャル出力モード (Output) で開きます。どのプロセスからでも、ファイルの読み書きができます。

Open "TESTFILE" For Output Shared As #1

' 他のモードで開く前に、このファイルを一度閉じます。

Close #1

次のコード例では、ファイルを読み込み専用のバイナリ ファイル モード (Binary) で開きます。他のプロセスから、このファイルを読むことはできません。

Open "TESTFILE" For Binary Access Read Lock Read As #1


Print # ステートメントの使用例

次の例は、Print # ステートメントを使って、ファイルにデータを書き込みます。

Open "TESTFILE" For Output As #1	' シーケンシャル出力モードで開きます。

Print #1, "これはテストです。"	' ファイルに文字列を書き込みます。

Print #1,	' ファイルに空白行を挿入します。

Print #1, "印字領域 1"; Tab ; "印字領域 2"	' 2 つの印字領域に分けて書き込みます。

Print #1, "皆さん" ; " " ; "こんにちは"	' 文字列の間にスペースを挿入します。

Print #1, Spc(5) ; "スペース 5 文字"	' 文字の前にスペースを 5 個挿入します。

Print #1, Tab(10) ; "こんにちは"	' 10 桁目に文字列を印字します。

' ブール値、日付、Null 値、エラー値を割り当てます。

Dim MyBool, MyDate, MyNull, MyError

MyBool = False : MyDate = #February 12, 1969# : MyNull = Null

MyError = CVErr(32767)

' True, False, Null 値, エラー値は、国別情報の設定によって変換されます。

' 日付リテラルは、短い日付形式 (コントロールパネルで設定) を使って、書き込まれます。

Print #1, MyBool ; " は、ブール値です。"

Print #1, MyDate ; " は、日付です。"

Print #1, MyNull ; " は、Null 値です。"

Print #1, MyError ; " は、エラー値です。"

Close #1	' ファイルを閉じます。


Put ステートメントの使用例

次の例は、Put ステートメントを使って、データをファイルに書き込みます。この例では、ユーザー定義の Record 型の 5 つのレコードをファイルに書き込みます。

Type Record	' ユーザー定義型を定義します。

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, RecordNumber	' 変数を宣言します。

' ファイルをランダム アクセス モードで開きます。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

For RecordNumber = 1 To 5	' ループを 5 回繰り返します。

MyRecord.ID = RecordNumber	' ID を定義します。

MyRecord.Name = "My Name" & RecordNumber	' 文字列を作成します。

Put #1, RecordNumber, MyRecord	' レコードをファイルに書き込みます。

Next RecordNumber

Close #1	' ファイルを閉じます。


Reset ステートメントの使用例

次の例は、Reset ステートメントを使って、開いているファイルをすべて閉じて、ファイル バッファに残っている内容をディスクに書き込みます。この例では、バリアント型 (Variant) の変数 FileNumber を、文字列と数値の両方の変数として使っています。

Dim FileNumber

For FileNumber = 1 To 5	' ループを 5 回繰り返します。

' ファイルをシーケンシャル出力モードで開きます。FileNumber は、# 付きで文字列 TEST の後に付加されます。

Open "TEST" & FileNumber For Output As #FileNumber

Write #FileNumber, "こんにちは"	' データをファイルに書き込みます。

Next FileNumber

Reset	' ファイルを閉じ、内容をディスクに書き込みます。


Seek 関数の使用例

次の例は、Seek 関数を使って、ファイル内の現在の読み書き位置を返します。この例では、ファイル TESTFILE は、ユーザー定義の Record 型のレコードが 5 つ含まれるものと仮定します。

Type Record	' ユーザー定義型を定義します。

ID As Integer

Name As String * 20

End Type

ランダム アクセス モード (Random) で開いたファイルでは、Seek 関数は読み書きできる次のレコード番号を返します。

Dim MyRecord As Record	' 変数を宣言します。

' ファイルをランダム アクセス モードで開きます。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

Do While Not EOF(1)	' ファイルの終端までループを繰り返します。

Get #1, , MyRecord	' 次のレコードを読み込みます。

Debug.Print Seek(1)	' レコード番号をイミディエイト ウィンドウに表示します。

Loop

Close #1	' ファイルを閉じます。

ランダム アクセス モード以外のモードで開いたファイルでは、Seek 関数は読み書きする次のバイト位置を返します。ファイル TESTFILE は、複数のテキスト行のあるファイルと仮定します。

Dim MyChar

Open "TESTFILE" For Input As #1	' ファイルをシーケンシャル入力モードで開きます。

Do While Not EOF(1)	' ファイルの終端までループを繰り返します。

MyChar = Input(1, #1)	' データの次の文字を読み込みます。

Debug.Print Seek(1)	' 位置をイミディエイト ウィンドウに表示します。

Loop

Close #1	' ファイルを閉じます。


Seek ステートメントの使用例

次の例は、Seek ステートメントを使って、ファイル内で読み書きする次の位置を設定します。この例では、ファイル TESTFILE は、ユーザー定義の Record 型のレコードが含まれるものと仮定します。

Type Record	' ユーザー定義型を定義します。

ID As Integer

Name As String * 20

End Type

ランダム アクセス モード (Random) で開いたファイルでは、Seek ステートメントは次に読み書きするレコード番号を設定します。

Dim MyRecord As Record, MaxSize, RecordNumber	' 変数を宣言します。

' ファイルをランダム アクセス モードで開きます。

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

MaxSize = LOF(1) \ Len(MyRecord)	' ファイル内のレコード数を取得します。

' ループを使って、すべてのレコードを逆から読み込みます。

For RecordNumber = MaxSize To 1 Step - 1

Seek #1, RecordNumber	' 位置を設定します。

Get #1, , MyRecord	' レコードを読み込みます。

Next RecordNumber

Close #1	' ファイルを閉じます。

ランダム アクセス モード以外のモードで開いたファイルでは、Seek ステートメントは読み書きする次のバイト位置を設定します。この例では、ファイル TESTFILE は、複数のテキスト行のあるファイルと仮定します。

Dim MaxSize, NextChar, MyChar

Open "TESTFILE" For Input As #1	' ファイルをシーケンシャル入力モードで開きます。

MaxSize = LOF(1)	' ファイルのサイズをバイト数で取得します。

' ループを使って、すべての文字を逆から読み込みます。

For NextChar = MaxSize To 1 Step -1

Seek #1, NextChar	' 位置を設定します。

MyChar = Input(1, #1)	' 文字を読み込みます。

Next NextChar

Close #1	' ファイルを閉じます。


Spc 関数の使用例

次の例は、Spc 関数を使って、出力ファイルとイミディエイト ウィンドウ内の出力位置を移動します。

' Spc 関数は、Print # ステートメントの中で使うことができます。

Open "TESTFILE" For Output As #1	' シーケンシャル出力モードで開きます。

Print #1, "ここから"; Spc(10); "ここまでの間に 10 個のスペースが挿入されます。"

Close #1	' ファイルを閉じます。

次のステートメントは、Print メソッドを使って、デバッグ ウィンドウに文字列を表示するときに、文字列の前に 30 個のスペースを挿入します。

Debug.Print Spc(30); "30 個のスペースです。"


Tab 関数の使用例

次の例は、Tab 関数を使って、ファイルまたはイミディエイト ウィンドウ内の出力位置を移動します。

' Tab 関数は、Print # ステートメントの中で使うことができます。

Open "TESTFILE" For Output As #1	' シーケンシャル出力モードでファイルを開きます。

' 2 番目の単語は、20 桁目から表示します。

Print #1, "皆さん"; Tab(20); "こんにちは"

' 引数を省略すると、カーソルは次の出力位置に移動します。

Print #1, "皆さん"; Tab; "こんにちは"

Close #1	' ファイルを閉じます。

Tab 関数は、Print メソッドの中でも使うことができます。次のステートメントは、文字列を 10 桁目から表示します。

Debug.Print Tab(10); "10 桁目から表示します。"


Width # ステートメントの使用例

次の例は、Width # ステートメントを使って、ファイルの出力行の幅を設定します。

Dim I

Open "TESTFILE" For Output As #1	' シーケンシャル出力モードでファイルを開きます。

VBA.Width 1, 5	' 出力行の幅を 5 に設定します。

For I = 0 To 9	' ループを 10 回繰り返します。

Print #1, Chr(48 + I);	' 1 行に 5 文字ずつ表示します。

Next I

Close #1	' ファイルを閉じます。


Write # ステートメントの使用例

次の例は、Write # ステートメントを使って、シーケンシャル ファイルにデータを書き込みます。

Open "TESTFILE" For Output As #1	' シーケンシャル出力モードでファイルを開きます。

Write #1, "Hello World", 234	' 書き込むデータは、カンマで区切ります。

Write #1,	' 空白行を挿入します。

Dim MyBool, MyDate, MyNull, MyError

' ブール値、日付、Null 値、エラー値を割り当てます。

MyBool = False : MyDate = #February 12, 1969# : MyNull = Null

MyError = CVErr(32767)

' ブール値のデータは、#TRUE# または #FALSE# として書き込みます。

' 日付リテラルは、共通日付形式で書き込みます。たとえば、共通日付形式 #1994-07-13# は、1994 年 7 月 13 日を表します。Null 値のデータは、#NULL# として書き込みます。

' エラー データは、#ERROR errorcode# として書き込みます。

Write #1, MyBool ; " は、ブール値です。"

Write #1, MyDate ; " は、日付です。"

Write #1, MyNull ; " は、Null 値です。"

Write #1, MyError ; " は、エラー値です。"

Close #1	' ファイルを閉じます。


Close ステートメント

Open ステートメントで開いたファイルへの入出力を終了して、ファイルを閉じるファイル入出力ステートメントです。

構文

Close [filenumberlist]

引数 filenumberlist には、任意のファイル番号を 1 つまたは複数指定します。この引数は省略可能です。複数のファイル番号を指定する場合は、次に示す構文を使用します。

[[#]filenumber] [, [#]filenumber] . . .

解説

引数 filenumberlist を省略すると、Open ステートメントで開いたすべてのファイルが閉じられます。

シーケンシャル出力モード (Output または Append) で開いたファイルを閉じたとき、出力バッファに残っているデータは、そのファイルに対するオペレーティング システム バッファに書き込まれます。閉じたファイルが使用していたバッファ領域はすべて解放されます。

Close ステートメントでファイルを閉じると、そのファイルに割り当てられていたファイル番号は解放されます。


EOF 関数

ランダム アクセス モード (Random) またはシーケンシャル入力モード (Input) で開いたファイルの現在位置がファイルの末尾に達している場合、ブール型 (Boolean) の値の真 (True) を含む整数型 (Integer) の値を返します。

構文

EOF(filenumber)

引数 filenumber には、任意の有効なファイル番号を表す整数型 (Integer) の数値を指定します。この引数は必ず指定します。

解説

EOF 関数は、ファイルから読み込みを行っているとき、読み込み位置がファイルの末尾に達していないかどうかを確かめるために使用します。

EOF 関数はファイルの末尾に達していない場合は、偽 (False) を返します。ランダム アクセス モード (Random) またはバイナリ モード (Binary) でファイルを開いた場合、EOF 関数は最後に実行された Get ステートメントでレコード全体が読み込めなくなるまで偽 (False) を返します。

バイナリ モードでファイルを開いた場合、Input 関数を使用して EOF 関数が真 (True) を返すまでファイルを読み込もうとすると、エラーが発生します。Input 関数を使用してバイナリ ファイルを読み込む場合は、EOF 関数の代わりに、LOF 関数および Loc 関数を使用します。EOF 関数を使用する場合は、Get ステートメントを使用します。シーケンシャル出力モード (Output) で開いたファイルの場合は、常に真 (True) を返します。


FileAttr 関数

Open ステートメントで開いたファイルのファイル モードを示す長整数型 (Long) の値を返します。

構文

FileAttr(filenumber, returntype)

FileAttr 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
filenumber	必ず指定します。整数型 (Integer) の数値を指定します。任意のファイル番号を指定します。
returntype	必ず指定します。整数型 (Integer) の数値を指定します。取得するファイル情報の種類を示す、1 または 2 を指定します。 1 ファイル モードを示す値を返します。 2 ファイル ハンドルを返します。 16 ビット システムでのみ、オペレーティング システムのファイル ハンドルを取得するために 2 を指定します。32 ビット システムでは引数 Returntype に 2 を指定することはできません。2 を指定すると、エラーが発生します。
戻り値

引数 returnType に 1 を指定すると、ファイル モードを示す次の値を返します。

ファイル モード	値
シーケンシャル入力モード (Input)	1
シーケンシャル出力モード (Output)	2
ランダム アクセス モード (Random)	4
シーケンシャル出力モード (Append)	8
バイナリ モード (Binary)	32


FreeFile 関数

使用可能なファイル番号を整数型 (Integer) の値で返すファイル入出力関数です。

構文

FreeFile[(rangenumber)]

引数 rangenumber には、ファイル番号の範囲をバリアント型 (Variant) で指定します。指定した範囲から次に使用可能なファイル番号を返します。この引数は省略可能です。

0 (既定値)	1 ～ 255 の範囲のファイル番号が返されます。

1	256 ～ 511 の範囲のファイル番号が返されます。

解説

使用可能なファイル番号を取得するために FreeFile 関数を使用します。既に使われているファイル番号を重複して使うのを防ぐことができます。


Get ステートメント

ディスク ファイルからデータを読み込み、それを変数に格納するファイル入出力ステートメントです。

構文

Get [#]filenumber, [recnumber], varname

Get ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
recnumber	省略可能です。バリアント型 (内部処理形式 Long の Variant) の値を指定します。読み込みを始めるレコード番号 (ランダム アクセス モード) や バイト位置 (バイナリ モード) を指定します。
varname	必ず指定します。読み込んだデータを格納する変数名を指定します。
解説

通常、Get ステートメントを使用して読み込んだデータは Put ステートメントを使用して書き込みます。

引数 recnumber には、ファイル内の先頭のレコード番号またはバイト位置には 1 を、2 番目のレコード番号またはバイト位置には 2 を指定します。以下同様に続きます。引数 recnumber を省略すると、最後に呼び出した Get ステートメントまたは Put ステートメント、あるいは最後に呼び出した Seek 関数が示す位置の次のレコードまたはデータが読み込まれます。次に示すように引数 recnumber を省略するときでも、各指定項目を区切るカンマ (,) は省略できません。

Get #4,,FileBuffer

ランダム アクセス モード (Random) で開いたファイルの場合は、次の規則が適用されます。

•	読み込むデータの長さが Open ステートメントの Len 節で指定したレコード長を超えない限り、Get ステートメントはレコード長の終端から次のレコードを読み込むことができます。レコードの終わりと次のレコードの先頭の間には、ファイル バッファの内容が埋め込まれます。埋め込まれるデータの量は正確に指定できないため、通常はレコード長を読み込むデータ長に合わせます。

•	可変長文字列変数を使う場合、Get ステートメントは文字列の長さを示す 2 バイトの記述子を読み込んでから、変数に格納するデータを読み込みます。Open ステートメントの Len 節では、文字列の実際の長さより 2 バイト以上大きい値を指定する必要があります。

•	数値型のバリアント型 (Variant) 変数を使う場合、Get ステートメントはバリアント型の内部処理形式 (VarType) を示す 2 バイトのデータを読み込んでから、変数に格納するデータを読み込みます。たとえば、VarType 3 (長整数型) のバリアント型を読み込む場合、Get ステートメントは 6 バイトのデータを読み込みます。このうち 2 バイトは、バリアント型が VarType 3 であることを示すデータ、4 バイトは、長整数型 (Long) のデータです。Open ステートメントの Len 節では、実際にデータを格納するために必要なバイト数より 2 バイト以上大きい値を指定する必要があります。

メモ   Get ステートメントを使用すると、バリアント型の配列をディスクから読み込むことができます。ただし、バリアント型の値が数値で、配列を含む場合、ディスクから読み込むことはできません。また、Get ステートメントを使用してオブジェクトを読み込むことはできません。

•	VarType 8 (文字列型) のバリアント型の変数を使う場合、Get ステートメントはバリアント型の内部処理形式を示す 2 バイトのデータを読み込んでから、文字列の長さを示す 2 バイトのデータを読み込み、その後文字列データを読み込みます。Open ステートメントの Len 節では、文字列の実際の長さより 4 バイト以上大きい値を指定する必要があります。

•	Get ステートメントを使用して動的配列に変数を読み込むと、記述子が読み込まれます。この記述子の長さは、2 に 8 と次元数の積を加えた値 (2 + 8 * 配列の次元数) に等しくなります。Open ステートメントの Len 節で指定するレコード長は、データと配列の記述子を読み込むために必要なバイト数の合計、またはそれ以上である必要があります。たとえば、次の配列を定義すると、配列がディスクに書き込まれる場合、118 バイトを必要とします。

Dim MyArray(1 To 5,1 To 10) As Integer

118 バイトは、記述子のための 18 バイト (2 + 8 * 2)、データのための 100 バイト (5 * 10 * 2) を合わせた値です。

•	読み込まれる変数が固定サイズの配列の場合、Get ステートメントはデータだけを読み込みます。記述子は読み込みません。

•	その他の型の変数 (可変長文字列変数とバリアント型の変数以外) を使う場合、Get ステートメントは変数データだけを読み込みます。Open ステートメントの Len 節では、読み込むデータの長さ以上の値を指定する必要があります。

•	ユーザー定義型の要素を Get ステートメントを使って読み込む場合、各要素は独立しているように読み込まれます。ただし、各要素の間には何も埋め込まれません。Put ステートメントを使用してユーザー定義型に含まれる動的配列をディスクに書き込むと、記述子が前置されます。この記述子の長さは、2 に 8 と次元数の積を加えた値 (2 + 8 * 配列の次元数) に等しくなります。Open ステートメントの Len 節で指定するレコード長は、データと配列の記述子を読み込むために必要なバイト数の合計、またはそれ以上である必要があります。

バイナリ モード (Binary) で開いたファイルの場合は、次に示す規則を除いて、ランダム アクセス ファイルの規則がすべて適用されます。

•	Open ステートメントの Len 節は無視されます。Get ステートメントはディスクからすべての変数を連続的に読み込みます。レコードとレコードの間には何も埋め込まれません。

•	ユーザー定義型の配列以外の配列の場合、Get ステートメントはデータだけを読み込みます。記述子は読み込みません。

•	ユーザー定義型の要素でない可変長文字列を使う場合、Get ステートメントはデータ長を示す 2 バイトの記述子を認識せずに文字列変数の持つ値の文字数と同じバイト数を読み込みます。たとえば、次のステートメントは、ファイル番号 1 のファイルから 10 バイトのデータを読み込みます。

VarString = String(10," ")

Get #1,,VarString


Input # ステートメント

シーケンシャル入力モード (Input) で開いたファイルからデータを読み込んで、それを変数に格納するファイル入出力ステートメントです。

構文

Input #filenumber, varlist

Input # ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
varlist	必ず指定します。ファイルから読み込んだデータを格納するための変数を、1 つまたは複数指定します。複数指定するときは、カンマ (,) で区切って指定します。配列変数、ユーザー定義型の変数、またはオブジェクト変数を指定することはできません。ただし、配列の要素またはユーザー定義型の要素は指定できます。
解説

通常、Input # ステートメントを使用して読み込んだデータは、Write # ステートメントを使用して書き込みます。Input # ステートメントは、シーケンシャル入力モード (Input) またはバイナリ モード (Binary) で開いたファイルに対してだけ使用します。

ファイルからデータを読み込む場合、通常、文字列データは文字列型 (String)、数値データは数値データ型として格納されます。これ以外のデータを読み込んだ場合、次に示すようにデータによって変数に割り当てられる型が異なります。

データ	変数に格納される値
カンマのみ、または空白行	Empty 値 (VarType 0)
#NULL#	Null 値 (VarType 1)
#TRUE# または #FALSE#	真 (True) または偽 (False)
#yyyy-mm-dd hh:mm:ss#	式によって表された日付と時刻
#ERROR errornumber#	errornumber (エラー値として格納されたバリアント型 (Variant)
入力データ内のダブル クォーテーション ("") は無視されます。

メモ   Input # ステートメントで、"1,2""X" のようなクォーテーションを含む文字列を記述しないようにしてください。このような場合、独立した 2 つの文字列として認識されます。

ファイル内のデータ項目の順番は、引数 varlist で指定した変数の順番と一致している必要があります。また、ファイル内の各データ項目のデータ型は、対応する変数のデータ型と一致していなければなりません。たとえば、変数が数値データ型で読み込むデータが数値データ型でない場合、変数には 0 が代入されます。

データを入力してきるときにファイルの末尾に達すると、入力が終了し、エラーが発生します。

メモ   Input # ステートメントを使用してファイルから変数へデータを正しく読み込むことができるように、データをファイルに書き込む場合は、Print # ステートメントではなく、必ず Write # ステートメントを使用してください。Write # ステートメントを使用すると、ファイルにデータを書き込むときに各データ項目の間に正しくカンマ (,) が挿入されます。


Input 関数

シーケンシャル入力モード (Input) またはバイナリ モード (Binary) で開いたファイルから指定した文字数の文字列を読み込み、文字列型 (String) の値を返します。

構文

Input(number, [#]filenumber)

Input 関数の構文は、次の指定項目から構成されます。

指定項目	内容
number	必ず指定します。ファイルから読み込む文字数を表す任意の数式を指定します。
filenumber	必ず指定します。任意のファイル番号を指定します。
解説

通常、Input 関数で読み込んだデータは、Print # ステートメントまたは Put ステートメントを使用してファイルに書き込みます。Input 関数は、シーケンシャル入力モードまたはバイナリ モードで開いたファイルに対してのみ使用します。

Input # ステートメントと異なり、Input 関数は読み込んだすべての文字を返します。カンマ (,)、キャリッジ リターン (Chr(13))、ライン フィード (Chr(10))、ダブル クォーテーション (")、先頭のスペースも返します。

バイナリ モードで開いたファイルに対して、Input 関数を使用して EOF 関数が真 (True) を返すまでファイルを読み込もうとすると、エラーが発生します。Input 関数を使用してバイナリ ファイルを読み込む場合は、EOF 関数の代わりに LOF 関数および Loc 関数を使用します。EOF 関数を使用する場合は、Get ステートメントを使用します。

メモ   テキスト ファイルに含まれているバイト データを読み込むには、InputB 関数を使用します。InputB 関数では、引数 number には取得する文字数ではなく、取得するバイト数を指定します。


Line Input # ステートメント

シーケンシャル入力モード (Input) で開いたファイルから行全体を読み込み、文字列型 (String) の変数に代入するファイル入出力ステートメントです。

構文

Line Input #filenumber, varname

Line Input # ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
varname	必ず指定します。バリアント型 (Variant) の変数または文字列型 (String) の変数の名前を指定します。
解説

通常、Line Input # ステートメントを使用して読み込んだデータは、Print # ステートメントを使用して書き込みます。

Line Input # ステートメントは、ファイルからキャリッジ リターン (Chr(13)) または改行コード (Chr(13)) + Chr(10)) の直前までのすべての文字を読み込みます。キャリッジ リターンと改行コードは、変数に読み込まれる文字列に追加されるのではなく、読み飛ばされます。


Loc 関数

開いたファイル内の現在の読み込み位置または書き込み位置を示す長整数型 (Long) の値を返します。

構文

Loc(filenumber)

引数 filenumber には任意のファイル番号を示す整数型 (Integer) の値を指定します。この引数は必ず指定します。

解説

各ファイル アクセス モードの戻り値は次のとおりです。

ファイル モード	戻り値
ランダム アクセス モード (Random)	ファイルに対して直前に入出力を行ったレコードの番号を返します。
シーケンシャル 入力モード (Input)	ファイル内の現在のバイト位置を 128 で割った値を返します。シーケンシャル ファイル入力モードのファイルに対する Loc 関数の戻り値です。
バイナリ モード (Binary)	直前に入出力を行ったバイト位置を返します。


Lock、Unlock ステートメント

Open ステートメントで開いたファイルの一部、または全体に対する他のプロセスからのアクセスを制御するファイル入出力ステートメントです。

構文

Lock [#]filenumber[, recordrange]
. . .

Unlock [#]filenumber[, recordrange]

Lock ステートメントおよび Unlock ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
recordrange	省略可能です。ロックまたはロックを解除するレコードの範囲を指定します。
設定値

引数 recordrange は、次の形式で指定します。

recnumber | [start] To end

指定項目	内容
recnumber	ロックまたはロックを解除するレコード番号 (ランダム アクセス モード (Random) のファイル) またはバイト位置 (バイナリ モード (Binary) のファイル) を指定します。
start	ロックまたはロックを解除する先頭のレコード番号またはバイト位置を指定します。
end	ロックまたはロックを解除する末尾のレコード番号またはバイト位置を指定します。
解説

Lock ステートメントおよび Unlock ステートメントは、複数のプロセスが同じファイルにアクセスする環境で使います。

Lock ステートメントおよび Unlock ステートメントは、必ず 2 つ 1 組で使用します。Lock ステートメントおよび Unlock ステートメントに指定する引数は一致している必要があります。

ファイルの中で先頭のレコード番号またはバイト位置は 1 になり、2 番目のレコード番号またはバイト位置は 2 になります。指定したレコードが 1 つだけの場合は、そのレコードだけがロックまたはロックを解除されます。レコードの範囲を指定して先頭のレコード (start) を省略すると、ファイルの先頭から指定範囲の最後のレコード (end) までがロックされるか、またはロックを解除されます。Lock ステートメントで recnumber を省略すると、ファイル全体がロックされます。Unlock ステートメントで recnumber を省略すると、ファイル全体のロックが解除されます。

シーケンシャル入力モード (Input) またはシーケンシャル出力モード (Output または Append) で開いたファイルでは、引数 start および引数 end の範囲指定にかかわらず、ファイル全体が Lock ステートメントと Unlock ステートメントの対象になります。

注意   ファイルを閉じたりプログラムを終了する前に、Unlock ステートメントを使って必ずすべてのロックを解除してください。ロックを解除しないと、予測できないエラーの原因になります。


LOF 関数

Open ステートメントを使用して開いたファイルの長さをバイト単位で示す長整数型 (Long) の値を返します。

構文

LOF(filenumber)

引数 filenumber には有効なファイル番号を整数型 (Integer) で指定します。この引数は必ず指定します。

メモ   開いていないファイルの長さを取得するには、FileLen 関数を使用します。


Open ステートメント

ファイルを開いて、ファイルへ入出力できるようにします。

構文

Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

Open ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
pathname	必ず指定します。文字列式にはファイル名を指定します。フォルダ名、またはドライブ名も含めて指定できます。
mode	必ず指定します。ファイル モードを示す、次のいずれかのキーワードを指定します。 1 Append、Binary、Input、Output、または Random。 2 省略すると、ファイルはランダム アクセス モードで開かれます。
Access	省略可能です。開くファイルに対して行う処理を示す、次のいずれかのキーワードを指定します。 Read、Write、または Read Write。
lock	省略可能です。開くファイルに対する、他のプロセスからのアクセスを制御する、次のいずれかのキーワードを指定します。 Shared、Lock Read、Lock Write、または Lock Read Write。
filenumber	必ず指定します。1 ～ 511 の範囲で任意のファイル番号を指定します。FreeFile 関数を使用して次に使用可能なファイル番号を取得してください。
reclength	省略可能です。32,767 バイト以下の数値を指定します。ランダム アクセス ファイルの場合は、レコード長を表します。シーケンシャル ファイルの場合は、バッファの容量を表します。
解説

入出力処理を行うときには、その対象となるファイルを開く必要があります。Open ステートメントはファイルに入出力のためのバッファを割り当て、バッファに対するアクセス モードを決定します。

引数 pathname に指定したファイルが存在しない場合、ファイルを開くときに追加モード (Append)、バイナリ モード (Binary)、出力モード (Output)、またはランダム アクセス モード (Random) のいずれかのモードが指定されている場合、新規に作成されて開きます。

引数 access は、開いたファイル上で行う操作を指定するキーワードです。ファイルが別のプロセスのために既に開かれていて、指定したアクセスが実行できないとき、Open ステートメントはファイルを開くことができず、エラーが発生します。

Len 節および引数 reclen は、引数 mode に Binary を指定した場合は無視されます。シーケンシャル ファイルの場合、シーケンシャル ファイル内のレコード サイズは一定でないため、引数 reclen の値はそれぞれのレコードのサイズと一致している必要はありません。

重要   バイナリ モード、入力モード、およびランダム アクセス モードでは、ファイルを開いたまま、別のファイル番号で同時に開くことができます。一方、追加モードと出力モードでは、いったんファイルを閉じないと、別のファイル番号で再び開くことはできません。


Print # ステートメント

シーケンシャル出力モード (Output または Append) で開いたファイルにデータを書き込むファイル入出力ステートメントです。

構文

Print #filenumber, [outputlist]

Print # ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
outputlist	省略可能です。出力する式や数式または文字列式を指定します。
設定値

引数 outputlist は、次の形式で指定します。

[{Spc(n) | Tab[(n)]}] [expression] [charpos]

指定項目	内容
Spc(n)	出力するデータに n 個のスペースを挿入します。
Tab(n)	expression の出力位置を n 番目の桁位置に移動します。Tab 関数の引数 n に何も指定しない場合は、出力位置は次の印字領域の先頭になります。
expression	出力する数式または文字列式を指定します。
charpos	次の文字の出力位置を指定します。セミコロン (;) を指定すると、次の文字は最後の文字の直後から出力されます。Tab(n) 関数で出力位置の桁番号を指定できます。Tab 関数の引数 n に何も指定しないと、出力位置は次の印字領域の先頭になります。引数 charpos を省略すると、次の文字は次の行の先頭から出力されます。
解説

通常、Print # ステートメントを使用して書き込んだデータは、Line Input # ステートメントまたは Input 関数を使用して読み込みます。

引数 outputlist を省略し引数 filenumber の後ろに区切り記号だけを指定すると、ファイルに空白行を出力します。複数の式は、スペースまたはセミコロン (;) で区切ることができます。1 つのスペースは、1 つのセミコロン (;) と同じ働きをします。

ブール型 (Boolean) のデータは、True または False という文字列で出力されます。キーワード True および False は国別情報に応じて翻訳されることはありません。

日付型 (Date) のデータは、コントロール パネルで設定した短い形式で書き込まれます。日付や時間の構成要素がないとき、またはゼロのときは、指定されている部分だけのデータがファイルに書き込みます。

引数 outputlist のデータが Empty 値の場合は、ファイルには何も書き込まれません。ただし引数 outputlist のデータが Null 値の場合は、Null という文字列がファイルに書き込まれます。

エラー データは、Error errorcode という形式で出力されます。キーワード Error は国別情報に応じて翻訳されることはありません。

Print # ステートメントを使用して書き込んだデータは、すべて国別情報に対応しています。書き込まれたデータは、適切な小数点記号を使用して書式設定されます。

Print # ステートメントは、データのイメージをファイルに書き込むので、適切に出力するためにはデータを区切る必要があります。Tab 関数の引数 n に何も指定しないと、出力位置は次の印字領域の先頭になります。Print # ステートメントは、データ項目間のスペースもファイルに書き込みます。

メモ   Input # ステートメントを使って、ファイルからデータを正しく読み込むことができるように、データをファイルへ書き込むには、Print # ステートメントではなく、必ず Write # ステートメントを使用してください。Write # ステートメントを使うと、適切に各データ項目が区切られ、Input # ステートメントを使って確実にそのファイルを再び読み込むことができます。Write # ステートメントを使って書き込んだデータは、オペレーティング システムの国別情報の設定により正しく読み込むことができます。


Put ステートメント

変数の内容をディスク上のファイルに書き込むファイル入出力ステートメントです。

構文

Put [#]filenumber, [recnumber], varname

Put ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
recnumber	省略可能です。書き込みを行うレコード番号 (ランダム アクセス ファイル) または バイト位置 (バイナリ ファイル) を指定します。
varname	必ず指定します。ディスクに書き込むデータが格納されている変数の名前を指定します。
解説

通常、Put ステートメントを使用して書き込んだデータは、Get ステートメントで読み込みます。

引数 recnumber には、ファイル内の先頭のレコード番号またはバイト位置には 1 を、2 番目のレコード番号またはバイト位置には 2 を指定します。以下同様に続きます。引数 recnumber を省略すると、最後に呼び出した Get ステートメントまたは Put ステートメント、あるいは最後に呼び出した Seek 関数が示す位置の次のレコードまたはバイトが読み込まれます。次に示すように引数 recnumber を省略する場合でも、各指定項目を区切るカンマは省略できません。

Put #4,,FileBuffer

ランダム アクセス モード (Random) で開いたファイルの場合、次の規則が適用されます。

•	書き込むデータの長さが Open ステートメントの Len 節で指定した長さを超えない限り、Put ステートメントは次のレコードを直前のレコードの終端から書き込みます。レコードの終端と次のレコードの先頭との間には、ファイル バッファの内容が埋め込まれます。埋め込まれるデータの量は指定できないので、通常はレコード長を書き込むデータ長に合わせます。書き込むデータの長さが Open ステートメントの Len 節で指定した長さを超えると、エラーが発生します。

•	可変長文字列変数を使う場合、Put ステートメントは、文字列の長さを示す 2 バイトの記述子を書き込み、次に変数内の文字列データを書き込みます。Open ステートメントの Len 節では、文字列の実際の長さより 2 バイト以上大きい値を指定する必要があります。

•	数値型のバリアント型 (Variant) の変数を使う場合、Put ステートメントはバリアント型の内部処理形式 (VarType) を表す 2 バイトのデータを書き込み、次に変数のデータを書き込みます。たとえば、VarType 3 (長整数型) のバリアント型の変数を書き込む場合、Put ステートメントは 6 バイトのデータを書き込みます。このうち 2 バイトは、バリアント型が VarType 3 であることを表すデータ、4 バイトは、長整数型のデータです。Open ステートメントの Len 節では、実際にデータを格納するために必要なバイト数より 2 バイト以上大きい値を指定する必要があります。

メモ   Put ステートメントを使用すると、ディスクにバリアント型の配列を書き込むことができます。ただし、バリアント型の値が数値で配列を含む場合、ディスクに書き込むことはできません。また、Put ステートメントを使用してオブジェクトを書き込むことはできません。

•	VarType 8 (文字列型) のバリアント型の変数を使う場合、Put ステートメントは、バリアント型の内部処理形式 (VarType) を示す 2 バイトのデータを書き込んでから、文字列の長さを示す 2 バイトのデータを書き込み、その後、文字列データを書き込みます。Open ステートメントの Len 節で指定するレコード長には、文字列の実際の長さより 4 バイト以上大きい値を指定する必要があります。

•	Put ステートメントを使用して動的配列に変数を書き込むと、記述子が書き込まれます。この記述子の長さは、2 に 8 と次元数の積を加えた値 (2 + 8 * 配列の次元数) に等しくなります。Open ステートメントの Len 節で指定するレコード長は、データと配列の記述子を書き込むために必要なバイト数の合計、またはそれ以上である必要があります。たとえば、次の配列を定義すると、配列がディスクに書き込まれる場合、118 バイトを必要とします。

Dim MyArray(1 To 5,1 To 10) As Integer

•	118 バイトは、記述子のための 18 バイト (2 + 8 * 2)、データのための 100 バイト (5 * 10 * 2) を合わせた値です。

•	書き込まれる変数が固定サイズの配列の場合、Put ステートメントは、データだけを書き込みます。記述子はディスクに書き込みません。

•	その他の型の変数 (可変長文字列変数とバリアント型の変数以外) を使う場合、Put ステートメントは、変数のデータだけを書き込みます。Open ステートメントの Len 節では、書き込むデータの長さ以上の値を指定する必要があります。

•	ユーザー定義型の要素を Put ステートメントを使って書き込む場合、各要素は独立しているかのように書き込まれます。ただし、各要素の間には何も埋め込まれません。Put ステートメントを使用して、ユーザー定義型に含まれる動的配列をディスクに書き込むと、記述子が前置されます。この記述子の長さは、2 に 8 と次元数の積を加えた値 (2+8 * 配列の次元数) に等しくなります。Open ステートメントの Len 節で指定するレコード長は、配列および記述子を書き込むために必要なバイト数の合計、またはそれ以上の値である必要があります。

バイナリ モード (Binary) で開いたファイルの場合は、次に示す規則を除いて、ランダム アクセス ファイルの規則がすべて適用されます。

•	バイナリ モードでは、Open ステートメントの Len 節は無視されます。Put ステートメントは、ディスクにすべての変数のデータを連続的に書き込みます。レコードとレコードの間には何も埋め込まれません。

•	ユーザー定義型の配列以外の配列の場合、Put ステートメントは、データだけを書き込みます。記述子は書き込みません。

•	ユーザー定義型の要素でない可変長文字列を使う場合、Put ステートメントは、データ長を示す 2 バイトの記述子を書き込まずに、文字列変数の持つ値の文字数と同じバイト数を書き込みます。たとえば、次のステートメントは、ファイル番号 1 のファイルに 10 バイトのデータを書き込みます。

VarString$ = String$(10," ")

Put #1,,VarString$


Reset ステートメント

Open ステートメントで開いたすべてのファイルを閉じるファイル入出力ステートメントです。

構文

Reset

解説

Reset ステートメントは、Open ステートメントで開いたすべてのファイルを閉じ、ファイル バッファに残っているすべてのデータをディスクに書き込みます。


Seek 関数

Open ステートメントを使用して開いたファイルの現在の読み込み位置または書き込み位置を示す長整数型 (Long) の値を返します。

構文

Seek(filenumber)

引数 filenumber には有効なファイル番号 を整数型 (Integer) で指定します。この引数は必ず指定します。

解説

Seek 関数は、1 ～ 2,147,483,647 (= 2^31-1) の範囲の値を返します。

各ファイル アクセス モードの戻り値は、次のとおりです。

ファイル モード	戻り値
ランダム アクセス モード (Random)	読み込みまたは書き込みが行われる次のレコードの番号。
バイナリ モード (Binary) シーケンシャル出力モード (Output)  シーケンシャル出力モード (Append)  シーケンシャル入力モード (Input)	次の操作を開始するバイト位置。ファイル内の先頭バイトは 1、次のバイトは 2 になります。


Seek ステートメント

Open ステートメントで開いたファイルの、次に読み込みまたは書き込みを行う位置を設定するファイル入出力ステートメントです。

構文

Seek [#]filenumber, position

Seek ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
position	必ず指定します。次に読み込みまたは書き込みを行う位置を表す数式を指定します。引数 position に指定できる値の範囲は、1 ～ 2,147,483,647 (= 2^31-1) です。
解説

Get ステートメントおよび Put ステートメントで指定したレコード番号は、Seek ステートメントで設定した位置よりも優先されます。

ファイルの末尾より後ろの位置を指定して Seek ステートメントを実行したあと、そのファイルに対して書き込みを行うと、そのファイルの末尾から書き込まれます。引数 position に負の数または 0 を設定して Seek ステートメントを実行すると、エラーが発生します。


Spc 関数

Print # ステートメントまたは Print メソッドと共に使用し、指定した数のスペースを挿入するファイル入出力関数です。

構文

Spc(n)

引数 n には、Spc(n) の次に指定したデータ数式、または文字列式に挿入するスペースの数を指定します。この引数は必ず指定します。

解説

引数 n に出力行の桁数未満の値を指定すると、次の出力位置は指定した数のスペースの直後になります。引数 n に出力行の桁数を超える値を指定すると、Spc 関数は次の出力位置を次の式で計算します。

currentprintposition + (n Mod width)

たとえば、現在の出力位置 (currentprintposition) を 24、出力行の桁数 (width) を 80、Spc(90) と指定すると、次の出力は 34 の位置 (現在の出力位置 + 90/80 の剰余) から始まります。現在の出力位置と出力行の桁数との差が n (または、n Mod width) 未満の場合、Spc 関数は次の行の先頭に進み、n - (width - currentprintposition) の式に従ってスペースの数を計算し、次の出力位置を決めます。

メモ   幅の広い文字を表示できるように、十分な桁数があることを確認してください。

Print メソッドでプロポーショナル フォントを使うとき、Spc 関数を使用して表示されるスペースの幅は、選択したフォントのポイント サイズが持つすべての文字の幅を平均したものになります。表示される文字数と、1 文字の占める固定幅の桁数は互いに無関係です。たとえばプロポーショナル フォントの場合、大文字の W は固定幅のフォントの 1 桁の幅よりも広く、小文字の i は 1 桁の幅よりも狭くなります。


Tab 関数

Print # ステートメントまたは Print メソッドと共に使用し、次の文字の出力位置を移動するファイル入出力関数です。

構文

Tab[(n)]

引数 n にはリスト内の次の式を表示または印刷する前に移動する桁数を指定します。この引数は省略可能です。引数 n を省略すると、次の印字領域の先頭にカーソルを移動します。このため、国別情報の設定で小数点記号としてカンマ (,) が指定されている場合に、Tab 関数を使用できます。

解説

出力行上の出力位置が引数 n を超える場合、Tab 関数は次の出力行の n 桁目に進みます。引数 n に 1 未満の値を指定すると、出力位置は桁位置 1 に移動します。引数 n が出力行の桁数を超える場合、Tab 関数は次の式を使って次の出力位置を決めます。

n Mod width

たとえば、出力行の桁数 (width) を 80、Tab(90) と指定すると、次の出力は 10 の位置 (90/80 の剰余) から始まります。指定した桁位置 n が現在の出力位置より前の場合、次の行に改行され、計算した桁位置に出力位置が移動します。計算された出力位置が現在の出力位置より後ろのときは、同じ行上の計算された位置に出力位置が移動します。

出力行上の出力位置は左端を 1 と数えます。Print # ステートメントを使ってファイルを出力する場合、出力位置の右端は出力ファイルの現在の 1 行の桁数に相当します。出力ファイルの桁数は、Width # ステートメントを使って設定します。

メモ   幅の広い文字を表示できるだけの十分な桁数があることを確認してください。

Tab 関数を Print メソッドの中で使う場合、文字の幅がすべて均一な "固定幅のフォント" と、文字によって幅が異なる "プロポーショナル フォント" では、1 行に表示される文字数 (桁数) が異なることに注意してください。表示画面は均等な固定幅の桁に分けられています。それぞれの幅は、選択したフォントのポイント サイズにおけるすべての文字の幅を平均したものになります。表示される文字数と文字の占める固定幅の桁数は互いに無関係です。たとえばプロポーショナル フォントの場合、大文字の W は固定幅のフォントの 1 桁の幅よりも広く、小文字の i は 1 桁の幅よりも狭くなります。


Width # ステートメント

Open ステートメントで開いたファイルに出力する行の幅 (桁数) を割り当てるファイル入出力ステートメントです。

構文

Width #filenumber, width

Width # ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
width	必ず指定します。1 行に表示される文字数を表す 0 ～ 255 の範囲の数式を指定します。引数 width に 0 を指定すると、行の長さは制限されません。行幅の既定値は 0 です。


Write # ステートメント

シーケンシャル出力モード (Output または Append) で開いたファイルにデータを書き込むファイル入出力ステートメントです。

構文

Write #filenumber, [outputlist]

Write # ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
filenumber	必ず指定します。任意のファイル番号を指定します。
outputlist	省略可能です。ファイルに出力するデータをカンマで区切られた数式または文字列式で指定します。
解説

Write # ステートメントを使用して書き込んだデータは、Input # ステートメントで読み込みます。

引数 outputlist を省略して引数 filenumber の後にカンマ (,) を指定すると、空白行がファイルに出力されます。引数 outputlist に複数のデータを指定するときは、スペース、セミコロン (;)、またはカンマ (,) で区切って指定します。スペースとセミコロンは同じ働きをします。

Write # ステートメントを使ってファイルに書き込んだデータは、国別情報の設定にかかわらず、Input # ステートメントで正しく解釈して読み込むことができます。

•	数値データ型のデータは、小数点記号としてピリオド (.) が常に使用されます。

•	ブール型 (Boolean) のデータは、文字列 #TRUE# または #FALSE# がファイルに書き込まれます。キーワード True およびキーワード False は、国別情報の設定にかかわらず変換されません。

•	日付型 (Date) のデータは、共通日付形式を使用して書き込まれます。日付や時間の構成要素がない場合やゼロの場合は、指定されている部分だけのデータがファイルに書き込まれます。

•	引数 outputlist のデータが Empty 値の場合、そのデータ項目については何も書き込まれません。引数 outputlist のデータが Null 値の場合は、文字列 #NULL# がファイルに書き込まれます。

•	引数 outputlist のデータが Null 値の場合は、文字列 #NULL# がファイルに書き込まれます。

•	エラー データは、文字列 #ERROR errorcode# という形式で出力されます。キーワード Error は、国別情報の設定に応じて変換されません。

Write # ステートメントは、Print # ステートメントと異なり、ファイルにデータを書き込むときにデータ項目の間にカンマ (,) を挿入します。文字列は、ダブル クォーテーション ("") で囲んで出力します。引数 outputlist には明示的に区切り文字を指定する必要はありません。Write # ステートメントはファイルに引数 outputlist の最後の文字を出力したあと、改行文字を挿入します。

メモ   Write #  ステートメントで、"1,2""X" のようなクォーテーションを含む文字列を記述しないようにしてください。このような場合、独立した 2 つの文字列として認識されます。


DDB 関数の使用例

次の例は、DDB 関数を使って、指定した期の資産の減価償却費を返します。資産購入時点の価格 (InitCost)、資産の耐用年数を経た後での残存価額 (SalvageVal)、資産の耐用年数 (LifeTime)、減価償却費を計算する年 (Depr) を指定します。

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, Depr

Const YRMOS = 12	' 1 年の月数を設定します。

Fmt = "###,##0.00"

InitCost = InputBox("資産購入時の価格を入力してください。")

SalvageVal = InputBox("耐用年数を経た後での資産の価格を入力してください。")

MonthLife = InputBox("資産の耐用期間を月数で入力してください。")

Do While MonthLife < YRMOS	' 期間が 1 年以上かどうかを確認します。

MsgBox "耐用期間は 1 年以上です。"

MonthLife = InputBox("資産の耐用期間を月数で入力してください。")

Loop

LifeTime = MonthLife / YRMOS	' 月数を年数に変換します。

If LifeTime <> Int(MonthLife / YRMOS) Then

LifeTime = Int(LifeTime + 1)	' 近似の年に切り上げます。

End If

DepYear = CInt(InputBox("減価償却費を計算する年を入力してください。"))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "1 から" & LifeTime &"の範囲の数値を入力してください。"

DepYear = InputBox("減価償却費を計算する年を入力してください。")

Loop

Depr = DDB(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox DepYear & " 年目の減価償却費は " & Format(Depr, Fmt) & " です。"


FV 関数の使用例

次の例は、将来の貯蓄総額を FV 関数で計算します。年利 (APR / 12)、貯蓄回数 (TotPmts)、毎月の貯蓄額 (Payment)、現在の貯蓄額 (PVal)、貯蓄期日 (PayType) を指定します。Payment は出金を表すので、負の数を指定しています。

Dim Fmt, Payment, APR, TotPmts, PayType, PVal, FVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 支払いの時期を設定します。

Fmt = "###,###,##0.00"	' 金額の形式を定義します。

Payment = InputBox("毎月の貯蓄額を入力してください。")

APR = InputBox("年利率 (%) を入力してください。")

If APR > 1 Then APR = APR / 100	' 正しい形式に変換します。

TotPmts = InputBox("貯蓄回数を月数で指定してください。")

PayType = MsgBox("毎月末に支払いを行いますか?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

PVal = InputBox("現在の貯蓄額を入力してください。")

FVal = FV(APR / 12, TotPmts, -Payment, -PVal, PayType)

MsgBox "将来の貯蓄総額は " & Format(FVal, Fmt) & " です。"


IPmt 関数の使用例

次の例は、IPmt 関数を使って、毎月の支払い額が同額の場合の金利を計算します。利率 (APR / 12)、金利支払い額を求める期 (Period)、支払い回数 (TotPmts)、現在価値または元金 (PVal)、将来価値 (FVal)、支払い期日 (PayType) を指定します。

Dim FVal, Fmt, PVal, APR, TotPmts, PayType, Period, IntPmt, TotInt, Msg

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 支払い期日を設定します。

FVal = 0	' 通常、ローンの場合は 0 を指定します。

Fmt = "###,###,##0.00"	' 金額の形式を定義します。

PVal = InputBox("借入金額を入力してください。")

APR = InputBox("ローンの年利率を入力してください。")

If APR > 1 Then APR = APR / 100	' 正しい形式に変換します。

TotPmts = InputBox("支払い回数を入力してください。")

PayType = MsgBox("毎月末に支払いを行いますか?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

For Period = 1 To TotPmts	' 利息の合計。

IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

TotInt = TotInt + IntPmt

Next Period

Msg = "毎月の支払い額は " & Format(TotInt, Fmt)

Msg = Msg & " です。"

MsgBox Msg	' 結果を表示します。


IRR 関数の使用例

次の例は、IRR 関数を使って、配列 Values() に指定した 5 つのキャッシュ フローに対する内部利益率を計算します。最初の配列要素は、事業の操業資金を表す負のキャッシュ フローです。他の 4 つの配列要素は、以後 4 年間の収益を表す正のキャッシュ フローです。Guess には、内部利益率の推定値を指定します。

Dim Guess, Fmt, RetRate, Msg

Static Values(5) As Double	' 配列を定義します。

Guess = .1	' 推定値を 10% と指定します。

Fmt = "#0.00"	' パーセンテージの形式を定義します。

Values(0) = -70000	' 操業資金を指定します。

' 以後 4 年間の収益を表す正のキャッシュ フローです。

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

RetRate = IRR(Values(), Guess) * 100	' 内部利益率を計算します。

Msg = "指定した 5 つのｷｬｯｼｭ ﾌﾛｰに対する内部利益率は"

Msg = Msg & Format(RetRate, Fmt) & " % です。"

MsgBox Msg	' 内部利益率を表示します。


MIRR 関数の使用例

次の例は、MIRR 関数を使って、配列 Values() に指定されたキャッシュ フローに対する修正内部利益率を計算します。LoanAPR は借入金に対する利率を表し、InvAPR は再投資に対する利率を表します。

Dim LoanAPR, InvAPR, Fmt, RetRate, Msg

Static Values(5) As Double	' 配列を定義します。

LoanAPR = .1	' 借入金に対する利率を指定します。

InvAPR = .12	' 再投資に対する利率を指定します。

Fmt = "#0.00"	' 金額の形式を定義します。

Values(0) = -70000	' 操業資金を指定します。

' 以後 4 年間の収益を表す正のキャッシュ フローです。

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

RetRate = MIRR(Values(), LoanAPR, InvAPR)	' 内部利益率を計算します。

Msg = "指定された 5 つのｷｬｯｼｭ ﾌﾛｰに対する修正内部利益率は "

Msg = Msg & Format(Abs(RetRate) * 100, Fmt) & " % です。"

MsgBox Msg	' 修正内部利益率を表示します。


NPer 関数の使用例

次の例は、NPer 関数を使って、支払い回数を計算します。ローンの総額 (PVal)、利率 (APR / 12)、毎月の支払い額 (Payment)、将来価値 (FVal)、支払い期日 (PayType) を指定します。

Dim FVal, PVal, APR, Payment, PayType, TotPmts

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 支払い期日を指定します。

FVal = 0	' 通常、ローンの場合は 0 を指定します。

PVal = InputBox("借入金額を入力してください。")

APR = InputBox("ローンの年利率 (%) を入力してください。")

If APR > 1 Then APR = APR / 100	' 正しい形式に変換します。

Payment = InputBox("毎月の支払い額を入力してください。")

PayType = MsgBox("毎月末に支払いを行いますか?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

TotPmts = NPer(APR / 12, -Payment, PVal, FVal, PayType)

If Int(TotPmts) <> TotPmts Then TotPmts = Int(TotPmts) + 1

MsgBox "支払い回数は " & TotPmts & " 回です。"


NPV 関数の使用例

次の例は、NPV 関数を使って、配列 Values() で指定したキャッシュ フローに対する正味現在価値を計算します。RetRate は、固定内部利益率を表します。

Dim Fmt, Guess, RetRate, NetPVal, Msg

Static Values(5) As Double	' 配列を定義します。

Fmt = "###,##0.00"	' 金額の形式を定義します。

Guess = .1	' 推定値を 10% と指定します。

RetRate = .0625	' 固定内部利益率を指定します。

Values(0) = -70000	' 操業資金を指定します。

' 以後 4 年間の収益を表す正のキャッシュ フローです。

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

NetPVal = NPV(RetRate, Values())	' 正味現在価値を計算します。

Msg = "指定したｷｬｯｼｭ ﾌﾛｰの正味現在価値は "

Msg = Msg & Format(NetPVal, Fmt) & " です。"

MsgBox Msg	' 正味現在価値を表示します。


Pmt 関数の使用例

次の例は、Pmt 関数を使って、一定期間のローンに対する毎月の支払い額を計算します。利率 (APR / 12)、支払い回数 (TotPmts)、現在価値または元金 (PVal)、将来価値 (FVal)、支払い期日 (PayType) を指定します。

Dim Fmt, FVal, PVal, APR, TotPmts, PayType, Payment

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 支払い期日を指定します。

Fmt = "###,###,##0.00"	' 金額の形式を定義します。

FVal = 0	' 通常、ローンの場合は 0 を指定します。

PVal = InputBox("借入金額を入力してください。")

APR = InputBox("ローンの年利率を入力してください。")

If APR > 1 Then APR = APR / 100	' 正しい形式に変換します。

TotPmts = InputBox("支払い回数を入力してください。")

PayType = MsgBox("毎月末に支払いを行いますか?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Pmt(APR / 12, TotPmts, -PVal, FVal, PayType)

MsgBox "毎月の支払い額は " & Format(Payment, Fmt) & " です。"


PPmt 関数の使用例

次の例は、PPmt 関数を使って、毎月の支払いが同額である場合の特定の期間における元金を計算します。利率 (APR / 12)、支払い元金を求める期 (Period)、支払い回数 (TotPmts)、現在価値または元金 (PVall)、将来価値 (FVal)、支払い期日 (PayType) を指定します。

Dim NL, TB, Fmt, FVal, PVal, APR, TotPmts, PayType, Payment, Msg, MakeChart, Period, P, I

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 支払い期日を指定します。

NL = Chr(13) & Chr(10)	' 改行します。

TB = Chr(9)	' タブを設定します。

Fmt = "###,###,##0.00"	' 金額の形式を定義します。

FVal = 0	' 通常、ローンの場合は 0 を指定します。

PVal = InputBox("借入金額を入力してください。")

APR = InputBox("ローンの年利率 (%) を入力してください。")

If APR > 1 Then APR = APR / 100	' 正しい形式に変換します。

TotPmts = InputBox("支払い回数を入力してください。")

PayType = MsgBox("毎月末に支払いを行いますか?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))

Msg = "毎月の支払い額は " & Format(Payment, Fmt) & " です。"

Msg = Msg & "元金と利息の"

Msg = Msg & "内訳を計算しますか?"

MakeChart = MsgBox(Msg, vbYesNo)	' チャートを表示するかどうかを指定します。

If MakeChart <> vbNo Then

If TotPmts > 12 Then MsgBox "最初の年だけを表示します。"

Msg = "元金と利息の内訳 (支払金額:元金:利息)" & NL

For Period = 1 To TotPmts

If Period > 12 Then Exit For	' 最初の 12 回分だけを表示します。

P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

P = (Int((P + .005) * 100) / 100)	' 元金の値を丸めます。

I = Payment - P

I = (Int((I + .005) * 100) / 100)	' 利息の値を丸めます。

Msg = Msg & Period & TB & Format(Payment, Fmt)

Msg = Msg & TB & Format(P, Fmt) & TB & Format(I, Fmt) & NL

Next Period

MsgBox Msg	' 表が表示されます。

End If


PV 関数の使用例

次の例は、PV 関数を使って、以後 20 年間に渡って、毎月 5 万円の配当が支払われる証券 (100 万円) の現在価値を計算します。年率 (APR)、支払い回数 (TotPmts)、支払い金額 (YrIncome)、投資の将来価値 (FVal)、支払い期日 (PayType) を指定します。YrIncome は出金を表すので、負の数を指定しています。

Dim Fmt, APR, TotPmts, YrIncome, FVal, PayType, PVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 支払い期日を設定します。

Fmt = "###,##0.00"	' 金額の形式を定義します。

APR = .0825	' 年利率を指定します。

TotPmts = 20	' 支払い回数を指定します。

YrIncome = 50000	' 毎年の支払い金額を指定します。

FVal = 1000000	' 将来価値を指定します。

PayType = BEGINPERIOD	' 各期の期首に支払いが行われます。

PVal = PV(APR, TotPmts, -YrIncome, FVal, PayType)

MsgBox "現在価値は " & Format(PVal, Fmt) & " です。"


Rate 関数の使用例

次の例は、Rate 関数を使って、実際の利率を計算します。支払い回数 (TotPmts)、支払い額 (Payment)、現在価値または元金 (PVal)、将来価値 (FVal)、支払い期日 (PayType)、利率の推定値 (Guess) を指定します。

Dim Fmt, FVal, Guess, PVal, Payment, TotPmts, PayType, APR

Const ENDPERIOD = 0, BEGINPERIOD = 1	' 支払い期日を設定します。

Fmt = "##0.00"	' パーセンテージの形式を定義します。

FVal = 0	' 通常、ローンの場合は 0 を指定します。

Guess = .1	' 推定値を 10% に指定します。

PVal = InputBox("借入金額を入力してください。")

Payment = InputBox("毎月の支払い額を入力してください。")

TotPmts = InputBox("支払い回数を入力してください。")

PayType = MsgBox("毎月末に支払いを行いますか?", _

vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

APR = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100

MsgBox "利率は " & Format(CInt(APR), Fmt) & " % です。"


SLN 関数の使用例

次の例は、資産 1 期当たりの減価償却費を、定額法を使って SLN 関数で計算します。資産購入時の価格 (InitCost)、耐用年数を経た後での資産の価格 (SalvageVal)、資産の耐用年数 (LifeTime) を指定します。

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, PDepr

Const YEARMONTHS = 12	' 1 年の月数を設定します。

Fmt = "###,##0.00"	' 金額の形式を定義します。

InitCost = InputBox("資産購入時の価格を入力してください。")

SalvageVal = InputBox("耐用期間を経た後の資産の価格を入力してください。")

MonthLife = InputBox("資産の耐用期間を月数で入力してください。")

Do While MonthLife < YEARMONTHS	' 期間が 1 年以上かどうかを確認します。

MsgBox "資産の耐用期間は 1 年以上です。"

MonthLife = InputBox("資産の耐用期間を月数で入力してください。")

Loop

LifeTime = MonthLife / YEARMONTHS	' 月数を年数に変換します。

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' 年数を切り上げます。

End If

PDepr = SLN(InitCost, SalvageVal, LifeTime)

MsgBox "減価償却費は " & Format(PDepr, Fmt) & " /年です。"


SYD 関数の使用例

次の例は、SYD 関数を使って、特定の期における資産の減価償却費を返します。資産購入時の価格 (InitCost)、耐用年数を経た後での資産の価格 (SalvageVal)、資産の耐用年数 (LifeTime)、減価償却費を計算する期間の年数 (PDepr) を指定します。

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, PDepr

Const YEARMONTHS = 12	' 1 年の月数を設定します。

Fmt = "###,##0.00"	' 金額の形式を定義します。

InitCost = InputBox("資産購入時の価格を入力してください。")

SalvageVal = InputBox("耐用期間を経た後の資産の価格を入力してください。")

MonthLife = InputBox("資産の耐用期間を月数で入力してください。")

Do While MonthLife < YEARMONTHS	' 期間が 1 年以上かどうかを確認します。

MsgBox "資産の耐用期間は 1 年以上です。"

MonthLife = InputBox("資産の耐用期間を月数で入力してください。")

Loop

LifeTime = MonthLife / YEARMONTHS	' 月数を年数に変換します。

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' 年数を切り上げます。

End If

DepYear = CInt(InputBox("減価償却費を計算する期間を指定してください。"))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "1 から" & LifeTime & "の範囲の値を入力してください。"

DepYear = CInt(InputBox("減価償却費を計算する期間を指定してください。"))

Loop

PDepr = SYD(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox DepYear & "期目の減価償却費は " & Format(PDepr, Fmt) & " です。"


DDB 関数

倍精度浮動小数点数型 (Double) の値を返します。倍率法などの指定した方法を使って特定の期における資産の減価償却費を返します。

構文

DDB(cost, salvage, life, period[, factor])

DDB 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
cost	必ず指定します。資産を購入した時点での価格を示す倍精度浮動小数点数型 (Double) の値を指定します。
salvage	必ず指定します。耐用年数が終了した時点での資産の価格を示す倍精度浮動小数点数型 (Double) の値を指定します。
life	必ず指定します。資産の耐用年数を示す倍精度浮動小数点数型 (Double) の値を指定します。
period	必ず指定します。減価償却費を求める期を示す倍精度浮動小数点数型 (Double) の値を指定します。
factor	省略可能です。減価償却率を示すバリアント型 (Variant) の値を指定します。名前付き引数 factor を省略すると、2 が指定されたものとみなされ、倍率逓減法で計算されます。
解説

倍率法では、指定した償却率で減価償却費が計算されます。減価償却費は最初の期が最も高く、その後の期では減少していきます。

名前付き引数 life および period は、同じ単位で指定する必要があります。たとえば、名前付き引数 life を月単位で指定した場合は、名前付き引数 period も月単位で指定します。すべての引数には必ず正の値を指定してください。

DDB 関数を使って指定した期に対する減価償却費を求めるには、次の式を使います。

指定した期 (period) の減価償却費 = ((cost - salvage) * factor) / life


FV 関数

倍精度浮動小数点数型 (Double) の値を返します。定額の支払いを定期的に行い、利率が一定であると仮定して、投資の将来価値を返します。

構文

FV(rate, nper, pmt[, pv[, type]])

FV 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
rate	必ず指定します。投資期間を通じて一定の利率を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、年利 (APR) 10% の車のローンを月払いで返済する場合、各期間の利率は 0.1/12 または 0.0083 になります。
nper	必ず指定します。投資期間全体での支払い回数の合計を示す整数型 (Integer) の値を指定します。たとえば、4 年の車のローンを月払いで返済する場合、支払い回数は 48 回 (12 回×4 年) になります。
pmt	必ず指定します。毎回の支払額を示す倍精度浮動小数点数型 (Double) の値を指定します。通常、支払額には元金と利息が含まれます。支払額を投資期間内に変更することはできません。
pv	省略可能です。現在の投資額または将来行われる一連の支払いを一括支払いした場合の合計金額をバリアント型 (Variant) で指定します。たとえば、車を購入するために資金を借りる場合、毎月支払うローンの総額が名前付き引数 pv になります。名前付き引数 pv を省略すると、0 を指定したものとみなされます。
type	省略可能です。支払期日をバリアント型 (Variant) で指定します。各期の期末に支払う場合は 0 を、各期の期首に支払う場合は 1 を指定します。名前付き引数 type を省略すると、0 を指定したものとみなされます。
解説

投資とは、一連の定額の支払いを一定の期間行うことです。たとえば、住宅ローンなどのローンまたは毎月の貯蓄プランなどの出資を指します。

名前付き引数 rate および nper は、時間的に同じ単位で指定する必要があります。たとえば、引数 rate を月単位で指定した場合は、名前付き引数 nper も月単位で指定します。

出金 (定額預金の支払いなど) を表す引数には負の値を指定し、入金 (配当金など) を表す引数には正の値を指定します。


IPmt 関数

倍精度浮動小数点数型 (Double) の値を返します。定額の支払いを定期的に行い、利率が一定であると仮定して、投資期間内の指定した期に支払う金利を返します。

構文

IPmt(rate, per, nper, pv[, fv[, type]])

IPmt 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
rate	必ず指定します。投資期間を通じて一定の利率を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、年利 (APR) 10% の車のローンを月払いで返済する場合、各期間の利率は 0.1/12 または 0.0083 になります。
per	必ず指定します。金利支払額を求める期を示す倍精度浮動小数点数型 (Double) の値を 1 ～ nper の範囲で指定します。
nper	必ず指定します。投資期間全体での支払い回数の合計を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、4 年の車のローンを月払いで返済する場合、支払い回数は 48 回 (12 回×4 年) になります。
pv	必ず指定します。現在の投資額または将来行われる一連の支払いや収益を、現時点で一括した場合の合計金額を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、車を購入するために資金を借りる場合、毎月支払うローンの総額が名前付き引数 pv になります。
fv	省略可能です。投資の将来価値、または最後の支払いを行った後に残る現金の収支を示すバリアント型 (Variant) の値を指定します。ローンなどの借入の将来価値は 0 になります。また、子供の教育費用として 18 年間で 500,000 円貯蓄する場合は、将来価値が 500,000 円になります。名前付き引数 fv を省略すると、0 を指定したものとみなされます。
type	省略可能です。支払期日をバリアント型 (Variant) で指定します。各期の期末に支払う場合は 0 を、各期の期首に支払う場合は 1 を指定します。名前付き引数 type を省略すると、0 を指定したものとみなされます。
解説

投資とは、一連の定額の支払いを一定の期間行うことで、たとえば住宅ローンなどのローンまたは毎月の貯蓄プランなどの出資を指します。

名前付き引数 rate および nper は、時間的に同じ単位で指定する必要があります。たとえば、名前付き引数 rate を月単位で指定した場合は、名前付き引数 nper も月単位で指定します。

出金 (定額預金の支払いなど) を表す引数には負の値を指定し、入金 (配当金など) を表す引数には正の値を指定してください。


IRR 関数

倍精度浮動小数点数型 (Double) の値を返します。一連の定期的なキャッシュ フロー (支払いと収益) に対する内部利益率を返します。

構文

IRR(values()[, guess])

IRR 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
values()	必ず指定します。一連のキャッシュ フローの値を倍精度浮動小数点数型 (Double) の配列で指定します。配列には、負の値 (支払額) と正の値 (収益額) が少なくとも 1 つずつ含まれている必要があります。
guess	省略可能です。IRR 関数の計算結果に近いと思われる値をバリアント型 (Variant) で指定します。名前付き引数 guess を省略すると、0.1 (10%) を指定したものとみなされます。
解説

内部利益率とは、一定の期間ごとに発生する支払いと収益からなる投資効率を表す利率のことです。

IRR 関数では、配列で指定した値の順序がキャッシュ フローの順序であるとみなされます。支払額と収益額を入力するときは、その順序に注意してください。各期間のキャッシュ フローが一定である必要はありません。

IRR 関数の計算には、反復計算の手法が用いられます。名前付き引数 guess の値を初期値とし、計算結果の誤差が 0.00001% 以内になるまで反復計算が実行されます。反復計算を 20 回行っても適切な解が見つからない場合は、エラーとなります。


MIRR 関数

倍精度浮動小数点数型 (Double) の値を返します。一連の定期的なキャッシュ フロー (支払いと収益) に基づいて、修正内部利益率を返します。

構文

MIRR(values(), finance_rate, reinvest_rate)

MIRR 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
values()	必ず指定します。キャッシュ フローの値を倍精度浮動小数点数型 (Double) の配列として指定します。配列には、負の値 (支払額) と正の値 (収益額) が少なくとも 1 つずつ含まれている必要があります。
finance_rate	必ず指定します。支払額に対する利率を示す倍精度浮動小数点数型 (Double) の値を指定します。
reinvest_rate	必ず指定します。収益額に対する利率を示す倍精度浮動小数点数型 (Double) の値を指定します。
解説

修正内部利益率は、支払いと収益を異なる利率で管理する場合の内部利益率を表します。MIRR 関数は、投資原価 (finance_rate) と現金の再投資に対する受取り利率 (reinvest_rate) の両方を基に修正内部利益率を求めます。

名前付き引数 finance_rate および reinvest_rate は、小数点を用いた百分率で指定します。たとえば、12% は 0.12 と記述します。

MIRR 関数では、配列で指定した値の順序がキャッシュ フローの順序であるとみなされます。支払額と収益額を入力するときは、その順序に注意してください。


NPer 関数

倍精度浮動小数点数型 (Double) の値を返します。定額の支払いを定期的に行い、利率が一定であると仮定して、投資に必要な期間を返します。

構文

NPer(rate, pmt, pv[, fv[, type]])

NPer 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
rate	必ず指定します。投資期間を通じて一定の利率を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、年率 (APR) 10% の車のローンを月払いで返済する場合、各期間の利率は 0.1/12 または 0.0083 になります。
pmt	必ず指定します。毎回の支払額を示す倍精度浮動小数点数型 (Double) の値を指定します。支払額には通常、元金と利息が含まれ、支払額を投資期間内に変更することはできません。
pv	必ず指定します。現在の投資額または将来行われる一連の支払いおよび収益を、現時点で一括した場合の合計金額を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、車を購入するために資金を借りる場合、毎月支払うローンの総額が名前付き引数 pv になります。
fv	省略可能です。投資の将来価値、または最後の支払いを行った後に残る現金の収支を示すバリアント型 (Variant) の値を指定します。ローンなどの借入の将来価値は 0 になります。また、子供の教育費用として 18 年間で 500,000 円貯蓄する場合は、将来価値が 500,000 円になります。名前付き引数 fv を省略すると、0 を指定したものとみなされます。
type	省略可能です。支払期日をバリアント型 (Variant) で指定します。各期の期末に支払う場合は 0、各期の期首に支払う場合は 1 を指定します。名前付き引数 type を省略すると、0 を指定したものとみなされます。
解説

投資とは、一連の定額の支払いを一定の期間行うことです。たとえば、住宅ローンなどのローンまたは毎月の貯蓄プランなどの出資を指します。

出金 (定額預金の支払いなど) を表す引数には負の値を指定し、入金 (配当金など) を表す引数には正の値を指定してください。


NPV 関数

倍精度浮動小数点数型 (Double) の値を返します。一連の定期的なキャッシュ フロー (支払いと収益) と割引率に基づいて、投資の正味現在価値を返します。

構文

NPV(rate, values())

NPV 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
rate	必ず指定します。投資期間を通じて一定の割引率を小数点を用いて倍精度浮動小数点数型 (Double) の値を指定します。
values()	必ず指定します。キャッシュ フローの値を倍精度浮動小数点数型 (Double) の配列として指定します。配列には、負の値 (支払額) と正の値 (収益額) が少なくとも 1 つずつ含まれている必要があります。
解説

投資の正味現在価値とは、将来行われる一連の支払いと収益を現時点での現金価値に換算したものです。

NPV 関数では、配列で指定した値の順序がキャッシュ フローの順序であるとみなされます。支払額と収益額を入力するときは、その順序に注意してください。

NPV 関数では、投資は配列の最初のキャッシュ フローの日付よりも 1 期前に開始され、配列の最後のキャッシュ フローで終了します。

正味現在価値は、将来のキャッシュ フローを基にして計算されます。最初のキャッシュ フローが第 1 期の期首に発生する場合、その最初の値は名前付き引数 values() のキャッシュ フローの値に含めず、NPV 関数の計算結果に加算する必要があります。

NPV 関数は投資の現在価値を返す PV 関数によく似ていますが、NPV 関数と PV関数の違いは、PV 関数ではキャッシュ フローが期首と期末のどちらで発生してもよい.点にあります。また、NPV 関数ではキャッシュ フローの金額が一定していませんが、PV 関数では投資期間を通じて一定でなければなりません。


Pmt 関数

倍精度浮動小数点数型 (Double) の値を返します。定額の支払いを定期的に行い、利率が一定であると仮定して、投資に必要な定期支払額を返します。

構文

Pmt(rate, nper, pv[, fv[, type]])

Pmt 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
rate	必ず指定します。投資期間を通じて一定の利率を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、年率 (APR) 10% の車のローンを月払いで返済する場合、各期間の利率は 0.1/12 または 0.0083 になります。
nper	必ず指定します。投資期間全体での支払い回数の合計を示す整数型 (Integer) の値を指定します。たとえば、4 年の車のローンを月払いで返済する場合、支払い回数は 48 回 (12 回×4 年) になります。
pv	必ず指定します。現在の投資額または将来行われる一連の支払いを、現時点で一括支払いした場合の合計金額を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、車を購入するために資金を借りる場合、毎月支払うローンの総額が名前付き引数 pv になります。
fv	省略可能です。投資の将来価値、または最後の支払いを行った後に残る現金の収支を示すバリアント型 (Variant) の値を指定します。ローンなどの借入の将来価値は 0 になります。また、子供の教育費用として 18 年間で 500,000 円貯蓄する場合は、将来価値が 500,000 円になります。名前付き引数 fv を省略すると、0 を指定したものとみなされます。
type	省略可能です。支払期日をバリアント型 (Variant) で指定します。各期の期末に支払う場合は 0、各期の期首に支払う場合は 1 を指定します。名前付き引数 type を省略すると、0 を指定したものとみなされます。
解説

投資とは、一連の定額の支払いを一定の期間行うことです。たとえば、住宅ローンなどのローンまたは毎月の貯蓄プランなどの出資を指します。

名前付き引数 rate および nper は、時間的に同じ単位で指定する必要があります。たとえば、名前付き引数 rate を月単位で指定した場合は、名前付き引数 nper も月単位で指定します。

出金 (定額預金の支払いなど) を表す引数には負の値を指定し、入金 (配当金など) を表す引数には正の値を指定します。


PPmt 関数

倍精度浮動小数点数型 (Double) の値を返します。定額の支払いを定期的に行い、利率が一定であると仮定して指定した期に支払われる元金を返します。

構文

PPmt(rate, per, nper, pv[, fv[, type]])

PPmt 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
rate	必ず指定します。投資期間を通じて一定の利率を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、年率 (APR) 10% の車のローンを月払いで返済する場合、各期間の利率は 0.1/12 または 0.0083 になります。
per	必ず指定します。元金支払額を求める期を示す整数型 (Integer) の値を 1 ～ nper の範囲で指定します。
nper	必ず指定します。投資期間全体での支払い回数の合計を示す整数型の値を指定します。たとえば、4 年の車のローンを月払いで返済する場合、支払い回数は 48 回 (12 回×4 年) になります。
pv	必ず指定します。現在の投資額または将来行われる一連の支払いや収益を、現時点で一括した場合の合計金額を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、車を購入するために資金を借りる場合、毎月支払うローンの総額が名前付き引数 pv になります。
fv	省略可能です。投資の将来価値、または最後の支払いを行った後に残る現金の収支を示すバリアント型 (Variant) の値を指定します。ローンなどの借入の将来価値は 0 になります。また、子供の教育費用として 18 年間で 500,000 円貯蓄する場合は、将来価値が 500,000 円になります。名前付き引数 fv を省略すると、0 を指定したものとみなされます。
type	省略可能です。支払期日をバリアント型 (Variant) で指定します。各期の期末に支払う場合は 0、各期の期首に支払う場合は 1 を指定します。名前付き引数 type を省略すると、0 を指定したものとみなされます。
解説

投資とは、一連の定額の支払いを一定の期間行うことです。たとえば、住宅ローンなどのローンまたは毎月の貯蓄プランなどの出資を指します。

名前付き引数 rate および nper は、時間的に同じ単位で指定する必要があります。たとえば、名前付き引数 rate を月単位で指定した場合は、名前付き引数 nper も月単位で指定します。

出金 (定額預金の支払いなど) を表す引数には負の値を指定し、入金 (配当金など) を表す引数には正の値を指定してください。


PV 関数

倍精度浮動小数点数型 (Double) の値を返します。定額の支払いを定期的に行い、利率が一定であると仮定して、投資の現在価値を返します。

構文

PV(rate, nper, pmt[, fv[, type]])

PV 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
rate	必ず指定します。投資期間を通じて一定の利率を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、年率 (APR) 10% の車のローンを月払いで返済する場合、各期間の利率は 0.1/12 または 0.0083 になります。
nper	必ず指定します。投資期間全体での支払い回数の合計を示す整数型 (Integer) の値を指定します。たとえば、4 年の車のローンを月払いで返済する場合、支払い回数は 48 回 (12 回×4 年) になります。
pmt	必ず指定します。毎回の支払額を示す倍精度浮動小数点数型 (Double) の値を指定します。支払額には通常、元金と利息が含まれ、支払額を投資期間内に変更することはできません。
fv	省略可能です。投資の将来価値、または最後の支払いを行った後に残る現金の収支を示すバリアント型 (Variant) の値を指定します。ローンなどの借入の将来価値は 0 になります。また、子供の教育費用として 18 年間で 500,000 円貯蓄する場合は、将来価値が 500,000 円になります。名前付き引数 fv を省略すると、0 を指定したものとみなされます。
type	省略可能です。支払期日を示すバリアント型 (Variant) の値を指定します。各期の期末に支払う場合は 0 を、各期の期首に支払う場合は 1 を指定します。名前付き引数 type を省略すると、0 を指定したものとみなされます。
解説

投資とは、一連の定額の支払いを一定の期間行うことです。たとえば、住宅ローンなどのローンまたは毎月の貯蓄プランなどの出資を指します。

名前付き引数 rate および nper は、時間的に同じ単位で指定する必要があります。たとえば、名前付き引数 rate を月単位で指定した場合は、名前付き引数 nper も月単位で指定します。

出金 (定額預金の支払いなど) を表す引数には負の値を指定し、入金 (配当金など) を表す引数には正の値を指定してください。


Rate 関数

倍精度浮動小数点数型 (Double) の値を返します。投資期間を通じての利率を返します。

構文

Rate(nper, pmt, pv[, fv[, type[, guess]]])

Rate 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
nper	必ず指定します。投資期間全体での支払い回数の合計を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、4 年の車のローンを月払いで返済する場合、支払い回数は 48 回 (12 回×4 年) になります。
pmt	必ず指定します。毎回の支払額を示す倍精度浮動小数点数型 (Double) の値を指定します。支払額には通常、元金と利息が含まれ、支払額を投資期間内に変更することはできません。
pv	必ず指定します。現在の投資額または将来行われる一連の支払いや収益を、現時点で一括した場合の合計金額を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、車を購入するために資金を借りる場合、毎月支払うローンの総額が名前付き引数 pv になります。
fv	省略可能です。投資の将来価値、または最後の支払いを行った後に残る現金の収支を示すバリアント型 (Variant) の値を指定します。ローンなどの借入の将来価値は 0 になります。また、子供の教育費用として 18 年間で 500,000 円貯蓄する場合は、将来価値が 500,000 円になります。名前付き引数 fv を省略すると、0 を指定したものとみなされます。
type	省略可能です。支払い期日を示すバリアント型 (Variant) の値を数値で指定します。各期の期末に支払う場合は 0、各期の期首に支払う場合は 1 を指定します。名前付き引数 type を省略すると、0 を指定したものとみなされます。
guess	省略可能です。利率の推定値を示すバリアント型 (Variant) の値を指定します。省略すると、0.1 (10%) を指定したものとみなされます。
解説

投資とは、一連の定額の支払いを一定の期間行うことです。たとえば、住宅ローンなどのローンまたは毎月の貯蓄プランなどの出資を指します。

出金 (定額預金の支払いなど) を表す引数には負の値を指定し、入金 (配当金など) を表す引数には正の値を指定します。

Rate 関数は、反復計算の手法を用いて利率を計算します。名前付き引数 guess の値を初期値とし、計算結果の誤差が 0.00001% 以内になるまで反復計算が実行されます。反復計算を 20 回行っても適切な解が見つからない場合は、エラーとなります。推定値に 10% を指定した場合にエラーになったときは、名前付き引数 guess の値を変えてみてください。


SLN 関数

倍精度浮動小数点数型 (Double) の値を返します。定額法を用いて、資産の 1 期当たりの減価償却費を返します。

構文

SLN(cost, salvage, life)

SLN 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
cost	必ず指定します。資産を購入した時点での価格を示す倍精度浮動小数点数型 (Double) 値を指定します。
salvage	必ず指定します。耐用年数を経た後での資産の価格を示す倍精度浮動小数点数型 (Double) の値を指定します。
life	必ず指定します。資産の耐用年数を示す倍精度浮動小数点数型 (Double) の値を指定します。
解説

減価償却の期間は、引数 life と同じ単位で表されます。また、すべての引数には必ず正の値を指定してください。


SYD 関数

倍精度浮動小数点数型 (Double) の値を返します。定額逓減法を使って、指定した期の減価償却費を返します。

構文

SYD(cost, salvage, life, period)

SYD 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
cost	必ず指定します。資産を購入した時点での価格を示す倍精度浮動小数点数型 (Double) の値を指定します。
salvage	必ず指定します。耐用年数を経た後での資産の価格を示す倍精度浮動小数点数型 (Double) の値を指定します。
life	必ず指定します。資産の耐用年数を示す倍精度浮動小数点数型 (Double) の値を指定します。
period	必ず指定します。減価償却費を計算する期を示す倍精度浮動小数点数型 (Double) の値を指定します。
解説

名前付き引数 life および period は、同じ単位で指定する必要があります。たとえば、名前付き引数 life を月単位で指定した場合は、名前付き引数 period も月単位で指定します。また、すべての引数には必ず正の値を指定してください。


IsArray 関数の使用例

次の例は、IsArray 関数を使って、変数が配列変数かどうかを調べます。

Dim MyArray(1 To 5) As Integer, YourArray, MyCheck	' 配列変数を宣言します。

YourArray = Array(1, 2, 3)	' Array 関数を使用します。

MyCheck = IsArray(MyArray)	' True を返します。

MyCheck = IsArray(YourArray)	' True を返します。


IsDate 関数の使用例

次の例は、IsDate 関数を使って、数式が日付に変換できるかどうかを調べます。

Dim MyDate, YourDate, NoDate, MyCheck

MyDate = "1969,2,12": YourDate = #2/12/69#: NoDate = "こんにちは"

MyCheck = IsDate(MyDate)	' True を返します。

MyCheck = IsDate(YourDate)	' True を返します。

MyCheck = IsDate(NoDate)	' False を返します。


IsEmpty 関数の使用例

次の例は、IsEmpty 関数を使って、変数が初期化されているかどうかを調べます。

Dim MyVar, MyCheck

MyCheck = IsEmpty(MyVar)	' True を返します。

MyVar = Null	' Null 値を代入します。

MyCheck = IsEmpty(MyVar)	' False を返します。

MyVar = Empty	' Empty 値を代入します。

MyCheck = IsEmpty(MyVar)	' True を返します。


IsError 関数の使用例

次の例は、IsError 関数を使って、数式がエラー値であるかどうかを調べます。ユーザー定義の Function プロシージャの戻り値として、エラー値 (VarType 10) を戻すには、CVErr 関数を使います。この例では、ユーザー定義の Function プロシージャを UserFunction、そのプロシージャの戻り値を CVErr(32767) と仮定します。32767 は、ユーザー定義のエラー番号です。

Dim ReturnVal, MyCheck

ReturnVal = UserFunction()

MyCheck = IsError(ReturnVal)	' True を返します。


IsMissing 関数の使用例

次の例は、IsMissing 関数を使って、省略可能な引数がユーザー定義プロシージャに渡されたかどうかを調べます。キーワード  Optional が指定された引数は、既定値とバリアント型以外のデータ型を持つことができます。

Dim ReturnValue

' 次のステートメントは、ユーザー定義の Function プロシージャを呼び出します。

ReturnValue = ReturnTwice()	' Null 値を返します。

ReturnValue = ReturnTwice(2)	' 4 を返します。

' Function プロシージャの定義。

Function ReturnTwice(Optional A)

If IsMissing(A) Then

' 引数が省略されているときは、Null 値を返します。

ReturnTwice = Null

Else

' 引数が指定されているときは、その値を 2 倍にして返します。

ReturnTwice = A * 2

End If

End Function


IsNull 関数の使用例

次の例は、IsNull 関数を使って、変数の値が Null 値かどうかを調べます。

Dim MyVar, MyCheck

MyCheck = IsNull(MyVar)	' False を返します。

MyVar = ""

MyCheck = IsNull(MyVar)	' False を返します。

MyVar = Null

MyCheck = IsNull(MyVar)	' True を返します。


IsNumeric 関数の使用例

次の例は、IsNumeric 関数を使って、変数が数値として評価できるかどうかを調べます。

Dim MyVar, MyCheck

MyVar = "53"	' 値を代入します。

MyCheck = IsNumeric(MyVar)	' True を返します。

MyVar = "459.95"	' 値を代入します。

MyCheck = IsNumeric(MyVar)	' True を返します。

MyVar = "45 Help"	' 値を代入します。

MyCheck = IsNumeric(MyVar)	' False を返します。


IsObject 関数の使用例

次の例は、IsObject 関数を使って、識別子がオブジェクトへの参照を表すかどうかを調べます。MyObject と YourObject は、同じ型のオブジェクト変数です。変数名は、説明する目的で一般的な名前を使っています。

Dim MyInt As Integer, YourObject, MyCheck	' 変数を宣言します。

Dim MyObject As Object

Set YourObject = MyObject	' オブジェクトへの参照を設定します。

MyCheck = IsObject(YourObject)	' True を返します。

MyCheck = IsObject(MyInt)	' False を返します。


TypeName 関数の使用例

次の例は、TypeName 関数を使って、変数に関する情報を取得します。

' 変数を宣言します。

Dim NullVar, MyType, StrVar As String, IntVar As Integer, CurVar As Currency

Dim ArrayVar (1 To 5) As Integer

NullVar = Null	' Null 値を代入します。

MyType = TypeName(StrVar)	' "String" を返します。

MyType = TypeName(IntVar)	' "Integer" を返します。

MyType = TypeName(CurVar)	' "Currency" を返します。

MyType = TypeName(NullVar)	' "Null" を返します。

MyType = TypeName(ArrayVar)	' "Integer()" を返します。


VarType 関数の使用例

次の例は、VarType 関数を使って、変数の内部処理形式を調べます。

Dim IntVar, StrVar, DateVar, MyCheck

' 変数を初期化します。

IntVar = 459: StrVar = "こんにちは": DateVar = #69/2/12#

MyCheck = VarType(IntVar)	' 2 を返します。

MyCheck = VarType(DateVar)	' 7 を返します。

MyCheck = VarType(StrVar)	' 8 を返します。


IsArray 関数

変数が配列であるかどうかを調べ、結果をブール型 (Boolean) で返します。

構文

IsArray(varname)

引数 varname は必ず指定します。引数 varname には、変数の識別子を指定します。

解説

IsArray 関数は、指定した変数が配列の場合は、真 (True) を返します。それ以外の場合は、偽 (False) を返します。IsArray 関数は、特に配列を含むバリアント型 (Variant) の式 に有効です。


IsDate 関数

式を日付に変換できるかどうかを調べ、結果をブール型 (Boolean) で返します。

構文

IsDate(expression)

引数 expression は必ず指定します。引数 expression には、日付や時刻として認識できる日付式または文字列式を含むバリアント型 (Variant) の式を指定します。

解説

IsDate 関数は、指定した式が日付である場合、またはその式が有効な日付として認識できる場合は、真 (True) を返します。変換できない場合は、偽 (False) を返します。Microsoft Windows で有効な日付の範囲は、西暦 100 年 1 月 1 日から西暦 9999 年 12 月 31 日までです。この範囲は、オペレーティング システムによって異なります。


IsEmpty 関数

変数が Empty 値かどうかを調べ、結果をブール型 (Boolean) で返します。

構文

IsEmpty(expression)

引数 expression は必ず指定します。引数 expression には、数式または文字列式を含むバリアント型 (Variant) の式を指定します。ただし、IsEmpty 関数は単独の変数について、その変数が初期化されているかどうかを調べる関数なので、通常、引数 expression には 1 つの変数名を指定します。

解説

IsEmpty 関数は、指定した変数が初期化されていない場合、または Empty 値の場合に、真 (True) を返します。それ以外の場合は、偽 (False) を返します。また、引数 expression 内に複数の変数がある場合には、常に偽 (False) を返します。IsEmpty 関数の戻り値は、引数 expression にバリアント型 (Variant) の式を指定した場合のみ有効です。


IsError 関数

式がエラー値かどうかを調べ、結果をブール型 (Boolean) で返します。

構文

IsError(expression)

引数 expression は必ず指定します。引数 expression には、有効な任意の式を指定できます。

解説

エラー値は、CVErr 関数を使用して実数を変換することによって作成されます。IsError 関数は、指定した数式がエラー値であるかどうかを調べるために使います。引数 expression がエラー値である場合は、真 (True) が返されます。そうでない場合は、偽 (False) が返されます。


IsMissing 関数

プロシージャに省略可能なバリアント型 (Variant) の引数が渡されたかどうかを調べ、結果をブール型 (Boolean) で返します。

構文

IsMissing(argname)

引数 argname は必ず指定します。引数 argname には、プロシージャの省略可能なバリアント型 (Variant) の引数の名前を指定します。

解説

IsMissing 関数は、プロシージャを呼び出すときに省略可能なバリアント型 (Variant) の引数がプロシージャに渡されたかどうかを調べるために使用します。指定した引数が渡されていない場合は、真 (True) を返します。それ以外は偽 (False) を返します。IsMissing 関数がある引数に対して真 (True) を返すときに、その引数を他のコード内で使うと、ユーザー定義エラーが発生することがあります。キーワード ParamArray を指定した引数に IsMissing 関数を使うと、常に偽 (False) が返されます。キーワード ParamArray を指定した引数が空であるかどうかを調べるには、配列の上限が下限よりも小さいかどうかをテストします。

メモ   IsMissing 関数では、バリアント型ではない、整数型や倍精度浮動小数点型などの通常のデータ型に対しては無効です。これは、整数型などのデータ型では、引数が指定されたかどうかを判断するためのフラグが提供できないためです。よって、バリアント型以外の引数を判別したい場合は、プロシージャの構文内で変数の既定値を代入しておきます。プロシージャを呼び出したときに引数が省略された場合は、下のコード例のように引数の値は既定値と同じ値になります。

Sub MySub(Optional MyVar As String = "specialvalue")

    If MyVar = "specialvalue" Then

    ' 引数 MyVar が省略された場合

    Else

    ...

End Sub

実際のコードでは、MyVar の既定値がプロシージャの引数省略時の変数値として適切ならば、 "If MyVar ..." の箇所のコードを省略することもできます。


IsNull 関数

式に Null 値が含まれているかどうかを調べ、結果をブール型 (Boolean) で返します。

構文

IsNull(expression)

引数 expression は必ず指定します。引数 expression には、数式または文字列式を含むバリアント型 (Variant) の式を指定します。

解説

IsNull 関数は、引数 expression の値が Null 値である場合は、真 (True) を返します。それ以外は偽 (False) を返します。引数 expression が複数の変数で構成されている場合、変数が 1 つでも Null 値のときには式全体が Null 値となり、真 (True) が返されます。

Null 値は、バリアント型 (Variant) に有効なデータが入っていないことを示す値であり、変数が初期化されていないことを示す Empty 値や、Null 文字列と呼ばれる長さが 0 の文字列 ("") とは異なります。

重要   IsNull 関数を使用すると、式に Null 値が含まれているかどうかを調べることができます。If Var = Null や If Var <> Null のように他の状況では真 (True) と評価される式でも、偽 (False) になります。これは、Null 値を含む式はすべて式自体が Null 値となり、偽 (False) と評価されるためです。


IsNumeric 関数

式が数値として評価できるかどうかを調べ、結果をブール型 (Boolean) で返します。

構文

IsNumeric(expression)

引数 expression は必ず指定します。引数 expression には、数式または文字列式を含むバリアント型 (Variant) の式を指定します。

解説

False.IsNumeric 関数は、引数 expression が数値として認識できる場合は、真 (True) を返します。それ以外は偽 (False) を返します。

IsNumeric 関数は、引数 expression が日付式の場合は、偽 (False) を返します。


IsObject 関数

識別子がオブジェクト変数を表しているかどうかを示すブール型 (Boolean) の値を返します。

構文

IsObject(identifier)

引数 identifier は必ず指定します。引数 identifier には、変数の名前を指定します。

解説

IsObject 関数は、バリアント型 (Variant) の内部処理形式 (VarType 関数) が定数 vbObject であるかどうかを調べる場合に役立ちます。VarType 関数が定数 vbObject を示すのは、バリアント型の変数が実際にオブジェクトを参照しているか、それ以前に参照していた場合、または変数に Nothing が含まれている場合です。

IsObject 関数は、引数 identifier がオブジェクト型 (Object) または任意の有効なクラスを指定して宣言した変数である場合に真 (True) を返します。また、引数 identifier がバリアント型で、VarType 関数が定数 vbObject の変数の場合、またはユーザー定義型の変数の場合にも、真 (True) を返します。これら以外の変数は、偽 (False) を返します。IsObject 関数は、変数に Nothing が設定されている場合にも、真 (True) を返します。

エラー トラップを設定して、オブジェクトへの参照が有効であるかどうかを確認します。


TypeName 関数

変数に関する情報を提供する文字列型 (String) の文字列を返します。

構文

TypeName(varname)

引数 varname は必ず指定します。引数 varname には、ユーザー定義型の変数を除く、任意のバリアント型 (Variant) の変数を指定します。

解説

TypeName 関数によって次のいずれかの文字列が返されます。

文字列	変数
オブジェクトの種類	返された文字列 objecttype で表される種類のオブジェクト
Byte	バイト型 (Byte)
Integer	整数型 (Integer)
Long	長整数型 (Long)
Single	単精度浮動小数点数型 (Single)
Double	倍精度浮動小数点数型 (Double)
Currency	通貨型 (Currency)
Decimal	10 進数型
Date	日付型 (Date)
String	文字列型 (String)
Boolean	ブール型 (Boolean)
Error	エラー値
Empty	未初期化
Null	無効な値
Object	オブジェクト
Unknown	オブジェクトの種類が不明なオブジェクト
Nothing	オブジェクトを参照していないオブジェクト変数
引数 varname が配列の場合は、上記の文字列の中の該当する文字列またはバリアント型 (Variant) の値に、空のかっこ "()" を付けて返します。たとえば、引数 varname が整数の配列のとき、TypeName 関数は "Integer()" を返します。


VarType 関数

変数の内部処理形式を表す整数型 (Integer) の値を返します。

構文

VarType(varname)

引数 varname は必ず指定します。引数 varname には、ユーザー定義型の変数を除く、任意のバリアント型 (Variant) の変数を指定します。

戻り値

定数	値	内容
vbEmpty	0	Empty 値 (未初期化)
vbNull	1	Null 値 (無効な値)
vbInteger	2	整数型 (Integer)
vbLong	3	長整数型 (Long)
vbSingle	4	単精度浮動小数点数型 (Single)
vbDouble	5	倍精度浮動小数点数型 (Double)
vbCurrency	6	通貨型 (Currency)
vbDate	7	日付型 (Date)
vbString	8	文字列型 (String)
vbObject	9	オブジェクト
vbError	10	エラー値
vbBoolean	11	ブール型 (Boolean)
vbVariant	12	バリアント型 (Variant) (バリアント型配列にのみ使用)
vbDataObject	13	非OLE オートメーション オブジェクト
vbDecimal	14	10 進数型
vbByte	17	バイト型 (Byte)
vbUserDefinedType	36	ユーザー定義型を含むバリアント型
vbArray	8192	配列
メモ   これらの定数は、Visual Basic で定義されているものです。コードの中の任意の場所で、実際の値の代わりに使用できます。

解説

VarType 関数は、定数 vbArray の値 (8192) を単独では返しません。この値は常にデータ型を表す他の値と加算されて返され、指定した変数がそのデータ型の要素を持つ配列であることを示します。定数 vbVariant は、常に定数 vbArray と加算されて返され、指定した変数がバリアント型の配列であることを示します。たとえば、整数型の要素を持つ配列を指定したときは、vbInteger + vbArray として計算された値 8194 が返されます。オブジェクトが既定プロパティを持つとき、VarType (object) はその既定プロパティの型を返します。


Empty キーワード

キーワード Empty はバリアント型 (Variant) の 1 つで、変数に格納されている値が初期化されていないことを示します。


False キーワード

False は、偽 (0) の値と等しいキーワードです。


Me <キーワード>
Me キーワード

キーワード Me は、暗黙のうちに宣言された変数と同様に動作します。キーワード Me はクラス モジュール内のすべてのプロシージャ (Sub プロシージャまたは Function プロシージャ) で使用できます。キーワード Me は、複数のインスタンスを作成できるクラスを使用するときに、現在コードが実行されているクラスを指定するために使われます。特に、動作中のインスタンスに関する情報を他のモジュール内のプロシージャに渡すときなどは、キーワード Me が役立ちます。たとえば、コード モジュール内に次のようなプロシージャがある場合が考えられます。

Sub ChangeFormColor(FormName As Form)

FormName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

End Sub

次のステートメントを使用すると、プロシージャを呼び出して、現在のフォーム (Form クラスの現在実行中のインスタンス) を引数として渡すことができます。

ChangeFormColor Me


Nothing <キーワード>
Nothing キーワード

キーワード Nothing は、オブジェクト変数とその変数が参照しているオブジェクトとの関連付けを解除するために使います。Set ステートメントを使って、次のようにキーワード Nothing をオブジェクト変数に代入します。

Set MyObject = Nothing

複数のオブジェクト変数が同じオブジェクトを参照することがあります。キーワード Nothing をオブジェクト変数に代入すると、その変数は実際のオブジェクトを参照しなくなります。複数のオブジェクト変数が同じオブジェクトを参照すると、各変数が参照するオブジェクトに関連付けられたメモリとシステム リソースは、Set ステートメントを使ってすべての変数を明示的にキーワード Nothing に設定するか、またはキーワード Nothing に設定した最後のオブジェクト変数が、暗黙のうちに適用範囲 (スコープ) 外になった後でなければ解放されません。


Null <キーワード>
Null キーワード

キーワード Null は、バリアント型 (Variant) の 1 つで、有効な値が変数に格納されていないことを示します。


True <キーワード>
True キーワード

True は、真 (-1) の値と等しいキーワードです。


MacScript 関数の使用例

次の例は、MacScript 関数を使って、[開く] ダイアログ ボックス (Macintosh 標準のファイル ダイアログ) を開きます。ユーザーが選択したファイルの絶対パスが返されます｡適切であれば、指定パスがファイルの種類の前に示されます｡

ThePath$ = Macscript("ChooseFile")


MacID 関数

Macintosh でのみ使用する関数です。4 個の連続した文字定数を Dir、Kill、Shell、および AppActivate 関数で使う値に変換します。

構文

MacID(constant)

引数 constant は、リソース タイプ、ファイル タイプ、アプリケーション シグネチャなどの種別を識別するために使用する 4 個の連続した文字定数です。たとえば、TEXT、OBIN、Excel ファイルに使う "XLS5" (Excel 97 の場合は "XLS8")、Microsoft Word の "W6BN" (Word 97 の場合は "W8BN") などがあります。この引数は、必ず指定します。

解説

MacID 関数は、Dir 関数や Kill 関数で使用され、Macintosh のファイルタイプを指定します。Macintosh では、"*" (アスタリスク) や "?" (疑問符) などのワイルドカード文字を使うことができないので、ファイルのグループを識別するのに、4 文字の定数を使います。たとえば、次のステートメントは現在のフォルダにあるすべての "TEXT" タイプのファイル名を返します。

Dir("SomePath", MacID("TEXT"))

MacID 関数は、Shell 関数や AppActivate 関数と共に使われ、重複しないアプリケーションのシグネチャでアプリケーションを指定します。


MacScript 関数

AppleScript のスクリプトを実行します。Macintosh (漢字 Talk7 以降) で有効です。

構文

MacScript script

引数 script には、AppleScript のスクリプト名を表す文字列式を指定します。

解説

AppleScript のスクリプトには、キャリッジ リターン文字 (Chr(13)) で区切ることによって、複数行で構成されているスクリプトもあります。


Abs 関数の使用例

次の例は、Abs 関数を使って、指定した数値の絶対値を計算します。

Dim MyNumber

MyNumber = Abs(50.3)	' 50.3 を返します。

MyNumber = Abs(-50.3)	' 50.3 を返します。


Atn 関数の使用例

次の例は、Atn 関数を使って、πの値を計算します。

Dim pi

pi = 4 * Atn(1)	' πの値を計算します。


Cos 関数の使用例

次の例は、Cos 関数を使って、指定した角度のコサインを計算します。

Dim MyAngle, MySecant

MyAngle = 1.3	' 角度 (ラジアン) を設定します。

MySecant = 1 / Cos(MyAngle)	' セカントを計算します。


Exp 関数の使用例

次の例は、Exp 関数を使って、e を底とする指数関数を計算します。

Dim MyAngle, MyHSin

' 角度 (ラジアン) を設定します。

MyAngle = 1.3

' 双曲線サインを計算します。

MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2


Int 関数、Fix 関数の使用例

次の例は、Int 関数と Fix 関数を使って、数値の整数部を求めます。Int 関数は、引数として負の数を指定すると、その数値以下の負の整数値の中で最大の値を返します。Fix 関数は、引数として負の数を指定すると、その数値以上の整数値の中で最小の値を返します。

Dim MyNumber

MyNumber = Int(99.8)	' 99 を返します。

MyNumber = Fix(99.2)	' 99 を返します。

MyNumber = Int(-99.8)	' -100 を返します。

MyNumber = Fix(-99.8)	' -99 を返します。

MyNumber = Int(-99.2)	' -100 を返します。

MyNumber = Fix(-99.2)	' -99 を返します。


Log 関数の使用例

次の例は、Log 関数を使って、指定した数値の自然対数を計算します。

Dim MyAngle, MyLog

' 角度 (ラジアン) を設定します。

MyAngle = 1.3

' 双曲線サインの逆関数を計算します。

MyLog = Log(MyAngle + Sqr(MyAngle * MyAngle + 1))


Randomizeステートメントの使用例

次の例は、Randomize ステートメントを使って、乱数発生ルーチンを初期化します。引数を省略すると、Randomize ステートメントは新しいシード値として、Timer 関数の戻り値を使用します。

Dim MyValue

Randomize	' 乱数発生ルーチンを初期化します。

MyValue = Int((6 * Rnd) + 1)	' 1 から 6 までの乱数を発生させます。


Rnd 関数の使用例

次の例は、Rnd 関数を使って、1 から 6 までの乱数整数を発生させます。

Dim MyValue

MyValue = Int((6 * Rnd) + 1)	' 1 から 6 までの乱数整数を発生させます。


Sgn 関数の使用例

次の例は、Sgn 関数を使って、数値の符号を調べます。

Dim MyVar1, MyVar2, MyVar3, MySign

MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0

MySign = Sgn(MyVar1)	' 1 を返します。

MySign = Sgn(MyVar2)	' -1 を返します。

MySign = Sgn(MyVar3)	' 0 を返します。


Sin 関数の使用例

次の例は、Sin 関数を使って、指定した角度のサインを計算します。

Dim MyAngle, MyCosecant

MyAngle = 1.3	' 角度 (ラジアン) を設定します。

MyCosecant = 1 / Sin(MyAngle)	' コセカントを計算します。


Sqr 関数の使用例

次の例は、Sqr 関数を使って、指定した数値の平方根を計算します。

Dim MySqr

MySqr = Sqr(4)	' 2 を返します。

MySqr = Sqr(23)	' 4.79583152331272 を返します。

MySqr = Sqr(0)	' 0 を返します。

MySqr = Sqr(-4)	' 実行時エラーが発生します。


Tan 関数の使用例

次の例は、Tan 関数を使って、指定した角度のタンジェントを計算します。

Dim MyAngle, MyCotangent

MyAngle = 1.3	' 角度 (ラジアン) を設定します。

MyCotangent = 1 / Tan(MyAngle)	' コタンジェントを計算します。


Math 関数

Abs 関数

Atn 関数

Cos 関数

Exp 関数

Fix 関数

Int 関数

Log 関数

Rnd 関数

Sgn 関数

Sin 関数

Sqr 関数

Tan 関数

超越関数


Abs 関数

引き渡した数値の絶対値を同じデータ型で返します。

構文

Abs(number)

引数 number は必ず指定します。引数 number には、任意の数式を指定します。引数 number に Null 値が含まれている場合、Abs 関数は Null 値を返します。また引数 number に、値が代入される前の変数が指定されている場合は、0 を返します。

解説

数値の絶対値とは、その数値から符号を取り除いたものです。たとえば、ABS(-1) と ABS(1) は、どちらも 1 を返します。


Atn 関数

指定した数値のアークタンジェントを倍精度浮動小数点数型 (Double) で返します。

構文

Atn(number)

引数 number は必ず指定します。引数 number には、倍精度浮動小数点数型 (Double) の数値または任意の数式を指定します。

解説

Atn 関数は、直角三角形の 2 辺の比を引数 (number) として受け取り、対応する角度を返します。ここでいう 2 辺とは、直角をはさむ 2 つの辺を指します。2 辺の比は、求める角の反対側の辺 (対辺) の長さをもう一方の辺 (底辺、つまり求める角に隣接する側の辺) の長さで割った値です。

戻り値は、-π/2 ～π/2 の範囲の値 (単位はラジアン) になります。

角度の単位を度からラジアンに変換するには、度にπ/180 を掛けます。ラジアンから度に変換するには、ラジアンに 180/πを掛けます。

メモ   Atn 関数は Tan 関数の逆三角関数です。Tan 関数は、引数として角度を受け取り、その角度を含む直角三角形の直角をはさむ 2 辺の比を返します。Atn 関数と、タンジェントの逆数であるコタンジェント (1/タンジェント) の違いに気を付けてください。


Cos 関数

指定した角度のコサインを倍精度浮動小数点数型 (Double) で返します。

構文

Cos(number)

引数 number は必ず指定します。引数 number には、倍精度浮動小数点数型 (Double) の数値または角度を示す任意の有効な数式 (単位はラジアン) を指定します。

解説

Cos 関数は、引数として角度を受け取り、その角度を含む直角三角形の 2 辺の比を返します。ここでいう 2 辺とは、引数 number に指定した角をはさむ 2 つの辺を指します。2 辺の比は、短い方の辺 (底辺) の長さを、もう一方の辺 (斜辺) の長さで割った値です。

戻り値は、-1 ～ 1 の範囲の値になります。

角度の単位を度からラジアンに変換するには、度にπ/180 を掛けます。ラジアンから度に変換するには、ラジアンに 180/πを掛けます。


Exp 関数

指数関数 (e を底とする数式のべき乗) を計算する数値演算関数です。

構文

Exp(number)

引数 number は必ず指定します。引数 number には、倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定します。

解説

引数 number の値が 709.782712893 を超えると、オーバーフロー エラーが発生します。定数 e の値は約 2.718282 です。

メモ   Exp 関数は Log 関数の逆関数であり、逆対数と呼ばれることもあります。


Int、Fix 関数

指定した数値の整数部分を返します。

構文

Int(number)

Fix(number)

引数 number は必ず指定します。引数 number には、倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定します。引数 number に Null 値が含まれている場合は、Null 値を返します。

解説

Int 関数と Fix 関数は、どちらも引数 number の小数部分を取り除いた整数値を返します。

引数 number に負の値を指定した場合には、Int 関数が引数 number を超えない最大の負の整数を返すのに対して、Fix 関数は引数 number 以上の最小の負の整数を返します。たとえば、引数として -8.4 を指定すると、Int 関数は -9、Fix 関数は -8 をそれぞれ返します。

Fix(number) は、次の数式と等価です。

Sgn(number) * Int(Abs(number))


Log 関数

倍精度浮動小数点数型 (Double) の自然対数を返す数値演算関数です。

構文

Log(number)

引数 number は必ず指定します。引数 number には、0 を超える倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定します。

解説

自然対数とは、定数 e を底とする対数です。定数 e の値は約 2.718282 です。

任意の数値 x の n を底とする対数は、次に示すように x の自然対数を n の自然対数で割ることによって得られます。

Logn(x) = Log(x) / Log(n)

次の Function プロシージャは、引数に指定した数値の常用対数 (10 を底とする対数) を計算します。

Static Function Log10(X)

Log10 = Log(X) / Log(10#)

End Function


Randomize ステートメント

乱数ジェネレータを初期化 (乱数系列を再設定) する数値演算ステートメントです。

構文

Randomize [number]

引数 number は省略可能です。引数 number には、バリアント型 (Variant) の数値または任意の有効な数式を指定します。

解説

引数 number には、Rnd 関数の乱数ジェネレータに与える新しいシード値を指定します。引数 number を省略した場合、システム タイマーから取得した値が新しいシード値として使われます。

Randomize ステートメントを使用しない場合、引数を指定しないで Rnd 関数を呼び出すと、最初に Rnd 関数を呼び出したときのシード値と同じ値が使用されます。それ以降は、直前に生成された数がシード値として使用されます。

メモ   乱数系列を繰り返すには、数値を指定して Randomize ステートメントを実行する直前に、負の引数を指定して Rnd 関数を呼び出します。引数 number に同じ値を指定して Randomize ステートメントを使用しても、前の乱数系列を繰り返すことはできません。


Rnd 関数

単精度浮動小数点数型 (Single) の乱数を返します。

構文

Rnd[(number)]

引数 number は省略可能です。引数 number には、単精度浮動小数点数型 (Single) の数値または任意の有効な数式を指定します。

戻り値

number の値	戻り値
< 0	常に、引数 number のシード値によって決まる同じ数値を返します。
> 0	乱数系列の次の乱数を返します。
= 0	直前に生成した乱数を返します。
省略したとき	乱数系列の次の乱数を返します。
解説

Rnd 関数は 0 以上、1 未満の範囲の値を返します。

引数 number の値によって、Rnd 関数が返す乱数が決まります。

初期シード値が変わらない限り、一連の Rnd 関数が返す乱数系列は同じになります。これは、連続する各 Rnd 関数が乱数系列の中の直前の乱数をシード値として、次の乱数をそれぞれ生成するためです。

システム タイマーから取得した新しいシード値を使って、乱数ジェネレータを初期化するには、Rnd 関数を呼び出す前に、引数を指定せずに Randomize ステートメントを実行してください。

任意の範囲の整数の乱数を生成するには、次の式を使ってください。

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

この式では、変数 upperbound には範囲の上限の値を指定し、変数 lowerbound には範囲の下限の値を指定します。

メモ   乱数系列を繰り返すには、数値を指定して Randomize ステートメントを実行する直前に、負の引数を指定して Rnd 関数を呼び出します。引数 number に同じ値を指定して Randomize ステートメントを使用しても、前の乱数系列を繰り返すことはできません。


Sgn 関数

引数に指定した値の符号をバリアント型 (内部処理形式 Integer の Variant) の値で返す数値演算関数です。

構文

Sgn(number)

引数 number は必ず指定します。引数 number には、任意の数式を指定します。

戻り値

number の値	戻り値
number > 0	1
number = 0	0
number < 0	-1
解説

引数 number の符号により、Sgn 関数の戻り値が決まります。


Sin 関数

指定した角度のサインを倍精度浮動小数点数型 (Double) の値で返す数値演算関数です。

構文

Sin(number)

引数 number は必ず指定します。引数 number には、角度を表す倍精度浮動小数点数型 (Double) の数値または任意の有効な数式 (単位はラジアン) を指定します。

解説

Sin 関数は、引数として角度を受け取り、その角度を含む直角三角形の 2 辺の比を返します。ここでいう 2 辺とは、指定した角の反対側の辺 (対辺) と斜辺を指します。2 辺の比は、対辺の長さを斜辺の長さで割った値です。

戻り値は、-1 ～ 1 の範囲の値になります。

角度の単位を度からラジアンに変換するには、度に π/180 を掛けます。ラジアンから度に変換するには、ラジアンに 180/πを掛けます。


Sqr 関数

数式の平方根を倍精度浮動小数点数型 (Double) の値で返す数値演算関数です。

構文

Sqr(number)

引数 number は必ず指定します。引数 number には、0 以上の倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定します。


Tan 関数

指定した角度のタンジェントを倍精度浮動小数点数型 (Double) の値で返す数値演算関数です。

構文

Tan(number)

引数 number は必ず指定します。引数 number には、角度を表す倍精度浮動小数点数型 (Double) の数値または任意の有効な数式 (単位はラジアン) を指定します。

解説

Tan 関数は、引数として角度を受け取り、その角度を含む直角三角形の 2 辺の比を返します。ここでいう 2 辺とは、直角をはさむ 2 つの辺を指します。2 辺の比は、指定した角の反対側の辺 (対辺) の長さを、もう一方の辺 (底辺、つまり指定した角に隣接する側の辺) の長さで割った値です。

角度の単位を度からラジアンに変換するには、度に π/180 を掛けます。ラジアンから度に変換するには、ラジアンに 180/πを掛けます。


超越関数

Visual Basic に組み込まれていない数値演算関数の導出式を、次の表に示します。これらの数値演算関数は、いずれも Visual Basic の組み込み関数から導くことができます。

数値演算関数	Visual Basic の組み込み関数を使った導出式
セカント	Sec(X) = 1 / Cos(X)
コセカント	Cosec(X) = 1 / Sin(X)
コタンジェント	Cotan(X) = 1 / Tan(X)
アークサイン	Arcsin(X) = Atn(X / Sqr(-X * X + 1))
アークコサイン	Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
アークセカント	Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1))
アークコセカント	Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
アークコタンジェント	Arccotan(X) = Atn(X) + 2 * Atn(1)
双曲線サイン	HSin(X) = (Exp(X) - Exp(-X)) / 2
双曲線コサイン	HCos(X) = (Exp(X) + Exp(-X)) / 2
双曲線タンジェント	HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
双曲線セカント	HSec(X) = 2 / (Exp(X) + Exp(-X))
双曲線コセカント	HCosec(X) = 2 / (Exp(X) - Exp(-X))
双曲線コタンジェント	HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
双曲線アークサイン	HArcsin(X) = Log(X + Sqr(X * X + 1))
双曲線アークコサイン	HArccos(X) = Log(X + Sqr(X * X - 1))
双曲線アークタンジェント	HArctan(X) = Log((1 + X) / (1 - X)) / 2
双曲線アークセカント	HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
双曲線アークコセカント	HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
双曲線アークコタンジェント	HArccotan(X) = Log((X + 1) / (X - 1)) / 2
対数	LogN(X) = Log(X) / Log(N)


Add メソッドの使用例

次の例は、Add メソッドを使って、Inst オブジェクト (パブリック変数 InstanceName を格納する Class1 という名前のクラスのインスタンス) を MyClasses という名前のコレクションに追加します。このプログラムがどのように動作するかを確認するには、まず、クラス モジュールを挿入し、各インスタンスの名前を格納する変数として、InstanceName という名前のパブリック変数を Class1 のモジュール レベルで宣言します (「Public InstanceName」と入力)。また、クラス名は既定の Class1 のままにしておきます。変数を宣言したら、次のコードをコピーして、Form_Load イベント プロシージャに貼り付けてください。

Dim MyClasses As New Collection	' Collection オブジェクトを作成します。

Dim Num As Integer	' 各インスタンスに個別のキーを与えるためのカウンタを宣言します。

Dim Msg

Dim TheName	' ユーザーが入力する情報を格納する変数を宣言します。

Do

Dim Inst As New Class1	' Class1 の新規インスタンスを作成します。

Num = Num + 1	' Num の値を増加させ、名前を取得します。

Msg = "このｵﾌﾞｼﾞｪｸﾄの名前を入力してください。" & Chr(13) _

 & "ｺﾚｸｼｮﾝ内の名前を確認するには、ｷｬﾝｾﾙ ﾎﾞﾀﾝを押してください。"

TheName = InputBox(Msg, "ｺﾚｸｼｮﾝ項目の名前")

Inst.InstanceName = TheName	' オブジェクトのインスタンスに名前を付けます。

' ユーザーが名前を入力したら、インスタンスをコレクションに追加します。

If Inst.InstanceName <> "" Then

' 名前が付与されたオブジェクトをコレクションに追加します。

MyClasses.Add item := Inst, key := CStr(Num)

End If

' 現在の参照を解除して、次のインスタンスの追加に備えます。

Set Inst = Nothing

Loop Until TheName = ""

For Each x In MyClasses

MsgBox x.instancename, , "ｲﾝｽﾀﾝｽ名"

Next


Clear メソッドの使用例

次の例は、Clear メソッドを使って、Err オブジェクトの数値型のプロパティは 0 で、文字列型のプロパティは長さ 0 の文字列でリセットします。このプログラムで Clear メソッドを使用しない場合、一度エラーが発生すると、その後の計算でエラーが発生するかどうかに関係なく、ループのたびにエラー メッセージ ダイアログ ボックスが表示されます。

Dim Result(4) As Integer	' 要素がすぐにオーバーフローするような配列を宣言します。

Dim indx

On Error Resume Next	' エラーのトラップを留保します。

Do Until indx = 4

' 場合によってエラーを発生させ、エラーがない場合は結果を格納します。

Result(indx) = Rnd * indx * 20000

If Err.Number <> 0 Then

MsgBox Err, , "発生したｴﾗｰ: ", Err.HelpFile, Err.HelpContext

Err.Clear	' Err オブジェクトのプロパティをクリアします。

Else

indx = indx + 1

End If

Loop


Item メソッドの使用例

次の例は、Item メソッドを使って、コレクションに含まれるオブジェクトへの参照を検索します。このコードでは、Birthdays という名前の Collection オブジェクトを対象にして、Bill Smith および Adam Smith の誕生日を表すオブジェクトへの参照を検索します。引数 index には、オブジェクトのキーである "SmithBill" および "SmithAdam" を渡します。Birthdays コレクションを最初に呼び出すときには、Item メソッドが明示的に指定されていますが、2 回目の呼び出しでは明示的に指定されていないことに注意してください。Collection オブジェクトでは、Item メソッドが既定のメソッドとなるため、いずれの呼び出し方法も同じ結果になります。参照は、Set ステートメントを使って SmithBillBD と SmithAdamBD に代入されていますが、指定されたオブジェクトのプロパティとメソッドには、これらの参照を使ってアクセスすることができます。このコードを実行するには、Birthdays という名前のコレクションを作成し、そのコレクションに少なくとも 2 つの参照メンバを定義してください。

Dim SmithBillBD As Object

Dim SmithAdamBD As Object

Dim Birthdays

Set SmithBillBD = Birthdays.Item("SmithBill")

Set SmithAdamBD = Birthdays("SmithAdam")


Print メソッドの使用例

次の例は、Print メソッドを使って、MyVar という名前の変数の値をイミディエイト ウィンドウに表示します。Print メソッドは、テキストを表示できるオブジェクトにのみ適用できます。

Dim MyVar

MyVar = "Come see me in the Immediate pane."

Debug.Print MyVar


Raise メソッドの使用例

次の例は、Err オブジェクトの Raise メソッドを使って、Visual Basic で記述されたオートメーション オブジェクトの中でエラーを発生させます。プログラム ID は、MyProj.MyObject です。 MacIntosh の場合、既定のドライブ名は 党HD媒 になり、パス名は円記号 ("\") ではなくコロン (":") で区切ります。

Const MyContextID = 1010407	' contextID の定数を定義します。

Function TestName(CurrentName, NewName)

If Instr(NewName, "bob") Then	' NewName の内容が正しいかどうか調べます。

' 例外を発生させます。

Err.Raise vbObjectError + 513, "MyProj.MyObject", _

"""bob"" という文字列を名前に含めることはできません。", "c:\MyProj\MyHelp.Hlp", _

MyContextID

End If

End Function


Remove メソッドの使用例

次の例は、Remove メソッドを使って、MyClasses という名前の Collection オブジェクトからオブジェクトを削除します。このコードでは、ループが反復されるごとにインデックスが 1 のオブジェクトが削除されます。

Dim Num, MyClasses

For Num = 1 To MyClasses.Count

MyClasses.Remove 1	' ループを反復するごとに先頭のオブジェクトを削除します。

' このループは、コレクションのオブジェクトがすべて削除されるまで反復します。

Next Num


Add メソッド

Collection オブジェクトにメンバを追加します。

構文

object.Add item, key, before, after

Add メソッドの構文は、次の対象となるオブジェクトと名前付き引数から構成されます。

指定項目	内容
object	必ず指定します。オブジェクトへの参照を表すオブジェクト式を指定します。
item	必ず指定します。コレクションに追加するメンバを表す式を指定します。
key	省略可能です。コレクションの各メンバの処理をするときに、位置を表す数値の代わりに使用できる重複しない文字列を文字列式で指定します。
before	省略可能です。コレクションの中の相対的な位置を表す式を指定します。追加対象のメンバは、コレクション内の名前付き引数 before で指定したメンバの前に追加されます。数式を使って指定する場合、名前付き引数 before には 1 からコレクションの Count プロパティの値までの範囲の整数を指定する必要があります。文字列式を使って指定する場合、名前付き引数 before には参照先のメンバをコレクションに追加したときに指定した名前付き引数 key と一致する文字列を指定しなければなりません。なお、名前付き引数 before および名前付き引数 after を同時に指定することはできません。いずれか一方だけ指定できます。
after	省略可能です。コレクションの中の相対的な位置を表す式を指定します。追加対象のメンバは、コレクション内の名前付き引数 after で指定したメンバの後ろに追加されます。数式を使って指定する場合、名前付き引数 after には 1 からコレクションの Count プロパティの値までの範囲の整数を指定する必要があります。文字列式を使って指定する場合、名前付き引数 after には参照先のメンバをコレクションに追加したときに指定した名前付き引数 key と一致する文字列を指定しなければなりません。ただし、名前付き引数 before および名前付き引数 after を同時に指定することはできません。いずれか一方だけ指定できます。
解説

引数 before または引数 after  が文字列式または数式のどちらの場合も、引数がコレクションの既存のメンバを参照している必要があります。参照していない場合は、エラーが発生します。

また、追加するメンバの名前付き引数 key に、コレクションの既存のメンバの key と重複する値を指定した場合もエラーが発生します。


Clear メソッド

Err オブジェクトのすべてのプロパティの設定値をクリアします。

構文

object.Clear

object には、Err オブジェクトへの参照を表すオブジェクト式を指定します。

解説

Clear メソッドを使うと、エラーを処理した後で Err オブジェクトを明示的にクリアすることができます。たとえば、On Error Resume Next ステートメントを使用した後でエラー処理を行うときなどです。次のいずれかのステートメントが実行されると、Clear メソッドが自動的に呼び出されます。

•	任意の Resume ステートメント

•	Exit Sub ステートメント、Exit Function ステートメント、および Exit Property ステートメント

•	任意の On Error ステートメント

メモ   他のオブジェクトへのアクセス中に発生するエラーを処理するときには、On Error GoTo ステートメントよりも On Error Resume Next ステートメントの方が適しています。オブジェクトに対してアクセスするたびに Err オブジェクトの値を確認すると、エラーの発生時にコードがどのオブジェクトにアクセスしていたかが明確になります。どのオブジェクトが Err オブジェクトの Number プロパティにエラー番号を設定したか、およびどのオブジェクトが最初にエラーを発生させたか (Err オブジェクトの Source プロパティに指定されるオブジェクト) を確認できます。


Item メソッド

指定した位置または文字列に対応する特定の Collection オブジェクトのメンバを返します。

構文

object.Item(index)

Item メソッドの構文は、次の対象となるオブジェクトと名前付き引数から構成されます。

指定項目	内容
object	必ず指定します。オブジェクトへの参照を表すオブジェクト式を指定します。
index	必ず指定します。コレクションのメンバの位置を式で指定します。数式を使って指定する場合、引数 index には 1 からコレクションの Count プロパティの値までの範囲の整数を指定する必要があります。文字列式を使って指定する場合、引数 index には、参照先のメンバをコレクションに追加したときに指定した名前付き引数 key に一致する文字列を指定しなければなりません。
解説

引数 index に指定した値がコレクションの既存のメンバのいずれにも一致しない場合は、エラーが発生します。

Item メソッドはコレクションの既定メソッドなので、次に示す 2 行のコードの意味は同じです。

Print MyCollection(1)

Print MyCollection.Item(1)


Print メソッド

イミディエイト ペイン内に数値、文字列などを出力します。

構文

object.Print [outputlist]

Print メソッドの構文は、次の対象となるオブジェクトと指定項目から構成されます。

指定項目	内容
object	省略可能です。オブジェクトへの参照を表すオブジェクト式を指定します。
outputlist	省略可能です。出力する式、または式のリストを指定します。省略すると、空白行が出力されます。
引数 outputlist の構文と指定項目は次のとおりです。

{Spc(n) | Tab(n)} expression charpos

指定項目	内容
Spc(n)	省略可能です。出力にスペースを挿入するときに指定します。n には挿入するスペースの数を指定します。
Tab(n)	省略可能です。n で指定した絶対桁位置にカーソルを移動します。(n) を省略して Tab だけを指定すると、カーソルは次の印字領域の先頭に移動します。
expression	省略可能です。出力する数式または文字列式を指定します。
charpos	省略可能です。次の文字を出力するためのカーソル位置を指定します。最後に出力された文字の直後にカーソルを移動するには、セミコロン (;) を指定します。絶対桁位置を指定してカーソルを移動するには、Tab(n) を指定します。次の印字領域の先頭にカーソルを移動するには、引数 (n) を指定せずに Tab を指定します。引数 charpos を省略すると、次の文字は次の行に出力されます。
解説

引数 expression に複数の式を指定する場合は、各式の間をスペースまたはセミコロン (;) で区切ります。

イミディエイト ウィンドウに出力されるすべてのデータは、使用しているシステムで指定されている国別情報の設定に従って、適切に小数点記号が設定されます。キーワードはホスト アプリケーションに適切な言語で出力されます。

ブール型 (Boolean) のデータでは、True または False が出力されます。キーワード True またはキーワード False は、ホスト アプリケーションの国別情報の設定に従って変換されます。

日付型 (Date) のデータは、オペレーティング システムの日付の短い形式で出力されます。日付部分か時刻部分のいずれかが不足している場合、またはいずれかが 0 の場合は、指定された部分だけが出力されます。

引数 outputlist のデータが Empty 値の場合は何も出力されません。これに対し、引数 outputlist のデータが Null 値の場合は Null が出力されます。キーワード Null の出力には、国別情報の設定が反映されます。

エラーのデータは Error errorcode の形式で出力されます。キーワード Error の出力には、国別情報の設定が反映されます。

既定の表示領域を持つモジュールの適用範囲外でメソッドを使用する場合は、引数 object を必ず指定します。たとえば、標準モジュールで引数 object を指定しないでメソッドを呼び出すと、エラーが発生します。フォーム モジュールでメソッドを呼び出すと、リストがフォームに表示されます。

メモ   Print メソッドを使用すると、通常、出力はプロポーショナル フォント (可変幅のフォント) で表示されます。出力される文字数と固定幅の桁数に相互関係はありません。たとえば、"W" のような幅広の文字は固定幅の桁 1 つ分よりも多くの幅を占めますが、"i" のような細い文字は桁 1 つ分より幅は小さくなります。平均よりも幅の広い文字が使われた場合に備えて、出力文字列間の桁数は、十分に確保する必要があります。または、固定幅のフォント (Courier など) を使って、1 文字あたり常に 1 桁になるように出力することもできます。


Raise メソッド

実行時エラーを生成します。

構文

object.Raise number, source, description, helpfile, helpcontext

Raise メソッドの構文は、次の対象となるオブジェクトと名前付き引数から構成されています。

指定項目	内容
object	必ず指定します。Err オブジェクトへの参照を表すオブジェクト式を指定します。
number	必ず指定します。指定するオブジェクトの Number プロパティに対応し、エラーに割り当てられているエラー番号を示す長整数型 (Long) の整数を指定します。Visual Basic のエラー (Visual Basic の組み込みのエラーとユーザー定義エラー) は、0 ～ 65535 の範囲の値です。0 ～ 512 の値はシステム エラー用に予約されているため、ユーザー定義のエラーに使用できるのは、513 ～ 65535 の範囲の値です。クラス モジュール内で独自のエラー番号を設定するときには、エラー番号を定数 vbObjectError に追加します。たとえば、エラー番号 1050 を発生させるには、名前付き引数 Number に vbObjectError + 513 を割り当てます。
source	省略可能です。エラーを発生させたオブジェクトまたはアプリケーションを指定する文字列式です。オブジェクトにこのプロパティを設定するときには、project.class の形式で設定します。引数 source を指定しないと、現在の Visual Basic プロジェクトのプログラム ID が使われます。
description	省略可能です。エラー メッセージを表す文字列式を指定します。省略した場合、名前付き引数 Number の値が調べられます。Visual Basic の実行時エラーの番号の中に、名前付き引数 Number の値に対応するものがあれば、Error 関数の戻り値が名前付き引数 Description として使われます。名前付き引数 Number に対応する Visual Basic のエラーがない場合は、メッセージ "アプリケーション定義またはオブジェクト定義のエラーです。" が使用されます。
helpfile	省略可能です。このエラーに関するヘルプ トピックが含まれる Microsoft Windows のヘルプ ファイルの絶対パスを指定します。絶対パスを指定していない場合は、Visual Basic ヘルプ ファイルのドライブ、パス、およびファイル名が使用されます。
helpcontext	省略可能です。名前付き引数 helpfile 内の指定したエラーに関するトピックのコンテキスト番号を指定します。このコンテキスト番号を省略すると、Number プロパティに対応する Visual Basic ヘルプ ファイルのエラー コンテキスト番号が存在するときには、その番号が使われます。
解説

number を除き、すべての名前付き引数は省略可能です。ただし、いくつかの引数を指定せずに Raise メソッドを実行したときに、Err オブジェクトの各プロパティの設定値がクリアされていないと、その値がエラーを表す値として使用されます。

Raise メソッドは、Error ステートメントの代わりに、実行時エラーを生成するために使用できます。Err オブジェクトを使うと、Error ステートメントを使ってエラーを生成するときよりも豊富な情報を取得できるので、クラス モジュールを作成するときにエラーを生成するには Raise メソッドが便利です。たとえば、Raise メソッドを使用すると、エラーを発生元が Source プロパティに設定され、エラーに対するオンライン ヘルプなどを参照できます。


Remove メソッド

Collection オブジェクトからメンバを削除します。

構文

object.Remove index

Remove メソッドの構文は、次の対象となるオブジェクトと指定項目から構成されます。

指定項目	内容
object	必ず指定します。オブジェクトへの参照を表すオブジェクト式を指定します。
index	必ず指定します。コレクションのメンバの位置を式で指定します。数式を使って指定する場合、引数 index には 1 からコレクションの Count プロパティの値までの範囲の整数を指定する必要があります。文字列式を使って指定する場合、引数 index には、参照先のメンバをコレクションに追加したときに指定した名前付き引数 key に一致する文字列を指定しなければなりません。
解説

引数 index に指定した値がコレクションの既存のメンバに一致しない場合は、エラーが発生します。


AppActivate ステートメントの使用例

次の例は、AppActivate ステートメントを使って、アプリケーション ウィンドウをアクティブにします。アプリケーションの実行に Shell ステートメントを使っていますが、指定されたパスにアプリケーションの実行プログラムが保存されていなければ、アプリケーションを実行することはできません。 MacIntosh の場合、既定のドライブ名は 党HD媒 になり、パス名は円記号 ("\") ではなくコロン (":") で区切ります。

Dim MyAppID, ReturnValue

AppActivate "Microsoft Word"	' Microsoft Word をアクティブにします。

' AppActivate ステートメントでは Shell 関数の戻り値を使うこともできます。

MyAppID = Shell("C:\Program Files\Microsoft Office\Office\WINWORD.EXE", 1)	' Microsoft Word を実行します。

AppActivate MyAppID	' Microsoft Word をアクティブにします。

' Shell 関数の戻り値を使うこともできます。

ReturnValue = Shell("c:\Program Files\Microsoft Office\Office\EXCEL.EXE",1)	' Microsoft Excel を実行します。

AppActivate ReturnValue	' Microsoft Excel をアクティブにします。


Beep ステートメントの使用例

次の例は、Beep ステートメントを使って、コンピュータのスピーカを 3 回連続して鳴らします。

Dim I

For I = 1 To 3	' ループを 3 回繰り返します。

Beep	' ビープ音を鳴らします。

Next I


Command 関数の使用例

次の例は、Command 関数を使って、配列を格納したバリアント型 (Variant) を返す関数のコマンド ラインの引数を取得します。Microsoft Office.では、この関数は使用できません。

Function GetCommandLine(Optional MaxArgs)

' 変数を宣言します。

Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs

' MaxArgs が提供されるかどうかを調べます。

If IsMissing(MaxArgs) Then MaxArgs = 10

' 現在のサイズの配列にします。

ReDim ArgArray(MaxArgs)

NumArgs = 0: InArg = False

' コマンド ラインの引数を取得します。

CmdLine = Command()

CmdLnLen = Len(CmdLine)

' 同時にコマンド ラインの引数を取得します。

For I = 1 To CmdLnLen

C = Mid(CmdLine, I, 1)

' スペースまたはタブを調べます。

If (C <> " " And C <> vbTab) Then

' スペースまたはタブのいずれでもありません。

' 既に引数の中ではないかどうかを調べます。

If Not InArg Then

' 新しい引数が始まります。

' 引数が多すぎないかを調べます。

If NumArgs = MaxArgs Then Exit For

NumArgs = NumArgs + 1

InArg = True

End If

' 現在の引数に文字を追加します。

ArgArray(NumArgs) = ArgArray(NumArgs) & C

Else

' スペースまたはタブを見つけました。

' InArg フラグに False を設定します。

InArg = False

End If

Next I

' 引数がすべて格納できるように配列のサイズを変更します。

ReDim Preserve ArgArray(NumArgs)

' 関数名に配列を返します。

GetCommandLine = ArgArray()

End Function


InputBox 関数の使用例

次の例は、InputBox 関数を使って、ユーザーに値を入力させます。位置 x と y の指定を省略すると、ダイアログ ボックスは、水平軸および垂直軸に対して中央に自動的に配置されます。[OK] がクリックされるか、Enter キーが押されると、変数 MyValue には、ユーザーの入力した値が入ります。[キャンセル] がクリックされると、InputBox 関数は長さ 0 の文字列を返します。

Dim Message, Title, Default, MyValue

Message = "1 から 3 までの値を入力してください。"	' 入力を求めるメッセージを設定します。

Title = "InputBox ﾃﾞﾓ"	' タイトルを設定します。

Default = "1"	' 既定値を設定します。

' メッセージ、タイトル、既定値を表示します。

MyValue = InputBox(Message, Title, Default)

' 状況依存のヘルプを設定します。ヘルプ ボタンが自動的に追加されます。

MyValue = InputBox(Message, Title, , , , "DEMO.HLP", 10)

' ダイアログ ボックスを位置 100,100 に表示します。

MyValue = InputBox(Message, Title, Default, 100, 100)


MsgBox 関数の使用例

次の例は、MsgBox 関数を使って、致命的なエラーが発生したときのエラー メッセージをダイアログ ボックスに表示します。このダイアログ ボックスには、[はい] と [いいえ] があり、[いいえ] が既定のボタンとして指定されています。MsgBox 関数の返す値は、選択されたボタンによって決まります。ここでは、ファイル DEMO.HLP をコンテキスト番号 1000 のトピックのあるヘルプ ファイルと仮定します。

Dim Msg, Style, Title, Help, Ctxt, Response, MyString

Msg = "続行しますか。"	' メッセージを定義します。

Style = vbYesNo + vbCritical + vbDefaultButton2	' ボタンを定義します。

Title = "MsgBox ﾃﾞﾓ"	' タイトルを定義します。

Help = "DEMO.HLP"	' ヘルプ ファイルを定義します。

Ctxt = 1000	' トピック コンテキストを定義します。

' メッセージを表示します。

Response = MsgBox(Msg, Style, Title, Help, Ctxt)

If Response = vbYes Then	' [はい] がクリックされた場合、

MyString = "Yes"	' 所定の動作を実行します。

Else	' [いいえ] がクリックされた場合、

MyString = "No"	' 所定の動作を実行します。

End If


SendKeys ステートメントの使用例

次の例は、Shell 関数を使って、Microsoft Windows に付属している電卓アプリケーションを実行します。SendKeys ステートメントでキーストロークを転送して、数値の加算を行ってから電卓アプリケーションを終了します。このプログラムを実行するには、コードを任意のプロシージャに貼り付けてから、そのプロシージャを実行してください。AppActivate ステートメントによって、フォーカスが電卓アプリケーションに移動するため、このコードをシングル ステップで実行することはできません。Macintosh の場合には、キーボードからの入力が可能な、アップル メニューの計算機などのアプリケーションを使用してください。

SendKeys ステートメントは、Macintosh では実行できません。

Dim ReturnValue, I

ReturnValue = Shell("CALC.EXE", 1)	' 電卓を実行します。

AppActivate ReturnValue 	' 電卓をアクティブにします。

For I = 1 To 20	' ループ カウンタを設定します。

SendKeys I & "{+}", True	' 電卓にキー コードを転送して、

Next I	' I の値に 1 を加算します。

SendKeys "=", True	' 和を求めます。

SendKeys "%{F4}", True	' Alt + F4 キーを転送して電卓を終了します。


AppActivate ステートメント

アプリケーション ウィンドウをアクティブにします。

構文

AppActivate title[, wait]

AppActivate ステートメントの構文は、次の名前付き引数から構成されます。

指定項目	内容
title	必ず指定します。アクティブにするアプリケーション ウィンドウのタイトル バーのタイトルを表す文字列式を指定します。名前付き引数 title に Shell 関数によって返されるタスク ID を指定して、アプリケーションをアクティブにすることもできます。
wait	省略可能です。名前付き引数 title で指定したアプリケーションをアクティブにする前に呼び出し側のアプリケーションにフォーカスを持たせるかどうかを、次に示すブール型 (Boolean) の値を使って設定します。 (既定値) False 呼び出し側のアプリケーションがフォーカスを持っていなくても、指定したアプリケーションをアクティブにします。 True 呼び出し側のアプリケーションがフォーカスを持つまで待機し、指定したアプリケーションをアクティブにします。
解説

AppActivate ステートメントは、指定したアプリケーションやウィンドウにフォーカスを移します。このとき、フォーカスが移っても指定したウィンドウの状態は変化しません。たとえば、最小化されているウィンドウにフォーカスを移しても、そのウィンドウは最小化されたままです。ユーザーがフォーカスを変更するか、またはウィンドウを閉じると、他のウィンドウへフォーカスが移ります。アプリケーションを実行するには、Shell 関数を使用します。また、ウィンドウ スタイルの設定をする場合にも Shell 関数を使用します。

アプリケーション ウィンドウのタイトル バーの文字列と名前付き引数 title が完全に一致しているかどうかを比較することによって、どのアプリケーションをアクティブにするかが判別されます。完全に一致するものが見つからないときは、アプリケーション ウィンドウのタイトル バーの文字列が名前付き引数 title で始まるアプリケーションをアクティブにします。名前付き引数 title と一致するアプリケーション ウィンドウが複数ある場合も、その中の 1 つが任意に選択されてアクティブになります。


Beep ステートメント

コンピュータのスピーカを鳴らします。

構文

Beep

解説

ビープ音の鳴る時間と周波数はハードウェアとシステム ソフトウェアに依存するため、コンピュータの機種によって異なります。


Command 関数

Microsoft Visual Basic または Visual Basic で開発した実行可能なプログラムを起動させるために使用するコマンド ラインの引数の部分を返します。Visual Basic の Command 関数は Microsoft Office アプリケーションでは使用できません。.

構文

Command

解説

Visual Basic がコマンド ラインから起動されるとき、次に示す /cmd のようなコマンド ラインの一部がコマンド ラインの引数としてプログラムに引き渡されます。次の例では、cmdlineargs は Command 関数が返す引数情報を表します。

VB /cmd cmdlineargs

アプリケーションを Visual Basic で開発したり、EXE ファイルをコンパイルする場合、Command 関数は、コマンド ライン上のアプリケーションの名前の後の引数を返します。次に例を示します。

MyApp cmdlineargs

使用しているアプリケーションのユーザー インターフェイスで変更できるコマンド ラインの引数を調べるには、ヘルプで "コマンド ラインの引数" を検索してください。


InputBox 関数

文字列型 (String) の値を返します。ダイアログ ボックスにメッセージとテキスト ボックスを表示し、文字列が入力されるか、またはボタンがクリックされると、テキスト ボックスの内容を返します。

構文

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

InputBox 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
prompt	必ず指定します。ダイアログ ボックス内にメッセージとして表示する文字列を示す文字列式を指定します。名前付き引数 prompt に指定できる最大文字数は、1 バイト文字で約 1,024 文字です。ただし、使う文字の文字幅に依存します。名前付き引数 prompt に複数行を指定する場合は、キャリッジ リターン (Chr(13))、ライン フィード (Chr(10))、またはキャリッジ リターンとライン フィードの組み合わせ (Chr(13) & Chr(10)) を改行する位置に挿入し、行を区切ってください。
title	省略可能です。ダイアログ ボックスのタイトル バーに表示する文字列式を指定します。名前付き引数 title を省略すると、タイトル バーにはアプリケーション名が表示されます。
default	省略可能です。ユーザーが何も入力しない場合に、テキスト ボックスに既定値として表示する文字列式を指定します。名前付き引数 default を省略すると、テキスト ボックスには何も表示されません。
xpos	省略可能です。画面の左端からダイアログ ボックスの左端までの水平方向の距離を、twip 単位で示す数式を指定します。名前付き引数 xpos を省略すると、ダイアログ ボックスは水平方向に対して画面の中央の位置に配置されます。
ypos	省略可能です。画面の上端からダイアログ ボックスの上端までの垂直方向の距離を、twip 単位で示す数式を指定します。名前付き引数 ypos を省略すると、ダイアログ ボックスは垂直方向に対して画面の上端から約 1/3 の位置に配置されます。
helpfile	省略可能です。ダイアログ ボックスに状況依存のヘルプを設定するために、使用するヘルプ ファイルの名前を示す文字列式を指定します。この引数は、表示するダイアログ ボックスの説明を、ヘルプを使って表示するときに指定します。名前付き引数 helpfile を指定した場合は、名前付き引数 context も指定する必要があります。
context	省略可能です。ヘルプ トピックに指定したコンテキスト番号を表す数式を指定します。名前付き引数 context を指定した場合は、名前付き引数 helpfile も指定する必要があります。
解説

名前付き引数 helpfile と context の両方を指定すると、ユーザ-は F1 キー(Windows の場合) または Help キー (Macintosh の場合) を押してコンテキスト番号に対応するヘルプ トピックを参照できます。たとえば Microsoft Excel などのホスト アプリケーションでは、自動的にダイアログ ボックスに [OK] ボタンが追加されます。[OK] ボタンをクリックするか、または Enter  キーを押すと、InputBox 関数はテキスト ボックスの内容を返します。[キャンセル] ボタンをクリックすると、InputBox 関数は長さ 0 の文字列 ("") を返します。

メモ   名前付き引数 prompt 以外の引数も指定する場合は、式の中で InputBox 関数を使う必要があります。この場合、引数を省略するには、それに対応する位置にカンマ区切り記号を記述します。


MsgBox 関数

整数型 (Integer) の値を返します。ダイアログ ボックスにメッセージを表示し、ボタンがクリックされるのを待って、どのボタンがクリックされたのかを示す値を返します。

構文

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

MsgBox 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
prompt	必ず指定します。ダイアログ ボックス内にメッセージとして表示する文字列を示す文字列式を指定します。名前付き引数 prompt に指定できる最大文字数は、1 バイト文字で約 1,024 文字です。ただし、使う文字の文字幅に依存します。名前付き引数 prompt に複数行を指定する場合は、キャリッジ リターン (Chr(13))、ライン フィード (Chr(10))、またはキャリッジ リターンとライン フィードの組み合わせ (Chr(13) & Chr(10)) を改行する位置に挿入し、行を区切ってください。
buttons	省略可能です。表示されるボタンの種類と個数、使用するアイコンのスタイル、標準ボタン、メッセージ ボックスがモーダルかどうかなどを表す値の合計値を示す数式を指定します。省略すると、名前付き引数 buttons の既定値 0 になります。
title	省略可能です。ダイアログ ボックスのタイトル バーに表示する文字列を示す文字列式を指定します。名前付き引数 title を省略すると、タイトル バーにはアプリケーション名が表示されます。
helpfile	省略可能です。ダイアログ ボックスに状況依存のヘルプを設定するために、使用するヘルプ ファイルの名前を示す文字列式を指定します。この引数は、表示するダイアログ ボックスの説明をヘルプを使って表示するときに指定します。名前付き引数 helpfile を指定した場合は、引数 context も指定する必要があります。
context	省略可能です。ヘルプ トピックに指定したコンテキスト番号を表す数式を指定します。名前付き引数 context を指定した場合は、引数 helpfile も指定する必要があります。
設定値

名前付き引数 buttons には、次の値のうち、該当する値の合計値を指定します。

定数	値	内容
vbOKOnly	0	[OK] ボタンのみを表示します。
vbOKCancel	1	[OK] ボタンと [キャンセル] ボタンを表示します。
vbAbortRetryIgnore	2	[中止]、[再試行]、および [無視] の 3 つのボタンを表示します。
vbYesNoCancel	3	[はい]、[いいえ]、および [キャンセル] の 3 つのボタンを表示します。
vbYesNo	4	[はい] ボタンと [いいえ] ボタンを表示します。
vbRetryCancel	5	[再試行] ボタンと [キャンセル] ボタンを表示します。
vbCritical	16	警告メッセージ アイコンを表示します。
vbQuestion	32	問い合わせメッセージ アイコンを表示します。
vbExclamation	48	注意メッセージ アイコンを表示します。
vbInformation	64	情報メッセージ アイコンを表示します。
vbDefaultButton1	0	第 1 ボタンを標準ボタンにします。
vbDefaultButton2	256	第 2 ボタンを標準ボタンにします。
vbDefaultButton3	512	第 3 ボタンを標準ボタンにします。
vbDefaultButton4	768	第 4 ボタンを標準ボタンにします。
vbApplicationModal	0	アプリケーション モーダルに設定します。メッセージ ボックスに応答するまで、現在選択中のアプリケーションの実行を継続できません。
vbSystemModal	4096	システム モーダルに設定します。メッセージ ボックスに応答するまで、すべてのアプリケーションが中断されます。
vbMsgBoxHelpButton	16384	ヘルプ ボタンを追加します。
VbMsgBoxSetForeground	65536	最前面のウィンドウとして表示します。
vbMsgBoxRight	524288	テキストを右寄せで表示します。
vbMsgBoxRtlReading	1048576	テキストを、右から左の方向で表示します。
最初のグループに属する値 (0 ～ 5) は、ダイアログ ボックスに表示されるボタンの種類と個数を指定します。次のグループに属する値 (16、32、48、64) は、アイコンの種類を指定します。第 3 のグループに属する値 (0、256、512) は、どのボタンが標準ボタンになるかを指定します。最後のグループに属する値 (0、4096) は、メッセージ ボックスがモーダルかどうかを指定します。名前付き引数 buttons の値を設定するには、各グループから値を 1 つずつ選択して加算した合計値を指定します。

メモ   ここに示した定数は Visual Basic for Applications で設定されています。したがって、これらの定数はコード内の任意の場所で実際の値を記述する代わりに使用できます。

戻り値

定数	値	説明
vbOK	1	[OK]
vbCancel	2	[キャンセル]
vbAbort	3	[中止]
vbRetry	4	[再試行]
vbIgnore	5	[無視]
vbYes	6	[はい]
vbNo	7	[いいえ]
解説

名前付き引数 helpfile および context を指定すると、F1 キー(Windows の場合) または Help キー(Macintosh の場合) を押すことにより、コンテキスト番号に対応したヘルプ トピックを参照できます。ホスト アプリケーションによっては、自動的に [ヘルプ] ボタンが追加されます。

[キャンセル] ボタンが表示されているダイアログ ボックスでは、Esc キーを押すと、[キャンセル] ボタンをクリックしたときと同じ結果になります。ダイアログ ボックスに [ヘルプ] ボタンが表示されているときは、そのダイアログ ボックスには状況依存のヘルプが設定されています。ただし、[ヘルプ] ボタン以外のボタンがクリックされるまでは、値を返しません。

メモ   名前付き引数 prompt 以外の引数も指定する場合は、式の中で MsgBox 関数を使う必要があります。この場合、引数を省略するには、それに対応するカンマ区切り記号を記述します。


SendKeys ステートメント

キーストロークまたはキーストロークの組み合わせを、キーボードから入力したときと同様にアクティブ ウィンドウに渡します。

構文

SendKeys string[, wait]

SendKeys ステートメントの構文は、次の名前付き引数から構成されます。

指定項目	内容
string	必ず指定します。転送するキー コードを表す文字列式を指定します。
wait	省略可能です。名前付き引数 string の転送によって行われる処理が終了するまで、実行を一時中断するかどうかを次に示すブール型 (Boolean) の値で指定します。 (既定値) False プロシージャの終了を待たずに次の行に制御を移します。 True 処理が終了するまで実行を一時中断します。
解説

キーボードの各キーは 1 つ以上の文字で表されます。キーボード上の文字を渡すには、キーの指定にその文字を使います。たとえば、キーボード上の文字 A を表すには、名前付き引数 string に "A" を指定します。複数の文字を表すには、文字を連続して設定します。たとえば、文字 A、B、C を表すには、名前付き引数 string に "ABC" と指定します。

プラス記号 (+)、キャレット (^)、パーセント記号 (%)、チルダ (~)、かっこ (( )) はそれぞれ SendKeys ステートメントで特別な意味を持っています。これらの文字を渡すには、文字を中かっこ ({ }) で囲んで指定します。たとえば、プラス記号は {+} のように指定します。角かっこ ([ ]) は SendKeys ステートメントでは特別な意味を持ちませんが、Microsoft Windows の他のアプリケーションで特別な意味を持つ場合があるので、中かっこで囲みます。これは、ダイナミック データ エクスチェンジ (DDE) を行うときに角かっこが重要になることがあるためです。文字として中かっこを渡すには、{{} または {}} を使います。

キーを押したときに表示されない文字 (Enter キーや Tab キーなど) または、文字ではなく動作を表すキーを指定するには、次に示すコードを使います。

キー	コード
BackSpace	{BACKSPACE}、{BS}、または {BKSP}
Ctrl + Break	{BREAK}
CapsLock	{CAPSLOCK}
Del または Delete	{DELETE} または {DEL}
↓	{DOWN}
End	{END}
Enter	{ENTER}または {~}
Esc	{ESC}
Help	{HELP}
Home	{HOME}
Ins または Insert	{INSERT} または {INS}
←	{LEFT}
NumLock	{NUMLOCK}
PageDown	{PGDN}
PageUp	{PGUP}
PrintScreen	{PRTSC}
→	{RIGHT}
ScrollLock	{SCROLLLOCK}
Tab	{TAB}
↑	{UP}
F1	{F1}
F2	{F2}
F3	{F3}
F4	{F4}
F5	{F5}
F6	{F6}
F7	{F7}
F8	{F8}
F9	{F9}
F10	{F10}
F11	{F11}
F12	{F12}
F13	{F13}
F14	{F14}
F15	{F15}
F16	{F16}
Shift キー、Ctrl キー、または Alt キーと他のキーとの組み合わせを指定するには、通常のキー コードの前に次のコードを単独、または組み合わせて記述します。

キー	コード
Shift	+
Ctrl	^
Alt	%
Shift キー、Ctrl キー、Alt キーを押しながら他のキーを押す操作を指定するには、キーのコードをかっこで囲みます。たとえば、Shift キーを押しながら E と C を押す操作を指定するには、"+(EC)" を使います。Shift キーを押しながら E を押し、その後 Shift キーを離して C を押す操作を指定するには、"+EC" を使います。

同じキー ストロークの繰り返しを指定するには、{key number} という形式を使います。key と number の間には必ず半角のスペースが必要です。たとえば、{LEFT 42} は ← キーを 42 回押すことを意味します。また {h 10} は、H キーを 10 回押すことを意味します。

メモ   SendKeys ステートメントは、Microsoft Windows または Macintosh 上で動作するように設計されたアプリケーション以外にはキー ストロークを渡せません。また Sendkeys ステートメントは、アプリケーションに Copy キーを渡せません。


ASCII 文字セット (0 - 127)

0	・	32	[ｽﾍﾟｰｽ]	64	@	96	`
1	・	33	!	65	A	97	a
2	・	34	"	66	B	98	b
3	・	35	#	67	C	99	c
4	・	36	$	68	D	100	d
5	・	37	%	69	E	101	e
6	・	38	&	70	F	102	f
7	・	39	'	71	G	103	g
8	* *	40	(	72	H	104	h
9	* *	41	)	73	I	105	I
10	* *	42	*	74	J	106	j
11	・	43	+	75	K	107	k
12	・	44	,	76	L	108	l
13	* *	45	-	77	M	109	m
14	・	46	.	78	N	110	n
15	・	47	/	79	O	111	o
16	・	48	0	80	P	112	p
17	・	49	1	81	Q	113	q
18	・	50	2	82	R	114	r
19	・	51	3	83	S	115	s
20	・	52	4	84	T	116	t
21	・	53	5	85	U	117	u
22	・	54	6	86	V	118	v
23	・	55	7	87	W	119	w
24	・	56	8	88	X	120	x
25	・	57	9	89	Y	121	y
26	・	58	:	90	Z	122	z
27	・	59	;	91	[	123	{
28	・	60	<	92	\	124	|
29	・	61	=	93	]	125	}
30	・	62	>	94	^	126	~
31	・	63	?	95	_	127	・
・	これらの文字は、Microsoft Windows ではサポートされていません。

* *	コード番号 8、9、10、13 は制御文字で、それぞれバックスペース、タブ、ライン フィード、キャリッジ リターンとして使われます。


IMEStatus 関数

整数型 (Integer) の値を返します。IME の現在の状態を返します。

構文

IMEStatus

戻り値

国別情報が日本に設定されている場合、IMEStatus 関数の戻り値は次のようになります。

定数	値	内容
vbIMEModeNoControl	0	IME を制御しません。(既定値)
vbIMEModeOn	1	IME はオンの状態です。
vbIMEModeOff	2	IME はオフの状態です。
vbIMEModeDisable	3	IME は利用禁止状態です。
vbIMEModeHiragana	4	IME は全角ひらがな入力モードです。
vbIMEModeKatakana	5	IME は全角カタカナ入力モードです。
vbIMEModeKatakanaHalf	6	IME は半角カタカナ入力モードです。
vbIMEModeAlphaFull	7	IME は全角英数入力モードです。
vbIMEModeAlpha	8	IME は半角英数入力モードです。
国別情報が韓国に設定されている場合、IMEStatus 関数の戻り値は次のようになります。

定数	値	内容
vbIMEModeNoControl	0	IME を制御しません。(既定値)
vbIMEModeAlphaFull	7	IME は全角英数入力モードです。
vbIMEModeAlpha	8	IME は半角英数入力モードです。
vbIMEModeHangulFull	9	IME は全角ハングル モード モードです。
vbIMEModeHangul	10	IME は半角ハングル モード モードです。
国別情報が中国 (繁體字版および簡体字版) に設定されている場合、IMEStatus 関数の戻り値は次のようになります。

定数	値	内容
vbIMEModeNoControl	0	IME はインストールされていません。
vbIMEModeOn	1	IME はオンの状態です。
vbIMEModeOff	2	IME はオフの状態です。


中断モードでコードを実行することはできません。

コードの実行を中断すると、中断モードになります。エラーの原因と対処方法を次に示します。

•	[マクロ] ダイアログ ボックスからコードを実行しようとしていますが、既にコードは実行されていて、中断モードに移行しています。

カレント コードの実行を続けるか、または実行を終了した後に [マクロ] ダイアログ ボックスからコードを実行します。コードで構文エラーや実行時エラーが発生したために、知らない間に中断モードに移行している場合があります。[マクロ] ダイアログ ボックスに戻ってマクロを再実行する代わりに、エラーを訂正してから [継続] をクリックします。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトが定義クラスのインスタンスではない場合、このオブジェクトに関する Friend プロシージャは呼び出せません。(Error 97)

Friend プロシージャは、クラスの外側にあるモジュールから呼び出すことができますが、そのモジュールは、このクラスが定義されているプロジェクト内にある必要があります。エラーの原因と対処方法を次に示します。

•	Friend プロシージャを呼び出そうとしていますが、このときの変数の参照は適切ですが、クラスのインスタンスではないインスタンスを指しています。

たとえば、classics と classy の 2 つのクラスがある場合、classy のインスタンスを誤って classics のインスタンスに代入してしまうことがあります。

•	プロセス間またはスレッド間で Friend プロパティまたは Friend メソッドにアクセスしようとしました。Friend プロシージャはクラスのパブリック インターフェイスではないため、このプロシージャをプロセス間またはスレッド間でマーシャリングすることはできません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コントロールは作成されていないため、デザイン モードを終了できません。

デザイン モードを終了する前に、すべてのコントロールでインスタンスを作成しなければなりません。エラーの原因と対処方法を次に示します。

•	エラー メッセージ ダイアログ ボックスで指定されているコントロールが作成できません。

すべてのコントロールでインスタンスが作成され、適切に接続されなければ、実行可能な状態にはなりません。コントロールで必要なファイルがすべて揃っていることを確認してから再実行します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトはオートメーション イベントを発生させることはできません。

オブジェクトのイベント用にイベント プロシージャを記述するには、そのオブジェクトに既定のソース インターフェイスが必要です。エラーの原因と対処方法を次に示します。

•	オブジェクトのイベント用にイベント プロシージャを記述しようとしていますが、オブジェクトの外側では、そのイベントは利用できません。

オブジェクトのマニュアルを参照して、直接的ではないイベントの処理方法がないか調べます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


DLL で許可されない操作です。

すべての Visual Basic ステートメントがダイナミック リンク ライブラリ (DLL) で使用できるわけではありません。エラーの原因と対処方法を次に示します。

•	DLL で実行できないステートメントを含むクラスから DLL を作成しようとしています。

End ステートメントなど、DLL で実行できないステートメントがクラスにないかどうかを確認します。ある場合は、そのステートメントを削除します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Enum が宣言されている外側が不正です。

Enum は、関連する明示的な定数のグループ (列挙) を作成するのに使用できるデータ型です。エラーの原因と対処方法を次に示します。

•	Enum 定義の範囲外で End Enum が使用されています。

Enum 定義構造と End Enum に文字列があるかどうかを調べてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このドキュメントはマクロの無効が設定された状態で開かれています。マクロを有効にするにはドキュメントを閉じた後再び開き、マクロの有効オプションを選択してください。

ホスト アプリケーションでは、マクロの有効、無効が指定できます。エラーの原因と対処方法を次に示します。

•	Macros Disabled で、ドキュメントを開いています。

•	ドキュメントを閉じて、Enable Macros を選択してから、再度開きます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


シンボルを含んでいるライブラリは、このプロジェクトでは参照されていません。ライブラリを参照設定に追加しますか ?

型とオブジェクトの情報は、ライブラリに格納されています。エラーの原因と対処方法を次に示します。

•	このシンボルの定義がタイプ ライブラリ.にあります。

•	シンボルをライブラリに記述されているように定義するには、[OK] をクリックし、ライブラリへの参照を追加します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


オブジェクトは Property Let がありません。

Property Let プロシージャが公開されているプロパティでなければ、そのプロパティに値を割り当てることはできません。エラーの原因と対処方法を次に示します。

•	Proeprty Let プロシージャが公開されていないプロパティに値を割り当てようとしています。

•	このプロパティに直接値を割り当てることはできません。クラスを作成している場合は、Proeprty Let プロシージャを公開してインターフェイスを変更できます。クラスを作成していない場合は、コンポーネントのマニュアルを参照して、値を割り当てるのに間接的な方法があるか調べます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ヘルプ ファイルは使えません。

すべてのエラーにヘルプ トピックが関連づけられているわけではありません。エラーの原因と対処方法を次に示します。

•	ヘルプにないエラーを生成しました。

•	Readme ファイルを確認します。Readme には、ヘルプに記載されていない最新のエラー情報が載っていることがあります。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


サポートされているイベント受信最大数のイベントが既に派生しているので、オブジェクトのイベントを同期できません。(Error 96)

各オブジェクトには、発生したイベントを同時に受けることができる許容最大数が指定されています。エラーの原因と対処方法を次に示します。

•	フォームにあるコントロールの WithEvents 変数に Set を使用しようとしています。

•	この場合は、イベントの許容数が限られているため、WithEvents 変数に Set は使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


エントリ ～ が DLL ファイル ～ 内に見つかりません。

エントリ ポイントは、DLL (Windows) またはコード リソース (Macintosh) プロシージャの名前 (またはプロシージャを表す序数) です。エラーの原因と対処方法を次に示します。

•	タイプ ライブラリに記述されているエントリ ポイントが間違っています。名前が間違っているか、序数の指定が間違っています。

•	正しいタイプ ライブラリについて、ベンダーに問い合わせてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プログラムを実行できません。

ネイティブ コードを実行可能にするためには、外部プログラムを実行させる必要があります。エラーの原因と対処方法を次に示します。

•	メモリとシステム リソースがコード ジェネレータまたはリンカの実行に不足しています。

メモリとシステム リソースを解放するために可能な限り、実行中のアプリケーションを終了してください。

•	Visual Basic が正しくセットアップされていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


リソースの種類や名前が重複しています。

Windows の代表的なリソース ファイルに、ビットマップ、テキスト文字列およびアプリケーションで使われる同様のデータが含まれています。エラーの原因と対処方法を次に示します。

•	プロジェクトで使おうとしている Windows のリソース ファイルに、同じ型と名前を持つ複数のリソースおよび Visual Basic が自動的に作成するリソースを含むファイルが含まれています。

•	別のリソース ファイルを使うか、個別にリソース ファイルを再作成して、重複するリソースの 1 つを削除してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティまたはメソッドの呼び出しの場合には、引数または戻り値としてプライベート オブジェクトへの参照を含めることはできません。(エラー 98)

プライベート オブジェクトは、プロジェクト外には渡せません。エラーの考えられる原因を次に示します。ここに挙げたのは、いずれも行ってはならない処理です。

•	クライアントが、プロセス外のコンポーネントのプロパティまたはメソッドを呼び出し、その呼び出しの引数の 1 つにプライベート オブジェクトへの参照を渡そうとしました。または、クライアントがプロセス外のコンポーネントのプロパティまたはメソッドを呼び出し、呼び出されたコンポーネントが、プライベート オブジェクトへの参照を返そうとしたか、またはプライベート オブジェクトへの参照を ByRef で渡された引数に代入しようとしました。

•	プロセス外のコンポーネントが、クライアントに対するコールバック メソッドを呼び出し、プライベート オブジェクトへの参照を渡そうとしました。

•	プロセス外のコンポーネントが、発生させたイベントの引数として、プライベート オブジェクトへの参照を渡そうとしました。

•	クライアントが、処理するイベントの ByRef 引数にプライベート オブジェクトへの参照を渡そうとしました。

Visual Basic では、表示できる形式を持たないプライベート オブジェクトへの参照を、プロセス間で受け渡すことはできません。ただし、このエラーが検出されない場合もあるので注意してください。プライベート オブジェクトは、プロジェクト外で使用されるようには設計されていません。プライベート オブジェクトをクライアントへ渡すと、プログラムの安定性が損なわれたり、将来の Visual Basic との互換性が保てなくなる可能性があります。作成したプライベート クラスをクライアントへ渡す必要がある場合は、その Instancing プロパティを Private 以外の値に設定してください。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


定数には値を代入できません。

定数は、取得のみ可能な値を表すものです。エラーの原因と対処方法を次に示します。

•	Const で宣言した変数またはタイプ ライブラリ定数に値を代入しようとしました。

新たに値を代入する場合は、必要な型の通常の変数を宣言して値を代入してください。変数に代入する値を、指定した一連の値のみに制限する場合は、Enum ステートメントを使用します。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


省略可能な引数では ParamArray は使用できません。

プロシージャの定義で ParamArray を使用すると、任意の数の引数を渡すことができます。一方、Optional を使用した場合は、呼び出し側で指定する引数を省略してもエラーが発生しません。エラーの原因と対処方法を次に示します。

•	同一パラメータ リスト内で ParamArray キーワードと Optional キーワードの両方を使用しました。

Optional または ParamArray のいずれかを削除します。同一の引数内で両方のキーワードを使用することはできません。どちらを削除するかは、どのような引数が必要かに応じて決定してください。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


指定したファイルが見つかりませんでした。

見つからなかったファイルの名前を確認してください。エラーの原因と対処方法を次に示します。

•	エラー メッセージに表示されている名前のファイルは見つかりませんでした。

ドライブ名、パス、およびファイル名を正しく指定したかどうかを確認します。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


省略可能な引数の型が不正です。

引数の型には、省略可能な引数として指定できないものがあります。エラーの原因と対処方法を次に示します。

•	引数で定義されているデータ型が不正です。

たとえば、ユーザー定義型の引数は、省略可能な引数として指定することはできません。バリアント型 (Variant) の配列の要素には異なる型のデータを格納できるため、バリアント型の配列を使用すると、必要な処理を行うことができる場合があります。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


テンプレートが不正です。

テンプレートの派生クラスをテンプレートにすることはできません。エラーの原因と対処方法を次に示します。

•	テンプレート コンポーネントを作成しようとしましたが、その際、テンプレートからコンポーネントを派生させようとしました。

テンプレートからテンプレート クラスを派生させることはできません。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


オブジェクト モジュールでのみ有効です。

Visual Basic には、オブジェクト モジュール (フォーム、クラス モジュールなど) 内でしか使用できないステートメントや構文要素があります。エラーの原因と対処方法を次に示します。

•	使用したステートメントまたは構文要素 (たとえば、Implements ステートメント、WithEvents キーワード、イベント シンクなど) は、オブジェクト モジュール以外のコードでは使用できません。

エラーの原因となったステートメントを、オブジェクト モジュール内に記述します。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


要求されたタイプ ライブラリまたはウィザードは VBA プロジェクトではありません。

Visual Basic では、すべての要素に対して書き込み (値の設定) および読み取り (値の取得) を実行できるわけではありません。エラーの原因と対処方法を次に示します。

•	Visual Basic のプロジェクトからアドインまたはタイプ ライブラリに値を設定しようとしました。

Visual Basic プロジェクトの一部として組み込まれているアドインまたはタイプ ライブラリに直接値を設定することはできません。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


この編集を行うと、プログラムの再実行が必要です。

通常は、コードの編集した場合にも、編集した箇所からコードの実行を再開することができます。エラーの原因と対処方法を次に示します。

•	コードの先頭からの再実行が必要となるような編集を行いました。

コードをプロシージャに分解するような編集を行い、その結果、実行を再開する位置の行が、実行を停止したときとは異なるプロシージャに移った場合が考えられます。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


変換に失敗しました。詳細については trnslate.log を参照してください。

Visual Basic では、旧バージョンとの互換性のための変換のみを行います。エラーの原因と対処方法を次に示します。

•	予期しないエラーによって、変換に失敗しました。

通常、このエラーは、タイプ ライブラリの参照が壊れていることが原因で発生します。translation log にはエラーの詳細な情報が含まれています。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


ウィザードはプロジェクトを参照できません。

ウィザードは、ほかのウィザードを参照することはできますが、プロジェクトを参照することはできません。エラーの原因と対処方法を次に示します。

•	ウィザードの作成を実行中に、ウィザード内でプロジェクトへの参照が見つかりました。

プロジェクトへの参照を削除します。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


コンパイル エラー

エラーの原因と対処方法を次に示します。

•	コンパイル中に予期しないエラーが発生しました。このエラーは、コンパイラで対処できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


指定されたオブジェクトのイベントは制御できません。

エラーの原因と対処方法を次に示します。

•	指定したオブジェクトのイベントに対して処理を行うことができません。オブジェクトにイベントが存在しないか、イベントに問題があるか、あるいはオブジェクト内で無効に設定されている可能性があります。

オブジェクト ブラウザで、オブジェクトおよびそのイベントに関する情報を確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ベース クラス名の使用方法が不正です。

ベース クラスの名前をそのまま使用することはできません。エラーの原因と対処方法を次に示します。

•	ベース クラス自体の名前が使われており、ベース クラスの既定メンバにアクセスしようとしていることが明示されていませんでした。

ベース クラス名をかっこで囲むことによって、既定メンバへアクセスすることを明示します。

•	式の中でベース クラス名を使用しましたが、アクセスしようとしたメンバの指定が曖昧です。

ベース クラス名とメンバの間に区切り文字 (感嘆符など) を置きます。

•	Set ステートメント内で、ベース クラス名がクラスへの参照であるかのような形で使用されています。

ベース クラス名は、GetObject などを使用して参照を取得するときに使用してください。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


イベント名が不正です。

オブジェクト名とイベント名をアンダースコアで連結してイベント プロシージャ名を作成しています。エラーの原因と対処方法を次に示します。

•	イベント名の中でアンダースコアが使用されています。

イベント名からアンダースコアを削除してください。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


イベントが見つかりません。

RaiseEvent ステートメントで指定するイベントは、既に定義してあるイベントでなければなりません。エラーの原因と対処方法を次に示します。

•	RaiseEvent ステートメント内で名前を指定しましたが、そのイベント定義が見つかりませんでした。

イベント名の綴りが間違っていないか確認します。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


検索文字列を指定してください。

オブジェクト ブラウザで検索するには、検索文字列を入力する必要があります。エラーの原因と対処方法を次に示します。

•	オブジェクト ブラウザ内で検索を実行しましたが、検索文字列が指定されていませんでした。

検索文字列を入力してください

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


指定した名前は非表示であるため、表示できません。

タイプ ライブラリ内の項目は、名前が非表示として指定されている場合があります。エラーの原因と対処方法を次に示します。

•	タイプ ライブラリ内にある名前を指定しましたが、その名前は非表示に指定されていました。

通常は、非表示のタイプ ライブラリ メンバを表示することはできません。オブジェクト ブラウザのポップアップ メニューから [非表示のメンバを表示] を選択すると、非表示メンバも表示できます。これによってメンバ情報を確認できます。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


指定した型は、現在参照されていないライブラリ内にあるため、ここへはジャンプできません。

エラーの原因と対処方法を次に示します。

•	指定した型は、プロジェクトで参照しているライブラリには含まれていません。

[参照設定] ダイアログ ボックスで必要なタイプ ライブラリへの参照を設定します。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


Enum の内部が不正です。

列挙定義内では、すべての型が使用可能というわけではありません。エラーの原因と対処方法を次に示します。

•	Enum メンバの値に、文字列またはその他の無効な型を指定しようとしました。

Enum メンバの指定に使用する定数式は、長整数型 (Long) またはその他の列挙型 (Enum) に評価される式でなければなりません。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


予期せぬエラーが発生しました。

エラーの原因と対処方法を次に示します。

•	予期せぬエラーが発生しました。システムをシャットダウンし、再起動してください。

詳細については、目的の項目を選択して F1 キー (Windows の場合) または Help キー (Macintosh の場合) を押してください。


この種類のファイルは、現在のプロジェクトではサポートされません。

エラーの原因と対処方法を次に示します。

•	不正なプロジェクトファイル、または Visual Basic のホスト アプリケーションや Visual Basic 環境でサポートされていない機能を含むプロジェクト ファイルを開こうとしました。

開こうとしたプロジェクト ファイルが正しいプロジェクト ファイルかどうかを確認してください。また、開こうとしたプロジェクト ファイルが、同じ Visual Basic のホスト アプリケーションや Visual Basic 環境で作成、保存されたかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


この VBA プロジェクトは、他のアプリケーションから起動した VBA によって作成されました。作成したアプリケーションからこのプロジェクトを開くようにしてください。

エラーの原因と対処方法を次に示します。

•	他のホスト アプリケーションで作成されたプロジェクト ファイルを開こうとしました。

開こうとしたプロジェクト ファイルが、同じ Visual Basic のホスト アプリケーションで作成、保存されたかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ウィンドウレス コントロールにはメニューを使用できません。

エラーの原因と対処方法を次に示します。

•	ウィンドウのないコントロールにメニューを配置しようとしました。ウィンドウのないコントロールにメニューは配置できません。

コントロールにメニューを配置するには、ウィンドウのあるコントロールを選択してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このコントロールは <項目> デザイナでのみ使用できます。

エラーの原因と対処方法を次に示します。

•	選択したコントロールは、示したデザイナでのみ機能します。

他のコントロール、または他のデザイナを選択してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このコントロールは <項目> デザイナでは使用できません。

エラーの原因と対処方法を次に示します。

•	選択したコントロールは、示したデザイナでは機能しません。

他のコントロール、または他のデザイナを選択してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このデザイナはこのバージョンの Visual Basic ではサポートされていない機能を使用しているので使えません。

エラーの原因と対処方法を次に示します。

•	このデザイナは、このバージョンの Visual Basic ではサポートされていません。

他のデザイナ、または示したバージョンの Visual Basic で有効なデザイナを使用してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> は参照されているがプロジェクト内のどの項目でも使用されていないので追加できません。これを修正するためには [プロジェクト プロパティ] ダイアログ ボックスの [使用していない ActiveX コントロールについての情報を削除する] チェック ボックスをオフにしてください。

エラーの原因と対処方法を次に示します。

•	示したコンポーネントは、追加されません。そのコンポーネントは、プロジェクトのいくつかのアイテムで使用できません。

[プロジェクト] メニューの [プロジェクト オプション] をクリックし、[プロジェクト プロパティ] ダイアログ ボックスの [使用していない ActiveX コントロールについての情報を削除する] をオフにしてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Internet Explorer を起動できませんでした。

エラーの原因と対処方法を次に示します。

•	Internet Explorer の起動を妨げる問題が発生しました。

Internet Explorer 起動し、正常に動作するかどうかを確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> デザイナは DLL プロジェクト内でのみ使用できます。

エラーの原因と対処方法を次に示します。

•	示したデザイナは、ActiveX DLL プロジェクトでのみ使用できます。

ActiveX DLL プロジェクトでそのデザイナを使用してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> デザイナは ActiveX EXE プロジェクト内ではパブリックにできません。

エラーの原因と対処方法を次に示します。

•	ActiveX .exe プロジェクトで、示したデザイナの Instancing プロパティは、Public に設定されていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> デザイナはパブリックである必要があり、標準 EXE プロジェクト内では使用できません。

エラーの原因と対処方法を次に示します。

•	示したデザイナのInstancing プロパティは、Public に設定されていなければなりません。

デザイナは、standard .exe プロジェクトでは使用できません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> デザイナはプライベートにはできません。

エラーの原因と対処方法を次に示します。

•	示したデザイナのInstancing プロパティは、Public に設定されていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このオブジェクトのいくつかのインスタンスが実行中です。オブジェクトを削除できません。

エラーの原因と対処方法を次に示します。

•	現在実行中のオブジェクトを削除しようとしました。

プロジェクトからすべてのインスタンスを削除する前に、閉じてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


このプロジェクトは、現在他のプロジェクトから参照されているため、閉じることはできません。

エラーの原因と対処方法を次に示します。

•	他のプロジェクトから参照されているプロジェクトを閉じようとしました。

他のプロジェクトからの参照を削除してから、閉じてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


マルチスレッド プロジェクトでは、MDI フォームは使用できません。現在使用されている MDI フォームはすべてこのプロジェクトから解放されます。このプロジェクトで MDI フォームを使用するには、[キャンセル] をクリックし、スレッド モデルの設定でスレッド プールを 1 スレッドのみに変更してください。

エラーの原因と対処方法を次に示します。

•	マルチスレッド プロジェクトに MDI フォームを追加しようとしました。

プロジェクトに MDI フォームを保持する場合は、スレッド モデルの Thread Pool を 1 つだけに変更してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> でアクセス違反が発生しました。利用可能なアドインのリストから削除しますか?

エラーの原因と対処方法を次に示します。

•	示したアドインでファイル アクセス違反が発生しました。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


選択されたアドインはコマンド ラインで実行可能であることが確認されていません。画面上のユーザー インターフェイスを介する操作を必要とする可能性があります。

エラーの原因と対処方法を次に示します。

•	「コマンド ラインで実行可能である」とは、Visual Basic がコマンド ラインから実行されたとき、ユーザーの入力を必要とするユーザー インターフェイスを含まないアドインとして登録されているということです。ユーザー インターフェイスが介在すると、ビルド スクリプトなどの人の操作を必要としない処理が妨げられます。

ユーザーがアドインを選択し、[ロード方法] ボックスで [コマンド ライン] を選択したとき、アドインがコマンド ラインで実行可能であるにもかかわらず、アドインを示せない場合、ワーニング メッセージが表示されます。これは重大な問題ではありません。ユーザーの入力のために中断して、自動スクリプトを停止したり、突然表示されたりする UI エレメントが、ユーザーが選択したアドインに含まれている可能性があることを示す警告です。

アドインをコマンド ラインで実行可能にするには、アドイン デザイナを使って変更するか、または主導でレジストリ キーの値を変更します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正なパラメータです。ユーザー定義型を書き込めません。

エラーの原因と対処方法を次に示します。

•	PropertyBag オブジェクトにユーザー定義型を記述しようとしました。PropertyBag オブジェクトは、これをサポートしていません。

このような場合には、PropertyBag オブジェクトに、ユーザー定義型の各アイテムをそれぞれ記述できます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正なパラメータです。パーシスタンスをサポートしていないのでオブジェクトを書き込めません。

エラーの原因と対処方法を次に示します。

•	PropertyBag オブジェクトにオブジェクトを記述しようとしました。PropertyBag オブジェクトは、ActiveX の持続的なインターフェイスをサポートしていません。

この問題を解決するには、コードを変更する必要があります。オブジェクトを作成した Visual Basic コードで、オブジェクトの Persistable プロパティを True に設定します。また、Class プロパティを Public または Public Createable に設定し、ActiveX Dll、ActiveX Exe、または UserControl プロジェクトとして保存します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロパティ名が不正です。

エラーの原因と対処方法を次に示します。

•	不正な名前を入力しました。この名前は、既に使用されているか、システムで予約されているか、または不正な文字を含んでいます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> は、シングルスレッド コンポーネントなので、マルチスレッド プロジェクトでは使用できません。<アイテム名> のスレッド モデルを変更するか、このコンポーネントの開発元からコンポーネントの新しいバージョンを入手してください。

エラーの原因と対処方法を次に示します。

•	マルチスレッド プロジェクトでシングルスレッド コンポーネントを使用しようとしました。

シングルスレッド コンポーネントのスレッド モデルを変更するか、コンポーネントの開発元からコンポーネントの新しいバージョンを入手してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目 2> からコントロール <項目 1> をロードできませんでした。<項目 2> のバージョンが最新のものではありません。アプリケーションから提供された最新のバージョンを使用しているかどうか確認してください。

エラーの原因と対処方法を次に示します。

•	古いバージョンを使用しています。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コントロール <項目 1> をアクティブ化できませんでした。このコントロールにこのアプリケーションとの互換性がない可能性があります。アプリケーションで提供されたバージョンのコントロールを使用しているかどうか確認してください。

エラーの原因と対処方法を次に示します。

•	コントロールをアクティブにできませんでした。アプリケーションとコントロールは、互換性がありません。現在のシステムのコントロールのバージョンと、指定したアプリケーションのバージョンが異なる場合に、発生します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ActiveX デザイナの型情報が、保存されている情報と一致しません。ロードできません。

エラーの原因と対処方法を次に示します。

•	ActiveX デザイナの型情報が、保存されている情報と一致しないので、プロジェクトをロードできませんでした。ファイルの破損が原因です。

プロジェクトのバックアップをロードしてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コンパイル済みのコンポーネントとデザイン環境のコンポーネント間のやりとりはサポートされません。

エラーの原因と対処方法を次に示します。

•	このエラーは、2 つのコンポーネントが同時に実行されている場合に発生します。フォームやユーザー コントロールなどの 1 つコンポーネントは、既にコンパイルされていて、現在は msvbvm60.dll を使用して実行されており、もう 1 つのコンポーネントが IDE で起動されている場合です。たとえば、コンパイルしたユーザー コントロールが IDE のフォーム上で実行されている場合です。

IDE で実行されているアイテムとコンパイル済オブジェクトの間で、内部メモリの構造が異なること、およびそれらの間で互換性がないことが原因で、この問題は発生します。一般的には、Property または Sub プロシージャで、ホスト フォームや他のコンポーネントにユーザー コントロールのインスタンスを渡さなければ、この問題は発生しません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


最小化されたフォームのイメージを印刷することはできません。

エラーの原因と対処方法を次に示します。

•	最小化されたフォームのイメージを印刷することはできません。

イメージを最大化してから、印刷してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コードの生成またはコードのリンクで予期せぬエラーが発生しました。

エラーの原因と対処方法を次に示します。

•	コードの生成またはコードのリンクで予期せぬエラーが発生しました。

メモ帳にエラーを表示するには、[はい] をクリックします。

多くの場合このエラーは、ディスク容量不足か、またはその他のディスクに関連する問題が原因で発生します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


バージョン番号には 0 ～ 9999 の範囲の値を指定してください。

エラーの原因と対処方法を次に示します。

•	[プロジェクト プロパティ] ダイアログ ボックスの [作成] タブで、プロジェクトのバージョン番号のコンポーネントにメジャー、マイナ、またはリビジョンとして、負の値、数値以外の文字、または 9999 を超える数値を指定しようとしました。.

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


不正なベース アドレスです。

不正なベース アドレスを入力しました。エラーの原因と対処方法を次に示します。

•	[プロジェクト プロパティ] ダイアログ ボックスの [コンパイル] タブで不正なアドレスを指定いています。

正確なアドレスは、64K 以上 H7FFF0000 未満の 64K の倍数になります。

このエラーは、ActiveX DLL、または ActiveX Control プロジェクトで発生します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


作成可能なパブリック コンポーネントが見つかりません。詳細については F1 キーを押してください。

エラーの原因と対処方法を次に示します。

•	プロジェクトには、最低でも 1 つの作成可能なパブリック コンポーネントが含まれます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ファイル <項目> は ActiveX コンポーネントとして登録できません。

エラーの原因と対処方法を次に示します。

•	ActiveX コンポーネントでない、コントロールやダイナミック リンク ライブラリを登録しようとしました。コントロールやダイナミック リンク ライブラリを確認してください。詳細については、ActiveX コンポーネントの開発元にお問い合わせください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクト ファイル <項目 1> は不正なキー <項目 2> を含んでいます。

エラーの原因と対処方法を次に示します。

•	Visual Basic プロジェクト ファイル (VBP) には、Visual Basic で認識できないキーが含まれています。

エラーに対処するには、指定したファイルのバックアップをインストールするか、またはテキスト エディタを使用してファイルを修正してください。

警告   Visual Basic ではなく、エディタで Visual Basic ファイルを修正すると、ファイルを破損させる可能性があります。上級ユーザー以外は行わないようにしてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ヘルプを表示できません。

エラーの原因と対処方法を次に示します。

•	WinHelp を実行している場合、Windows ヘルプ アプリケーションは、使用できません。Winhelp.exe がマシンにある場合は、パスを確認してください。Winhelp.exe がマシンにない場合は、Windows 9x または Microsoft Windows NT セットアップを起動して、Winhelp.exe をインストールしてください。

•	HTMLHelp を実行していて、HH.exe がマシンにある場合は、パスを確認してください。HH.exe がマシンにない場合は、ヘルプを参照する前に、HH.exe をインストールしてください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


次のクラスは登録されていません。<項目 1>

エラーの原因と対処方法を次に示します。

•	そのクラス モジュールは登録されていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


ID 文字列が長すぎます <項目>。ID 文字列は 39 文字以下でなくてはなりません。

エラーの原因と対処方法を次に示します。

•	ActiveX コンポーネントの ID 文字列が 39 文字を超えています。ID 文字列は、プロジェクト名とクラス モジュール名で作成されます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクト <項目> が変更されています。変更を保存しますか?

エラーの原因と対処方法を次に示します。

•	プロジェクトのプロパティの設定やコード ステートメントが変更されています。それらの変更は、保存されていません。他のプロジェクトをロードする前に、変更を保存してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


<項目> の現在のレジストリ登録で許可されていないので、ロード方法を更新できませんでした。

エラーの原因と対処方法を次に示します。

•	システム レジストリ登録で許可されていないので、ロード方法を更新できませんでした。Visual Basic は、[アドイン マネージャ] ダイアログ ボックスの [利用可能なアドイン] で選択しようとしたアドインをロードできませんでした。アドインは、正しく登録されていないか、またはシステム レジストリに登録されていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コンポーネントが正しく登録されていません。

エラーの原因と対処方法を次に示します。

•	コンポーネントが正しく登録されていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コンポーネントがレジストリ内に見つかりませんでした。

エラーの原因と対処方法を次に示します。

•	要求された実行ファイル (EXE)、またはダイナミックリンク ライブラリ ファイル (DLL) は、見つかりませんでした。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コンポーネントは、要求されたオブジェクトの作成に失敗しました。

エラーの原因と対処方法を次に示します。

•	ActiveX コンポーネントの実行ファイル (EXE) は、正確に実行されませんでした。

これは、レジストリに関する問題かもしれません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


コンポーネント <項目> 、またはその依存関係のひとつが適切に登録されていません。ファイルが存在しないか、あるいは不正です。

エラーの原因と対処方法を次に示します。

•	指定したファイルは、移動、または削除できません。

•	指定したファイルは、適切に登録されていません。

指定したファイルを適切に登録するには、ファイルを再インストールしてください。詳細については、オブジェクトの開発元にお問い合わせください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


この機能を使用するには Internet Explorer <項目> またはこれ以降の最新のバージョンが必要です。最新のバージョンは、Microsoft Internet Explorer のホームページからダウンロードできます。

エラーの原因と対処方法を次に示します。

•	この機能を使用するには、示したバージョンのInternet Explorer が必要です。

Internet Explorer の最新のバージョンについては、http://www.microsoft.com を確認してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


最大化または最小化されているフォームは、移動またはサイズ変更することはできません。

エラーの原因と対処方法を次に示します。

•	最大化または最小化されているフォームを、移動またはサイズ変更しようとしました。これは、許可されていません。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


モーダル フォームが表示されているときは、モードレス フォームを表示できません。

エラーの原因と対処方法を次に示します。

•	モーダル フォームを閉じる前に、モードレス フォームを表示しようとしました。

最初に、モーダル フォームを閉じます。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


要素が With の配列を含んだバリアント型に ReDim、削除、代入はできません。

エラーの原因と対処方法を次に示します。

•	要素が With の配列を含んだバリアント型に ReDim、削除、または代入しようとしました。

次にこのエラーの発生するコードの例を示します。

Type Test

Name as Integer

End Type

Sub Main()

Dim c(0) As Test

Dim e

e = c

With e(0)

ReDim e(1)

End With

End Sub

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


プロジェクトを表示できません。

エラーの原因と対処方法を次に示します。

•	表示しようとしたプロジェクトはロックされています。

プロジェクトの表示方法については、ホスト アプリケーションのドキュメントを参照してください。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


Activate イベント、Deactivate イベントの使用例

次の例では、UserForm1 と UserForm2 の 2 つのユーザー フォームを使用しています。これらのプロシージャを UserForm1 モジュールにコピーし、UserForm2 を追加します。UserForm1 のキャプションは、Activate イベント プロシージャで作成されます。ユーザーが UserForm1 のクライアント領域をクリックすると、UserForm2 が読み込まれ、表示されます。それから UserForm1 の Deactivate イベントが起動され、キャプションが変更されます。

' UserForm1 の Activate イベント

Private Sub UserForm_Activate()

    UserForm1.Caption = "フォームをクリックしてください。"

End Sub

' UserForm1 の Click イベント

Private Sub UserForm_Click()

    Load UserForm2

    UserForm2.StartUpPosition = 3

    UserForm2.Show

End Sub

' UserForm1 の Deactivate イベント

Private Sub UserForm_Deactivate()

    UserForm1.Caption = "フォーカスを失いました。"

    UserForm2.Caption = "フォーカスを取得しました。"

End Sub


Initialize イベントの使用例

次の例では、プログラムに 2 つのユーザー フォームがあると仮定しています。UserForm1 の Initialize イベントでは、UserForm2 が読み込まれ、表示されます。ユーザーが UserForm2 をクリックすると、UserForm2 が隠れて UserForm1 が表示されます。UserForm1 をクリックすると、再び UserForm2 が表示されます。

' UserForm1 の Initialize イベント プロシージャ

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' UserForm2 の Click イベント

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' UserForm1 の Click イベント

Private Sub UserForm_Click()

UserForm2.Show

End Sub


QueryClose イベントの使用例

次の例では、ユーザーに対して、ユーザー フォームのクライアント領域をクリックし、閉じることを促すメッセージを表示します。ユーザーがタイトル バーの [閉じる] ボタンを使用した場合は、Cancel パラメータにゼロ以外の値を設定し、終了しないようにします。ユーザーがクライアント領域をクリックした場合は、CloseMode の値が 1 になり、Unload Me が完了します。

Private Sub UserForm_Activate()

    UserForm1.Caption = "閉じるときは、クリックしてください。"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    'ユーザーがタイトル バーの [閉じる] ボタンを使用して閉じないようにします。

    If CloseMode <> 1 Then Cancel = 1

    UserForm1.Caption = "[閉じる] ボタンは使えません。クリックしてください。"

End Sub


Resize イベントの使用例

次の例では、Activate イベントと Click イベントを使用して、ユーザー フォームの Resize イベントを起動する方法を説明しています。ユーザーがフォームのクライアント領域をクリックすると、そのクライアント領域が拡大または縮小し、新しい高さがタイトル バーに表示されます。Tag プロパティは、ユーザー フォームの高さの初期値を保存するのに使用します。

' UserForm1 の Activate イベント

Private Sub UserForm_Activate()

UserForm1.Caption = "クリックすると、フォームの高さが高くなります。"

Tag = Height	' 高さの初期値を保存します。

End Sub

' UserForm1 の Click イベント

Private Sub UserForm_Click()

Dim NewHeight As Single

NewHeight = Height

' フォームが元の大きさの場合は、高くします。

If NewHeight = Val(Tag) Then

Height = Val(Tag) * 2

Else

' フォームが高い場合は、元の高さにします。

Height = Val(Tag)

End If

End Sub

' UserForm1 の Resize イベント

Private Sub UserForm_Resize()

UserForm1.Caption = "新しい高さ : " & Height & "  " & "クリックすると、拡大または縮小します。"

End Sub


Terminate イベントの使用例

次の例では、ユーザーがクライアント領域をクリックしてフォームを閉じたあとに、ユーザー フォームで数秒間、警告音を鳴らします。

Private Sub UserForm_Activate()

    UserForm1.Caption = "閉じるときは、クリックしてください。"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_Terminate()

    Dim Count As Integer

    For Count = 1 To 100

        Beep

    Next

End Sub


Activate イベント、Deactivate イベント

Activate イベントは、オブジェクトがアクティブ ウィンドウになったときに発生します。Deactivate イベントは、オブジェクトがアクティブ ウィンドウでなくなったときに発生します。

構文

Private Sub object_Activate()

Private Sub object_Deactivate()

引数 object は、オブジェクトへの参照を表すオブジェクト式を表します。

解説

コードで Show メソッドを使用して、オブジェクトをアクティブにできます。

Activate イベントは、オブジェクトが表示されているときにだけ発生します。Show メソッドを使用しない限り、Load ステートメントで読み込んだ ユーザー フォームは表示されません。

Activate イベントと Deactivate イベントは、アプリケーション内でフォーカスを移動したときにだけ発生します。他のアプリケーションにあるオブジェクト間でのフォーカスの移動では、この 2 つのイベントは起動しません。

Deactivate イベントは、オブジェクトをアンロードするときには発生しません。


Initialize イベント

オブジェクトが読み込まれたあとで、そのオブジェクトが表示される前に発生します。

構文

Private Sub object_Initialize()

引数 object は、オブジェクトへの参照を表すオブジェクト式を表します。

解説

Initialize イベントは、通常、アプリケーションまたはユーザー フォームが使用する変数に初期値を設定するときに使用されます。


QueryClose イベント

ユーザー フォームが閉じる前に発生します。

構文

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)

QueryClose イベントの構文は、次の指定項目から構成されます。

指定項目	内容
cancel	整数値を指定します。この引数に 0 以外の値を設定すると、読み込まれているすべてのユーザー フォームの QueryClose イベントを停止し、ユーザー フォームとアプリケーションを閉じないようにします。
closemode	QueryClose イベントの発生理由を表す値または定数です。
戻り値

引数 closemode は、次の値を返します。

定数	値	内容
vbFormControlMenu	0	ユーザー フォームのコントロール メニューの [閉じる] がクリックされました。
vbFormCode	1	コードから Unload ステートメントが実行されました。
vbAppWindows	2	現在の Windows のオペレーティング環境セッションが終了しました。(Visual Basic のみ)
vbAppTaskManager	3	Windows のタスク マネージャによって、アプリケーションが閉じられました。(Visual Basic のみ)
これらの定数は、オブジェクト ブラウザの Visual Basic for Applications のオブジェクト ライブラリに一覧があります。vbFormMDIForm もオブジェクト ブラウザで表示されますが、まだサポートされていません。

解説

このイベントは、通常、アプリケーションを閉じる前に、そのアプリケーションに含まれるユーザー フォームで終了していない作業が残っていないかどうかを確認するのに使用します。たとえば、ユーザー フォームの新しいデータが保存されていない場合に、そのデータを保存するように知らせるメッセージを表示します。

アプリケーションを閉じるとき、QueryClose イベント プロシージャを使用して、Cancel プロパティに真 (True) を設定し、閉じる処理をキャンセルできます。


Resize イベント

ユーザー フォームのサイズが変更されたときに発生します。

構文

Private Sub UserForm_Resize()

解説

親ユーザー フォームのサイズが変更された場合は、Resize イベント プロシージャを使用して、コントロールの移動またはサイズ変更を行います。また、このイベント プロシージャを使用して、変数またはプロパティを再計算できます。


Terminate イベント

オブジェクトに関係する変数すべてに Nothing を設定して、オブジェクトのインスタンスへのすべての参照がメモリから削除されたとき、または最後のオブジェクトへの参照が適用範囲外に出たときに発生します。

構文

Private Sub object_Terminate( )

引数 object は、オブジェクトへの参照を表すオブジェクト式を表します。

解説

Terminate イベントは、オブジェクトがアンロードされたあとに発生します。ユーザー フォームやクラスのインスタンスがメモリから削除されても、アプリケーションが異常終了したときは、Terminate イベントは起動しません。


Hide メソッドの使用例

次の例は、コードで 2 つのユーザー フォームを使用します。この例では、UserForm1 の Initialize イベントで、UserForm2 をロードし、表示します。UserForm2 をクリックすると非表示になり、UserForm1 が表示されます。UserForm1 をクリックすると非表示になり、UserForm2 が再び表示されます。

' これは UserForm1 の Initialize イベント プロシージャです。

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' これは UserForm2 の Click イベントです。

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' これは UserForm1 の Click イベントです。

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Load ステートメントの使用例

次の例は、コードで 2 つのユーザー フォームを使用します。この例では、UserForm1 の Initialize イベント中に UserForm2 をロードします。この後、UserForm2 をクリックすると、UserForm1 が表示されます。

' これは UserForm1 の Initialize イベント プロシージャです。

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' これは UserForm2 の Click イベントです。

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' これは UserForm1 の Click イベントです。

Private Sub UserForm_Click()

UserForm2.Show

End Sub


PrintForm メソッドの使用例

次の例では、フォームをクリックすると、フォームのクライアント領域が印刷されます。

' これは UserForm1 の Click イベントです。

Private Sub UserForm_Click()

UserForm1.PrintForm

End Sub


Show メソッドの使用例

次の例は、コードで 2 つのユーザー フォームを使用します。この例では、UserForm1 の Initialize イベントで、UserForm2 をロードし、表示します。UserForm2 をクリックすると非表示になり、UserForm1 が表示されます。UserForm1 をクリックすると非表示になり、UserForm2 が再び表示されます。

' これは UserForm1 の Initialize イベント プロシージャです。

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' これは UserForm2 の Click イベントです。

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' これは UserForm1 の Click イベントです。

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Unload ステートメントの使用例

次の例は、コードで 2 つのユーザー フォームを使用します。この例では、UserForm1 の Initialize イベントで、UserForm2 をロードし、表示します。UserForm2 をクリックするとアンロードされ、UserForm1 が表示されます。UserForm1 をクリックすると、今度はこのフォームがアンロードされます。

' これは UserForm1 の Initialize イベント プロシージャです。

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' これは UserForm2 の Click イベントです。

Private Sub UserForm_Click()

Unload UserForm2

End Sub

' これは UserForm1 の Click イベントです。

Private Sub UserForm_Click()

Unload UserForm1

End Sub


WhatsThisMode メソッドの使用例

次の例では、ユーザー フォームをクリックすると、マウス ポインタは、ポップ ヒント (疑問符) ポインタに変更されます。プロパティ ウィンドウで、WhatsThisHelp プロパティまたは WhatsThisButton プロパティのいずれも真 (True) に設定されていない場合、次の呼び出しは無効です。

Private Sub UserForm_Click()

' マウス ポインタをポップ ヒントに変更します。

WhatsThisMode

End Sub


Hide メソッド

オブジェクトを非表示にしますが、アンロードしません。

構文

object.Hide

引数 object には、オブジェクトへの参照を表すオブジェクト式を指定します。引数 object を省略した場合は、フォーカスを持つユーザー フォームが object とみなされます。

解説

オブジェクトを非表示にすると、そのオブジェクトは画面から削除され、Visible プロパティに偽 (False) が設定されます。非表示のオブジェクトのコントロールを操作することはできません。ただし、プログラムの中から、実行中のアプリケーションや、オートメーションを通してアプリケーションとやりとりを行う別のプロセス、および Windows の Timer コントロール イベントを使用することはできます。

ユーザー フォームを非表示にすると、そのユーザー フォームを非表示にしようとしたイベント プロシージャのすべてのコードの実行が終了するまで、ユーザーはアプリケーションとやりとりすることができません。

Hide メソッドが呼び出されたときにユーザー フォームが読み込まれていなければ、Hide メソッドによってユーザー フォームが読み込まれますが、表示はされません。


Load ステートメント

オブジェクトを読み込みますが、表示はしません。

構文

Load object

引数 object には、オブジェクトへの参照を表すオブジェクト式を指定します。

解説

オブジェクトが読み込まれると、そのオブジェクトはメモリ上に配置されますが、表示はされません。オブジェクトを表示するには、Show メソッドを使用します。オブジェクトが表示されるまで、ユーザーはそのオブジェクトを操作できません。このオブジェクトは、プログラムに記述された Initialize イベント プロシージャから操作できます。


PrintForm メソッド

ユーザー フォーム オブジェクトのイメージをビット単位でプリンタに送ります。

構文

object.PrintForm

引数 object には、オブジェクトへの参照を表すオブジェクト式を指定します。引数 object を省略した場合は、フォーカスを持つユーザー フォームが object とみなされます。

解説

PrintForm によって、UserForm オブジェクトのすべての表示中のオブジェクトとビットマップが印刷されます。また、UserForm オブジェクトに追加されたグラフィックも印刷されます。ただし、プリンタ ドライバやオブジェクトの種類によっては、画面イメージと異なるイメージで出力されることがあります。

PrintForm で使用されるプリンタは、オペレーティング システムの [コントロール パネル] で設定されているプリンタです。


Show メソッド

UserForm オブジェクトを表示します。

構文

[object.]Show

Show メソッドの構文は、次の指定項目から構成されます。

指定項目	内容
object	省略可能です。引数 object には、オブジェクトへの参照を表すオブジェクト式を指定します。引数 object を省略した場合は、アクティブなユーザー フォーム モジュールに対応するユーザー フォームが object とみなされます。
modal	省略可能です。ユーザー フォームがモーダルかモードレスかを示すブール型 (Boolean) の値を指定します。
設定値

引数 modal の設定値は、次のとおりです。

定数	値	内容
vbModal	1	ユーザー フォームはモーダルです。(既定値)
vbModeless	0	ユーザー フォームはモードレスです。
解説

Show メソッドが実行されたときに、指定したオブジェクトが読み込まれていない場合は、そのオブジェクトは自動的に読み込まれます。

メモ   Microsoft Office 97 では、ユーザー フォームをモードレスで表示するように設定されている場合、実行時エラーが発生します。Office 97 では、ユーザー フォームは常にモーダルです。

ユーザー フォームがモードレスのとき、次のコードは中断されずに継続して実行されます。モードレス フォームは、タスク バーや、ウィンドウのタブ オーダーには表示されません。

メモ   コード モジュールを削除するなど、ユーザー フォーム プロジェクトを変更し、再コンパイルした場合、モードレス ユーザー フォームに関連付けられているデータは失われます。

ユーザー フォームがモーダルの場合、アプリケーション内の他の部分を使用する前に、ユーザーは必ず応答する必要があります。ユーザー フォームを非表示にするか、またはアンロードするまで、次のコードは実行されません。ユーザー フォームが表示されると、アプリケーション内の他のフォームは無効になりますが、他のアプリケーションのフォームは有効です。


Unload ステートメント

オブジェクトをメモリから削除します。

構文

Unload object

引数 object には、オブジェクトへの参照を表すオブジェクト式を指定します。

解説

オブジェクトがアンロードされると、そのオブジェクトはメモリから削除され、オブジェクトに関連するすべてのメモリが解放されます。Load ステートメントを使用して再度メモリにロードしない限り、ユーザーはそのオブジェクトを操作できず、プログラムの中から操作することもできません。


WhatsThisMode メソッド

マウス ポインタがポップ ヒント ポインタに変わり、選択されたオブジェクトに関するヘルプをアプリケーションで表示できる状態にします。

構文

object.WhatsThisMode

引数 object には、オブジェクトへの参照を表すオブジェクト式を指定します。引数 object を省略した場合は、フォーカスを持つユーザー フォームが object とみなされます。

解説

WhatsThisMode メソッドを実行すると、アプリケーションはタイトル バーの [?] ボタンをクリックしたときと同じ状態になります。マウス ポインタは、ポップ ヒント ポインタに変わります。オブジェクトをクリックすると、クリックされたオブジェクトの WhatsThisHelpID プロパティによってコンテキスト ヘルプが表示されます。Macintosh の場合にもこのメソッドは存在しますが、ポップ ヒント ポインタは使用できません。


UserForms オブジェクト、UserForms コレクション

UserForms オブジェクトは、アプリケーションのユーザー インターフェイスの一部として使用するウィンドウまたはダイアログ ボックスのことです。

UserForms コレクションは、アプリケーションに読み込まれた各ユーザー フォームを表す要素のコレクションです。UserForms コレクションには、Count プロパティ、Item プロパティ、および Add メソッドがあります。Count は、コレクション内の構成要素数を示します。Item プロパティ (既定メンバ) は、特定のコレクション メンバを示します。Add メソッドは、コレクションに新しいユーザー フォーム要素を追加します。

構文

UserForm

UserForms[.Item](index)

引数 index には、0 から UserForms.Count - 1 までの整数値を指定します。Item プロパティは、UserForms コレクションの既定メンバのため、特に指定する必要はありません。

解説

UserForms コレクションを使用して、アプリケーションに読み込まれているすべてのユーザー フォームを順番に参照できます。UserForms という名前の組み込みパブリック変数を指定します。引数が UserForm クラスとして指定されている関数に UserForms(index) を渡すことができます。

ユーザー フォームには、位置やサイズ、色などの外観を指定するプロパティと、動作を指定するプロパティがあります。

また、ユーザーによって起動されたイベントや、システムによって起動されたイベントに応答することもできます。たとえば、ユーザー フォームを表示する前にモジュール レベルの変数を初期化するような、UserForm の Initialize イベント プロシージャをコードに記述することができます。

プロパティとイベントのほかにも、メソッドを使用してコードからユーザー フォームを操作できます。たとえば、Move メソッドを使用して、UserForm の位置やサイズを変更できます。

ユーザー フォームをデザインするときは、BorderStyle プロパティを設定して境界を定義し、Caption プロパティを設定してタイトル バーに文字列を表示します。コードでは、Hide メソッドと Show メソッドを使用して、実行時に UserForm の表示/非表示を切り替えることができます。

UserForm オブジェクトは、オブジェクト型 (Object) です。変数を UserForm 型で宣言してから、デザイン時に宣言された UserForm 型のインスタンスに設定します。同様に、引数を UserForm 型としてプロシージャに渡すことができます。Dim、Set、および Static の各ステートメントで New キーワードを使用して、ユーザー フォームのコードで複数のインスタンスを作成できます。

Controls コレクションを使用して、UserForm にあるコントロールのコレクションを操作することができます。たとえば、UserForm にあるすべてのコントロールを非表示にするには、次のようなコードを使用します。

For Each Control in UserForm1.Controls

Control.Visible = False

Next Control


StartUpPosition プロパティの使用例

次の例は、UserForm1 の Click イベントで Load ステートメントと Show メソッドを使って、StartUpPosition プロパティに 3 (Windows での既定の位置) が設定された UserForm2 を読み込みます。そして Show メソッドを使って、UserForm2 を表示させます。

Private Sub UserForm_Click()

Load UserForm2

UserForm2.StartUpPosition = 3

UserForm2.Show

End Sub


StartUpPosition プロパティ

UserForm を最初に表示するときの、その位置を表す値を設定します。値の取得も可能です。

StartUpPosition には、次の設定値のうちの 1 つを指定できます。

設定値	値	内容
Manual	0	初期設定値を指定しません。
CenterOwner	1	UserForm が属する項目の中央の位置。
CenterScreen	2	画面全体の中央の位置。
Windows Default	3	画面の左上隅の位置。
解説

StartUpPosition プロパティは、プログラムから設定することも、プロパティ ウィンドから設定することもできます。


WhatsThisButton プロパティ

UserForm オブジェクトのタイトル バーに [?] ボタンが表示されているかどうかを表すブール型 (Boolean) の値を返します。実行時には、値の取得のみ可能です。このプロパティは、Macintosh では使用できません。.

解説

WhatsThisButton プロパティの構文は、次の指定項目から構成されます。

設定値	内容
True	[?] ボタンが表示されます。
False	(既定値) [?] ボタンは表示されません。
解説

WhatsThisButton プロパティの値に真 (True) を設定するには、WhatsThisHelp プロパティにも真 (True) を設定しなければなりません。


WhatsThisHelp プロパティ

コンテキスト ヘルプを使用するか、メイン ヘルプ ウィンドウを使用するかを表すブール型 (Boolean) の値を返します。実行時には、値の取得のみ可能です。このプロパティは、Macintosh では使用できません。.

解説

WhatsThisHelp プロパティの構文は、次の指定項目から構成されます。

設定値	内容
True	アプリケーションでいずれか 1 つのコンテキスト ヘルプの参照方法を使用して Windows ヘルプを起動し、WhatsThisHelpID プロパティに指定したトピックを表示します。
False	(既定値) アプリケーションで F1 キーを使用して Windows ヘルプを起動し、HelpContextID プロパティに指定したトピックを表示します。
解説

アプリケーションでは、2 とおりの方法を使用して、コンテキスト ヘルプを参照できます。これらの方法を使用する場合は、WhatsThisHelp プロパティに真 (True) を設定しておく必要があります。

•	WhatsThisButton プロパティを使用して、ユーザー フォームのタイトル バーに [?] ボタンを表示します。マウス ポインタは、コンテキスト ヘルプが表示される状態を表すポップ ヒント ポインタ (疑問符の付いた矢印) に変わります。表示されるトピックは、ユーザーがクリックしたコントロールの WhatsThisHelpID プロパティで指定されたトピックです。

•	ユーザー フォームの WhatsThisMode メソッドを呼び出します。これは [?] ボタンをクリックしたときと同じ状態になります。たとえば、WhatsThisMode メソッドを呼び出す方法として、アプリケーションのメニュー バーのメニュー コマンドから呼び出す方法があります。


RightToLeft プロパティ

テキストの表示方向を示し、両方向に表示可能なシステムの外観を制御する、ブール型 (Boolean) の値を返します。

解説

RightToLeft プロパティの構文は、次の指定項目から構成されます。

設定値	内容
True	コントロールは、アラビア語の Windows 95 またはヘブライ語の Windows 95 などの両方向対応プラットフォーム上で動いており、テキストは右から左へ表示されます。垂直スクロールバーをテキスト ボックスやリスト ボックスの左側に表示したり、ラベルをテキスト ボックスの右側に表示したりするといった具合に、コントロールの形態を変更する必要があります。
False	コントロールは、英語の Windows 95 などの一方向対応プラットフォームで実行されているものとして動作する必要があり、テキストは左から右に表示されています。コンテナがこのアンビエント プロパティをインプリメントしていない場合は、これが既定値になります。
RightToLeft プロパティは、ユーザー フォームに含まれるコントロールの動作に関する情報を保持します。このプロパティを使って、テキストの表示方向を制御したり、両方向に表示可能なシステムの外観を制御したりできます。


キーワードが見つかりません。

選択したキーワードが Visual Basic ヘルプにありません。キーワードのスペルが間違っている、選択した文字列が大きすぎるかまたは小さすぎる、あるいは、有効な Visual Basic キーワードでない単語に関するヘルプを要求したことが考えられます。

ヘルプが必要なキーワードは、参照していないオブジェクト ライブラリ内にあるかもしれません。プログラム コードで使用しているすべてのオブジェクトに適切なオブジェクト ライブラリを参照しているかどうかを確認してください。

特定のキーワードに関するヘルプを表示する最も簡単な方法は、ヘルプが必要なキーワードのどこかにポインタを合わせて F1 キーを押します。キーワードを選択する必要はありません。キーワードの一部のみ、または複数の単語を選択した場合、希望するヘルプは表示されません。

次の例に示すように、キーワード Value の "a" と "l" の間にポインタを合わせて F1 キーを押すと、Value プロパティのトピックが表示されます。

Worksheets(1).Range ("A2").value=3.14159

組み込みのヘルプ検索機能を使用するには、[ヘルプ] メニューの [Microsoft Visual Basic ヘルプ] をクリックします。


Collection (オブジェクト ブラウザ)

Collection クラスには、Collection オブジェクトを操作するときに使用するプロシージャが含まれます。これらのプロシージャは、コード内の任意の場所で使用できます。

特定のプロシージャに関するヘルプを表示するには

1.	['Collection' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


ColorConstants (オブジェクト ブラウザ)

Color Constants クラスには、あらかじめ定義された色定数が含まれます。これらの定数は、コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['ColorConstants' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


Constants (オブジェクト ブラウザ)

Constants クラスには、各種の定数が含まれます。これらの定数は、コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['Constants' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


Conversion (オブジェクト ブラウザ)

Conversion クラスには、各種の変換操作を実行するときに使用するプロシージャが含まれます。これらのプロシージャは、コード内の任意の場所で使用できます。

特定のプロシージャに関するヘルプを表示するには

1.	['Conversion' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。

メモ   バリアント型 (Variant) の変数を使用する場合、データ型の変換を指定する必要はありません。


DateTime (オブジェクト ブラウザ)

DateTime クラスには、日付および時刻を操作するときに使用するプロシージャとプロパティが含まれます。これらのプロシージャおよびプロパティは、プログラム コード内の任意の場所で使用できます。

特定のプロシージャまたはプロパティに関するヘルプを表示するには

1.	['DateTime' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


ErrObject (オブジェクト ブラウザ)

ErrObject クラスには、Err オブジェクトを使用して実行時エラーを識別し、処理するときに使用するプロパティとプロシージャが含まれます。これらのプロシージャおよびプロパティは、プログラム コード内の任意の場所で使用できます。

特定のプロパティまたはプロシージャに関するヘルプを表示するには

1.	['ErrObject' のメンバ] の一覧からプロパティまたはプロシージャを選択します。

2.	 ボタンをクリックします。


FileSystem (オブジェクト ブラウザ)

FileSystem クラスには、ファイル、ディレクトリまたはフォルダ、およびシステムを操作するときに使用するプロシージャが含まれます。これらのプロシージャは、プログラム コード内の任意の場所で使用できます。

特定のプロシージャに関するヘルプを表示するには

1.	['FileSystem' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


Financial (オブジェクト ブラウザ)

Financial クラスには、財務処理を行うときに使用するプロシージャが含まれます。これらのプロシージャは、プログラム コード内の任意の場所で使用できます。

特定のプロシージャに関するヘルプを表示するには

1.	['Financial' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


Global (オブジェクト ブラウザ)

Global クラスには、UserForm オブジェクトを操作するときに使用するプロシージャとプロパティが含まれます。これらのプロシージャおよびプロパティは、プログラム コード内の任意の場所で使用できます。

特定のプロパティまたはプロシージャに関するヘルプを表示するには

1.	['Global' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


Information (オブジェクト ブラウザ)

Information クラスには、情報を返したり、テストしたり、または確認するときに使用するプロシージャが含まれます。これらのプロシージャは、プログラム コード内の任意の場所で使用できます。

特定のプロシージャに関するヘルプを表示するには

1.	['Information' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


Interaction (オブジェクト ブラウザ)

Interaction クラスには、オブジェクト、アプリケーション、およびシステムとやりとりするときに使用するプロシージャが含まれます。これらのプロシージャは、プログラム コード内の任意の場所で使用できます。

特定のプロシージャに関するヘルプを表示するには

1.	['Interaction' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


KeycodeConstants (オブジェクト ブラウザ)

KeyCodeConstants クラスには、あらかじめ定義されているキー コード定数が含まれます。これらのキー コード定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['KeyCodeConstants' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


Math (オブジェクト ブラウザ)

Math クラスには、演算操作を実行するときに使用するプロシージャが含まれます。これらのプロシージャは、プログラム コード内の任意の場所で使用できます。

特定のプロシージャに関するヘルプを表示するには

1.	['Math' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


Strings (オブジェクト ブラウザ)

Strings クラスには、文字列を操作するときに使用するプロシージャが含まれます。これらのプロシージャは、プログラム コード内の任意の場所で使用できます。

特定のプロシージャに関するヘルプを表示するには

1.	['Strings' のメンバ] の一覧からプロシージャを選択します。

2.	 ボタンをクリックします。


SystemColorConstants (オブジェクト ブラウザ)

System ColorConstants クラスには、グラフィカル ユーザー インターフェイスの各部分を識別する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['SystemColorConstants' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbAppWinStyle (オブジェクト ブラウザ)

列挙型 VbAppWinStyle には、アプリケーション ウィンドウのスタイルを制御するための Shell 関数が使用する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbAppWinStyle' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbCalendar (オブジェクト ブラウザ)

列挙型 VbCalendar には、Visual Basic で使用する暦の種類を決定するときに使用する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbCalendar' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbCompareMethod (オブジェクト ブラウザ)

列挙型 VbCompareMethod には、Instr 関数および StrComp 関数を使用する場合に文字列を比較する方法を決定する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbCompareMethod' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbDayOfWeek (オブジェクト ブラウザ)

列挙型 VbDayOfWeek には、DateDiff 関数、DatePart 関数、および Weekday 関数を使用する場合に特定の曜日を識別するときに使用する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbDayOfWeek' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbFileAttribute (オブジェクト ブラウザ)

列挙型 VbFileAttribute には、Dir 関数、GetAttr 関数、および SetAttr 関数で使われるファイル属性を識別するときに使用する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbFileAttribute' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbFirstWeekOfYear (オブジェクト ブラウザ)

列挙型 VbFirstWeekOfYear には、DateDiff 関数および DatePart 関数を使用する場合にどのようにその年の最初の週を識別するのかを決定する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbFirstWeekOfYear' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbIMEStatus (オブジェクト ブラウザ)

日本版、韓国版、台湾版、中国版でのみ使用できます。列挙型 VbIMEStatus には、IMEStatus 関数を使用する場合に日本語入力システム (IME) を識別する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbIMEStatus' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbMsgBoxResult (オブジェクト ブラウザ)

列挙型 VbMsgBoxResult には、MsgBox 関数により表示されるメッセージ ボックスでどのボタンを押すのかを識別するときに使用する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbMsgBoxResult' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbMsgBoxStyle (オブジェクト ブラウザ)

列挙型 VbMsgBoxStyle には、MsgBox 関数により表示する場合、メッセージ ボックスの動作と、メッセージ ボックスに表示する記号とボタンを指定するときに使用する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbMsgBoxStyle' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbQueryClose (オブジェクト ブラウザ)

列挙型 VbQueryClose には、何により QueryClose イベントが発生したのかを調べるときに使用する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbQueryClose' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbStrConv (オブジェクト ブラウザ)

列挙型 VbStrConv には、StrConv 関数が実行する文字列変換の種類を識別するときに使用する定数が含まれます。これらの定数は、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbStrConv' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbVarType (オブジェクト ブラウザ)

列挙型 VbVarType には、バリアント型 (Variant) に格納できるデータの種類を識別するときに使用する定数が含まれます。これらの定数は、VarType 関数の戻り値と一致し、プログラム コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['VbVarType' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbTriState (オブジェクト ブラウザ)

列挙型 VbTriState は、3 つの状態を識別するときに使用する定数を定義します。

特定の定数に関するヘルプを表示するには

1.	['VbTriState' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbDateTimeFormat (オブジェクト ブラウザ)

列挙型 VbDateTimeFormat は、日付や時刻の書式方法を識別するときに使用する定数を定義します。

特定の定数に関するヘルプを表示するには

1.	['VbDateTimeFormat' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


VbCallType  (オブジェクト ブラウザ)

列挙型 VbCallTypeでは、CallByName 関数が使用する呼び出しの種類が定義されています。

特定の定数に関するヘルプを表示するには

1.	['VbCallType' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


FormShowConstants   (オブジェクト ブラウザ)

FormShowConstants クラスには、あらかじめ定義されたユーザー フォーム定数が含まれます。これらの定数は、コード内の任意の場所で使用できます。

特定の定数に関するヘルプを表示するには

1.	['FormShowConstants' のメンバ] の一覧から定数を選択します。

2.	 ボタンをクリックします。


Collection オブジェクトの使用例

次の例は、Collection オブジェクト (MyClasses) を作成した後、このコレクションにオブジェクトを追加するためのダイアログ ボックスを表示します。このプログラムを実行するには、まず、[挿入] - [クラス モジュール] をクリックしてから、各インスタンスの名前を格納するパブリック変数 InstanceName を Class1 のモジュール レベルで宣言します (「Public InstanceName」と入力)。モジュール名は、既定値の Class1 のまま変えないでください。下のコードをコピーし、別のモジュールの宣言セクションにコードを貼り付け、他のプロシージャの ClassNamer ステートメントで起動します。この例では、ホスト アプリケーションがクラスをサポートする場合のみ実行できます。

Sub ClassNamer()

Dim MyClasses As New Collection	' Collection オブジェクトを作成します。

Dim Num	' 個々のインスタンスを区別するためのカウンタを宣言します。

Dim Msg As String	' メッセージ用の文字列を格納する変数を宣言します。

Dim TheName, MyObject, NameList	' 情報を格納するバリアント型の変数を宣言します。

Do

Dim Inst As New Class1	' Class1 の新しいインスタンスを作成します。

Num = Num + 1	' 変数 Num を加算した後、インスタンスの名前を取得します。

Msg = "このｵﾌﾞｼﾞｪｸﾄの名前を入力してください。" & Chr(13) _

 & "ｺﾚｸｼｮﾝ内のｵﾌﾞｼﾞｪｸﾄの名前を確認するには、ｷｬﾝｾﾙ ﾎﾞﾀﾝを押してください。"

TheName = InputBox(Msg, "ｺﾚｸｼｮﾝ ｱｲﾃﾑの名前付け")

Inst.InstanceName = TheName	' オブジェクトのインスタンスに名前を代入します。

' ユーザーが名前を入力した場合は、オブジェクトをコレクションに追加します。

If Inst.InstanceName <> "" Then

' 名前を付けたオブジェクトをコレクションに追加します。

MyClasses.Add item := Inst, key := CStr(Num)

End If

' 次の参照の準備のため、現在の参照内容をクリアします。

Set Inst = Nothing

Loop Until TheName = ""

For Each MyObject In MyClasses	' インスタンスの名前の一覧を作成します。

NameList = NameList & MyObject.InstanceName & Chr(13)

Next MyObject

' メッセージ ボックスにインスタンスの名前の一覧を表示します。

MsgBox NameList, , "MyClasses ｺﾚｸｼｮﾝ内のｲﾝｽﾀﾝｽの名前"

For Num = 1 To MyClasses.Count	' コレクションからオブジェクトの名前を削除します。

MyClasses.Remove 1	' コレクションは自動的にインデックスが付け直されるので、

' ループを繰り返すごとに先頭のメンバを削除します。

Next

End Sub


Err オブジェクトの使用例

次の例は、Err オブジェクトのプロパティを使って、エラー メッセージ ダイアログ ボックスのメッセージの内容を作成します。Raise メソッドで Visual Basic のエラーを発生させる場合、エラーを発生させる前に Clear メソッドを使うと、Err オブジェクトのプロパティの値は既定値に戻ります。

Dim Msg

' エラーが発生したら、エラー メッセージを作成します。

On Error Resume Next	' エラーのトラップを留保します。

Err.Clear

Err.Raise 6	' "オーバーフロー" エラーを発生させます。

' エラーの発生をチェックした後、メッセージを表示します。

If Err.Number <> 0 Then

Msg = "ｴﾗｰ番号 " & Str(Err.Number) & Err.Source & _" でｴﾗｰが発生しました。"

& Chr(13) & Err.Description

MsgBox Msg, , "ｴﾗｰ", Err.Helpfile, Err.HelpContext

End If


Collection オブジェクト

Collection オブジェクトとは、1 つのオブジェクトとして参照できる複数の要素の集合です。

解説

Collection オブジェクトを利用すると、互いに関連付けられた複数の要素を 1 つのオブジェクトとして参照できます。コレクションの要素、またはメンバはコレクション内に存在することにより関連付けられています。コレクションのメンバは、同じデータ型を共有する必要はありません。

Collection オブジェクトは、他のオブジェクトと同じ方法で作成できます。たとえば、次のように宣言します。

Dim X As New Collection

作成した Collection オブジェクトにメンバを追加するときには Add メソッドを使い、メンバを削除するときには Remove メソッドを使います。また、Collection オブジェクトから特定のメンバを取得するときには Item メソッドを使い、Collection オブジェクトに含まれるすべてのメンバを取得するときには For Each ... Next ステートメントを使います。


Debug オブジェクト

Debug オブジェクトは、実行時にイミディエイト ウィンドウに出力を送ります。


Err オブジェクト

Err オブジェクトは、実行時エラーに関する情報を保有しています。

解説

Err オブジェクトのプロパティは、エラーを発生させた Visual Basic、オブジェクト、または Visual Basic のプログラマによって設定されます。

Err オブジェクトの既定プロパティは Number プロパティです。既定プロパティは Err オブジェクトを指定することにより参照できます。以前のバージョンで Err 関数または Err ステートメントを使用して記述したコードを変更する必要はありません。

実行時エラーが発生すると、そのエラーを識別するための情報など、エラー処理で利用可能な情報が、Err オブジェクトに格納されます。コード内で実行時エラーを生成するときには、Raise メソッドを使います。

Err オブジェクトの各プロパティは、エラー処理ルーチン内の Exit Sub、Exit Function、Exit Property、Resume Next ステートメントの後で、0 または長さ 0 の文字列 ("") にリセットされます。エラー処理ルーチンの外側で Resume ステートメントを使用した場合は、Err オブジェクトのプロパティはリセットされません。Clear メソッドを使うと、Err を明示的にリセットすることができます。

システム エラーやクラス モジュールに対して実行時エラーを生成する場合は、Error ステートメントではなく、Raise メソッドを使用します。そのほかのモジュールのコードで Raise メソッドを使用するかどうかは、返される情報の量によって決定します。

Err オブジェクトは、適用範囲 (スコープ) がパブリックである組み込みオブジェクトです。コード内でそのインスタンスを作成する必要はありません。


 ^ 演算子の使用例

次の例は、^ 演算子を使って、数値のべき乗を求めます。

Dim MyValue

MyValue = 2 ^ 2	' 4 を返します。

MyValue = 3 ^ 3 ^ 3	' 19683 を返します。

MyValue = (-5) ^ 3	' -125 を返します。


 + 演算子の使用例

次の例は、+ 演算子を使って、数値の和を求めます。+ 演算子は文字列の連結にも使えますが、コードのあいまいさを避けるため、文字列を連結する場合はできる限り、& 演算子を使います。+ 演算子を使って作成された式の構成要素に文字列と数値が混在している場合は、算術演算の結果が代入されます。+ 演算子を使って文字列が連結されるのは、式の構成要素がすべて文字列の場合だけです。

Dim MyNumber, Var1, Var2

MyNumber = 2 + 2	' 4 を返します。

MyNumber = 4257.04 + 98112	' 102,369.04 を返します。

Var1 = "34": Var2 = 6	' 数値変数と文字列変数を初期化します。

MyNumber = Var1 + Var2	' 40 を返します。

Var1 = "34": Var2 = "6"	' 文字列変数を初期化します。

MyNumber = Var1 + Var2	' "346" を返します (文字列の連結)。


 - 演算子の使用例

次の例は、- 演算子を使って、2 つの数値の差を求めます。

Dim MyResult

MyResult = 4 - 2	' 2 を返します。

MyResult = 459.35 - 334.90	' 124.45 を返します。


 * 演算子の使用例

次の例は、* 演算子を使って、2 つの数値の積を求めます。

Dim MyValue

MyValue = 2 * 2	' 4 を返します。

MyValue = 459.35 * 334.90 	' 153,836.315 を返します。


 / 演算子の使用例

次の例は、/ 演算子を使って、数値の商を浮動小数点数で求めます。

Dim MyValue

MyValue = 10 / 4	' 2.5 を返します。

MyValue = 10 / 3	' 3.333333 を返します。


 \ 演算子の使用例

次の例は、\ 演算子を使って、数値の商を整数で求めます。

Dim MyValue

MyValue = 11 \ 4	' 2 を返します。

MyValue = 9 \ 3	' 3 を返します。

MyValue = 100 \ 3	' 33 を返します。


Mod 演算子の使用例

次の例は、Mod 演算子を使って、2 つの数値の除算を行い、剰余を求めます。いずれかの数値が浮動小数点数の場合は、整数に丸められます。

Dim MyResult

MyResult = 10 Mod 5	' 0 を返します。

MyResult = 10 Mod 3	' 1 を返します。

MyResult = 12 Mod 4.3	' 0 を返します。

MyResult = 12.6 Mod 5	' 3 を返します。


 & 演算子の使用例

次の例は、& 演算子を使って、文字列を連結します。

Dim MyStr

MyStr = "Hello" & " World"	' "Hello World" を返します。

MyStr = "Check " & 123 & " Check"	' "Check 123 Check" を返します。


比較演算子の使用例

次の例は、各種の比較演算子を使って、式を比較する方法を示します。

Dim MyResult, Var1, Var2

MyResult = (45 < 35)	' False を返します。

MyResult = (45 = 45)	' True を返します。

MyResult = (4 <> 3)	' True を返します。

MyResult = ("5" > "4")	' True を返します。

Var1 = "5": Var2 = 4	' 変数を初期化します。

MyResult = (Var1 > Var2)	' True を返します。

Var1 = 5: Var2 = Empty

MyResult = (Var1 > Var2)	' True を返します。

Var1 = 0: Var2 = Empty

MyResult = (Var1 = Var2)	' True を返します。


And 演算子の使用例

次の例は、And 演算子を使って、2 つの式の論理積を求めます。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 変数を初期化します。

MyCheck = A > B And B > C	' True を返します。

MyCheck = B > A And B > C	' False を返します。

MyCheck = A > B And B > D	' Null 値を返します。

MyCheck = A And B	' 8 を返します (ビット単位の比較)。


Eqv 演算子の使用例

次の例は、Eqv 演算子を使って、2 つの式の論理等価演算を行います。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 変数を初期化します。

MyCheck = A > B Eqv B > C	' True 返します。

MyCheck = B > A Eqv B > C	' False を返します。

MyCheck = A > B Eqv B > D	' Null 値を返します。

MyCheck = A Eqv B	' -3 を返します (ビット単位の比較)。


Imp 演算子の使用例

次の例は、Imp 演算子を使って、2 つの式の論理包含演算を行います。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 変数を初期化します。

MyCheck = A > B Imp B > C	' True を返します。

MyCheck = A > B Imp C > B	' False を返します。

MyCheck = B > A Imp C > B	' True を返します。

MyCheck = B > A Imp C > D	' True を返します。

MyCheck = C > D Imp B > A	' Null 値を返します。

MyCheck = B Imp A	' -1 を返します (ビット単位の比較)。


Not 演算子の使用例

次の例は、Not 演算子を使って、式の論理否定を求めます。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 変数を初期化します。

MyCheck = Not(A > B)	' False を返します。

MyCheck = Not(B > A)	' True を返します。

MyCheck = Not(C > D)	' Null 値を返します。

MyCheck = Not A	' -11 を返します (ビット単位の比較)。


Or 演算子の使用例

次の例は、Or 演算子を使って、2 つの式の論理和を求めます。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 変数を初期化します。

MyCheck = A > B Or B > C	' True を返します。

MyCheck = B > A Or B > C	' True を返します。

MyCheck = A > B Or B > D	' True を返します。

MyCheck = B > D Or B > A	' Null 値を返します。

MyCheck = A Or B	' 10 を返します (ビット単位の比較)。


Xor 演算子の使用例

次の例は、Xor 演算子を使って、2 つの式の排他的論理和を求めます。

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' 変数を初期化します。

MyCheck = A > B Xor B > C	' False を返します。

MyCheck = B > A Xor B > C	' True を返します。

MyCheck = B > A Xor C > B	' False を返します。

MyCheck = B > D Xor A > B	' Null 値を返します。

MyCheck = A Xor B	' 2 を返します (ビット単位の比較)。


Like 演算子の使用例

次の例は、Like 演算子を使って、文字列とパターンを比較します。

Dim MyCheck

MyCheck = "aBBBa" Like "a*a"	' True を返します。

MyCheck = "F" Like "[A-Z]"	' True を返します。

MyCheck = "F" Like "[!A-Z]"	' False を返します。

MyCheck = "a2a" Like "a#a"	' True を返します。

MyCheck = "aM5b" Like "a[L-P]#[!c-e]"	' True を返します。

MyCheck = "BAT123khg" Like "B?T*"	' True を返します。

MyCheck = "CAT123khg" Like "B?T*"	' False を返します。


Is 演算子の使用例

次の例は、Is 演算子を使って、オブジェクトを参照する 2 つの変数を比較します。オブジェクト変数には、説明する目的で一般的な名前を使っています。

Dim MyObject, YourObject, ThisObject, OtherObject, ThatObject, MyCheck

Set YourObject = MyObject	' オブジェクト変数を代入します。

Set ThisObject = MyObject

Set ThatObject = OtherObject

MyCheck = YourObject Is ThisObject	' True を返します。

MyCheck = ThatObject Is ThisObject	' False を返します。

' MyObject と OtherObject が異なる場合、False を返します。

MyCheck = MyObject Is ThatObject


演算子の概要

演算子	内容
算術演算子	算術演算を行うときに使用する演算子です。
比較演算子	比較を行うときに使用する演算子です。
文字列連結演算子	文字列の連結を行うときに使用する演算子です。
論理演算子	論理演算を行うときに使用する演算子です。


演算子の優先順位

1 つの式の中で複数の演算が行われるとき、式の各部分は一定の順序に従って評価されます。この順序を演算子の優先順位と呼びます。

異なる種類の演算子が 1 つの式の中で使われている場合、算術演算子、比較演算子、論理演算子の順序で評価されます。比較演算子の各演算子の優先順位はすべて同じです。したがって、式の中で複数の比較演算子が指定されている場合、現れる順序で左から右に評価されます。算術演算子および論理演算子は、次に示す順序で評価されます。

算術演算子	比較演算子	論理演算子
指数演算 (^)	等しい (=)	Not
マイナス符号 (-)	等しくない (<>)	And
乗算と除算 (*、/)	より小さい (<)	Or
整数除算 (\)	より大きい (>)	Xor
剰余演算 (Mod)	以下 (<=)	Eqv
加算と減算 (+、-)	以上 (>=)	Imp
文字列連結 (&)	Like Is
1 つの式の中で乗算と除算の両方が指定されている場合、これらの演算は左から右の順に評価されます。加算と減算の両方が指定されている場合も、同様に左から右の順に評価されます。かっこ () を使用すると、優先順序を入れ替えたり、式のある部分を他の部分よりも先に強制的に評価することができます。かっこの内側の演算は外側の演算よりも常に先に実行されます。ただし、かっこ内では演算子の優先順序は保持されます。

文字列連結演算子 (&) は算術演算子ではありませんが、その優先順位は、どの算術演算子よりも低く、どの比較演算子よりも高くなります。

Like 演算子は実際にはパターン マッチングで使用する演算子ですが、優先順位は比較演算子と同じです。

Is 演算子は、オブジェクト変数の比較を行います。この演算子は、オブジェクト自体またはオブジェクトの値を比較しません。2 つのオブジェクト変数が同じオブジェクトを参照しているかどうかを調べるだけです。


算術演算子

^ 演算子

* 演算子

/ 演算子

\ 演算子

Mod 演算子

+ 演算子

- 演算子


文字列連結演算子

& 演算子

+ 演算子


論理演算子

And 演算子

Eqv 演算子

Imp 演算子

Not 演算子

Or 演算子

Xor 演算子


 ^ 演算子

数値のべき乗を求めます。

構文

result = number^exponent

^ 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
number	必ず指定します。任意の数式を指定します。
exponent	必ず指定します。任意の数式を指定します。
解説

数式 exponent が整数のときに限り、数式 number に負の値を指定できます。1 つの式の中で複数の指数演算が行われるとき、^ 演算子は左から右の順に評価されます。

通常、演算結果 result のデータ型は、倍精度浮動小数点数型 (Double) または内部処理形式が倍精度浮動小数点数型のバリアント型 (Variant) です。ただし、数式 number または exponent のいずれかが Null 値に評価される式のときは、演算結果 result も Null 値となります。


 + 演算子

2 つの数値の和を求めます。

構文

result = expression1+expression2

+ 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
expression1	必ず指定します。任意の式を指定します。
expression2	必ず指定します。任意の式を指定します。
解説

+ 演算子を使うと、加算と文字列連結のどちらが行われるのかが、事前にはわかりにくいことがあります。コードのあいまいさをなくしてわかりやすくするために、文字列を連結する場合は & 演算子を使用してください。

2 つの式のうち、少なくとも一方がバリアント型 (Variant) 以外のデータ型であるときに適用される規則を次に示します。

条件	行われる演算
両方の式が数値データ型 (バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、日付型 (Date)、通貨型 (Currency)、または10 進型 (Decimal)	加算
両方の式が文字列型 (String)	文字列連結
一方の式が数値データ型、他方がバリアント型 (Null 値を除く)	加算
一方の式が文字列型、他方がバリアント型 (Null 値を除く)	文字列連結
一方の式が Empty 値を含むバリアント型	他方の式をそのまま result として返します。
一方の式が数値データ型、他方が文字列型	エラー "型が一致しません。" が発生します。
一方または両方の式が Null 値	result は Null 値になります。
両方の式がバリアント型のときに適用される規則を次に示します。

条件	行われる演算
両方の式の内部処理形式が数値データ型	加算
両方の式の内部処理形式が文字列型	文字列連結
一方の式の内部処理形式が数値データ型、他方の内部処理形式が数値を表す文字として解釈できる文字列型	加算
数値データ型の式だけから構成される単純な加算では、演算結果 result のデータ型は、通常最も精度の高い式のデータ型と同じになります。数値データ型の精度は、バイト型、整数型、長整数型、単精度浮動小数点数型、倍精度浮動小数点数型、通貨型、10 進型の順に高くなります。ただし、次に示すような例外があります。

条件	引数 result の値
単精度浮動小数点数型と長整数型とを加算	倍精度浮動小数点数型 (Double)。
演算結果 result のデータ型が内部処理形式 Long、Single、またはDate のバリアント型であり、その有効範囲を超える場合	内部処理形式 Double のバリアント型に変換されます。
演算結果 result のデータ型が内部処理形式 Byte のバリアント型であり、その有効範囲を超える場合	内部処理形式 Integer のバリアント型に変換されます。
演算結果 result のデータ型が内部処理形式 Integer のバリアント型であり、その有効範囲を超える場合	内部処理形式 Long のバリアント型に変換されます。
日付型を任意のデータ型に加算	日付型。
一方または両方の式が Null 値のとき、演算結果 result は Null 値になります。両方の式が Empty 値のとき、演算結果 result は整数型になります。ただし、一方の式だけが Empty 値のときは、他方の式がそのまま演算結果 result として返されます。

メモ   加算と減算に使われる精度は、乗算に使われる精度とは異なります。


 - 演算子

2 つの数値の差を求めます。または、数式の符号を反転した値を指定します。

構文 1

result = number1-number2

構文 2

-number

- 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
number	必ず指定します。任意の数式を指定します。
number1	必ず指定します。任意の数式を指定します。
number2	必ず指定します。任意の数式を指定します。
解説

構文 1 では、- 演算子は減算演算子として 2 つの数値の差を求めるために使用されます。構文 2 では、- 演算子は単項マイナス符号演算子として式の符号を反転した値を指定するために使用されます。

演算結果 result のデータ型は、通常最も精度の高い式のデータ型と同じになります。数値データ型の精度は、バイト型 (Byte)、整数型 (Integer)、長整数型 (Long)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、通貨型 (Currency) および 10 進型 (Decimal) の順に高くなります。ただし、次に示すような例外があります。

条件	引数 result の値
単精度浮動小数点数型および長整数型の減算	倍精度浮動小数点数型に変換されます。
演算結果 result のデータ型が内部処理形式 Long、Single、または Date のバリアント型であり、その有効範囲を超える場合	倍精度浮動小数点数型を含むバリアント型 (Variant) に変換されます。
演算結果 result のデータ型が内部処理形式 Byte のバリアント型であり、その有効範囲を超える場合	内部処理形式  Integer のバリアント型に変換されます。
演算結果 result のデータ型が内部処理形式 Integer のバリアント型であり、その有効範囲を超える場合	内部処理形式 Long のバリアント型に変換されます。
日付型とその他のデータ型を含む除算	日付型
2 つの日付型の式を含む除算	倍精度浮動小数点数型
一方または両方の式が Null 値のとき、演算結果 result は Null 値になります。Empty 値 (VarType 0) を持つ式は、0 として扱われます。

メモ   加算と減算に使われる精度は、乗算に使われる精度とは異なります。


 * 演算子

2 つの数値の積を求めます。

構文

result = number1*number2

* 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
number1	必ず指定します。任意の数式を指定します。
number2	必ず指定します。任意の数式を指定します。
解説

演算結果 result のデータ型は、通常最も精度の高い式のデータ型と同じになります。数値データ型の精度は、バイト型 (Byte)、整数型 (Integer)、長整数型 (Long)、単精度浮動小数点数型 (Single)、通貨型 (Currency)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) の順に高くなります。ただし、次に示すような例外があります。

条件	引数 result の値
単精度浮動小数点数型と長整数型を含む乗算	倍精度浮動小数点数型に変換されます。
演算結果 result のデータ型が内部処理形式 Long、Single、または Date のバリアント型であり、その有効範囲を超える場合	倍精度浮動小数点数型を含むバリアント型に変換されます。
演算結果 result のデータ型が内部処理形式 Byte のバリアント型であり、その有効範囲を超える場合	内部処理形式 Integer のバリアント型に変換されます。
演算結果 result のデータ型が内部処理形式 Integer のバリアント型であり、その有効範囲を超える場合	内部処理形式 Long のバリアント型に変換されます。
一方または両方の式が Null 値のとき、result は Null 値になります。Empty 値 (VarType 0) を持つ式は、0 として扱われます。

メモ   乗算に使われる精度は、加算と減算に使われる精度とは異なります。


 / 演算子

2 つの数値の商を計算し、結果を浮動小数点数で返します。

構文

result = number1/number2

/ 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
number1	必ず指定します。任意の数式を指定します。
number2	必ず指定します。任意の数式を指定します。
解説

演算結果 result のデータ型は、通常は倍精度浮動小数点数型 (Double)、または内部処理形式が倍精度浮動小数点数型のバリアント型 (Variant) です。ただし、次のような例外があります。

条件	引数 result の値
両方の式が、バイト型 (Byte)、整数型 (Integer)、または単精度浮動小数点数型 (Single) の式	単精度浮動小数点数型の有効範囲を超えない場合は、単精度浮動小数点数型の値を返します。有効範囲を超えると、エラーが発生します。
両方の式が内部処理形式 Byte、Integer、または Single のバリアント型	単精度浮動小数点数型の有効範囲を超えない場合は、内部処理形式 Single のバリアント型です。有効範囲を超えると、倍精度浮動小数点数型を含むバリアント型 (Variant) になります。
10 進型 (Decimal) と他のデータ型を含む除算	10 進型。
一方または両方の式が Null 値の場合、演算結果 result は Null 値になります。Empty 値 (VarType 0) を持つ式は、0 として扱われます。


 \ 演算子

2 つの数値の商を計算し、結果を整数で返します。

構文

result = number1\number2

\ 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
number1	必ず指定します。任意の数式を指定します。
number2	必ず指定します。任意の数式を指定します。
解説

除算を実行する前に、数式はバイト型 (Byte)、整数型 (Integer)、または長整数型 (Long) の式に丸められます。

通常、演算結果 result のデータ型は、result の値が整数であるかどうかに関係なく、バイト型、整数型、または長整数型、あるいは内部処理形式がバイト型、整数型、または長整数型のバリアント型 (Variant) になります。小数部分はすべて切り捨てられます。ただし、一方または両方の式が Null 値のときは、演算結果 result も Null 値になります。Empty 値を持つ式は、0 として扱われます。


Mod 演算子

2 つの数値の除算を行い、その剰余を返します。

構文

result = number1 Mod number2

Mod 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
number1	必ず指定します。任意の数式を指定します。
number2	必ず指定します。任意の数式を指定します。
解説

剰余演算子は、数式 number1 を数式 number2 で除算し、その余りを演算結果 result として返します。このとき浮動小数点数は整数に丸められます。たとえば、次に示す式では、変数 A (演算結果 result) の値は 5 になります。

A = 19 Mod 6.7

通常、演算結果 result のデータ型は、result の値が整数であるかどうかに関係なく、バイト型 (Byte)、整数型 (Integer)、または長整数型 (Long)、あるいは、内部処理形式がバイト型、整数型、または長整数型のバリアント型 (Variant) になります。小数部分はすべて切り捨てられます。ただし、一方または両方の式が Null 値のときは、演算結果 result も Null 値になります。Empty 値を持つ式は、0 として扱われます。


 & 演算子

2 つの式に対して文字列連結を行います。

構文

result = expression1 & expression2

& 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の文字列型 (String) またはバリアント型 (Variant) の変数を指定します。
expression1	必ず指定します。任意の式を指定します。
expression2	必ず指定します。任意の式を指定します。
解説

式 expression が文字列でない場合は、常に内部処理形式が文字列型のバリアント型に変換されます。演算結果 result のデータ型は、両方の式が文字列式のときは、文字列型になります。それ以外のときは、内部処理形式が文字列型のバリアント型になります。両方の式が Null 値のときは、演算結果 result も Null 値になります。ただし、一方の式だけが Null 値のときは、長さ 0 の文字列 ("") として他方の式と連結されます。Empty 値を持つ式も、長さ 0 の文字列として扱われます。


比較演算子

2 つの式の比較を行います。

構文

result = expression1 comparisonoperator expression2

result = object1 Is object2

result = string Like pattern

比較演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
expression	必ず指定します。任意の式を指定します。
comparisonoperator	必ず指定します。任意の比較演算子を指定します。
object	必ず指定します。任意のオブジェクトへの参照を指定します。
string	必ず指定します。任意の文字列式を指定します。
pattern	必ず指定します。任意の文字列式または文字の範囲を指定します。
解説

各比較演算子の演算結果 result が、真 (True)、偽 (False)、Null 値となる条件を、次の表に示します。

演算子	真 (True)	偽 (False)	Null 値
< (より小さい)	expression1 < expression2	expression1 >= expression2	expression1 または expression2 = Null
<= (以下)	expression1 <= expression2	expression1 > expression2	expression1 または expression2 = Null
> (より大きい)	expression1 > expression2	expression1 <= expression2	expression1 または expression2 = Null
>= (以上)	expression1 >= expression2	expression1 < expression2	expression1 または expression2 = Null
= (等しい)	expression1 = expression2	expression1 <> expression2	expression1 または expression2 = Null
<> (等しくない)	expression1 <> expression2	expression1 = expression2	expression1 または expression2 = Null
メモ    Is 演算子と Like 演算子は、表に示されている比較演算子とは異なる特殊な比較を行います。

2 つの式を比較するとき、数値としての比較と文字列 (数字) としての比較のどちらが行われるのか、事前にはわかりにくいことがあります。2 つの式のうち、少なくとも一方がバリアント型 (Variant) 以外のデータ型である場合に適用される規則を次に示します。

条件	行われる演算
両方の式が数値データ型 (バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、日付型(Date)、通貨型(Currency)、または 10 進型(Decimal))	数値比較
両方の式が文字列型 (String)	文字列比較
一方の式が数値データ型、他方がバリアント型 (内部処理形式は数値データ型または数値に変換できる文字列型)	数値比較
一方の式が数値データ型、他方がバリアント型 (内部処理形式は、数値に変換できない文字列型)	エラー "型が一致しません。" が発生します。
一方の式が文字列型、他方がバリアント型 (Null 値を除く)	文字列比較
一方の式が Empty 値、他方が数値データ型	Empty 値の式を 0 とみなして数値比較を行います。
一方の式が Empty 値、他方が文字列型	Empty 値の式を長さ 0 の文字列 ("") とみなして文字列比較を行います。
引数 expression1 と expression2 が両方ともバリアント型の式の場合は、各式の内部処理形式に基づいて次のように演算が行われます。

条件	行われる演算
両方の式の内部処理形式が数値データ型	数値比較
両方の式の内部処理形式が文字列型	文字列比較
一方の式の内部処理形式が数値データ型、他方の内部処理形式が文字列型	数値データ型の式が文字列型の式より小さいという結果になります。
一方の式の内部処理形式が Empty 値、他方の内部処理形式が数値データ型	Empty 値を 0 とみなして数値比較を行います。
一方の式の内部処理形式が Empty 値、他方の内部処理形式が文字列型	Empty 値を長さ 0 の文字列 ("") とみなして文字列比較を行います。
両方の式の内部処理形式が Empty 値	2 つの式は等しいという結果になります。
単精度浮動小数点数型 (Single) の値を倍精度浮動小数点数型 (Double) の値と比較すると、倍精度浮動小数点数点型の値は単精度浮動小数点数型の値の精度に丸められます。

通貨型 (Currency) の式を、単精度浮動小数点数型または倍精度浮動小数点数型の式と比較する場合、単精度浮動小数点数型または倍精度浮動小数点数型の式は通貨型に変換されます。同様に 10 進型 (Decimal) の値を単精度浮動小数点数型または倍精度浮動小数点数型と比較すると、単精度浮動小数点数または倍精度浮動小数点数の値は、10 進型に変換されます。通貨型では、0.0001 未満の端数は切り捨てられるか、オーバーフロー エラーが発生します。同様に 10 進型では、小数点以下 28 桁 (1E-28) 未満の端数は切り捨てられるか、オーバーフロー エラーが発生します。このように端数が切り捨てられると、2 つの値が等しくない場合でも等しいとみなされることがあります。


And 演算子

2 つの式の論理積を求めます。

構文

result = expression1 And expression2

And 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
expression1	必ず指定します。任意の式を指定します。
expression2	必ず指定します。任意の式を指定します。
解説

両方の式がそれぞれ真 (True) と評価されるときに限り、演算結果 result は真 (True) になります。いずれか一方の式が偽 (False) と評価されるときは、演算結果 result は偽 (False) になります。2 つの式の値の組み合わせと演算結果 result の値の対応を次の表に示します。

expression1	expression2	result
True	True	True
True	False	False
True	Null 値	Null 値
False	True	False
False	False	False
False	Null 値	False
Null 値	True	Null 値
Null 値	False	False
Null 値	Null 値	Null 値
And 演算子は、2 つの数式内の対応するビットに対するビット単位の比較も行います。次の真理値表に従って、演算結果 result 内の対応するビットがセットされます。

expression1	expression2	result
0	0	0
0	1	0
1	0	0
1	1	1


Eqv 演算子

2 つの式の論理等価演算を行います。

構文

result = expression1 Eqv expression2

Eqv 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
expression1	必ず指定します。任意の式を指定します。
expression2	必ず指定します。任意の式を指定します。
解説

いずれかの式が Null 値の場合は、演算結果 result も Null 値になります。どちらの式も Null 値でない場合、演算結果 result の値は次の表に従って決まります。

expression1	expression2	result
True	True	True
True	False	False
False	True	False
False	False	True
Eqv 演算子は、2 つの数式内の対応するビットに対するビット単位の比較も行います。次の真理値表に従って、演算結果 result 内の対応するビットがセットされます。

expression1	expression2	result
0	0	1
0	1	0
1	0	0
1	1	1


Imp 演算子

2 つの式の論理包含演算を行います。

構文

result = expression1 Imp expression2

Imp 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
expression1	必ず指定します。任意の式を指定します。
expression2	必ず指定します。任意の式を指定します。
解説

2 つの式の値の組み合わせと演算結果 result の値の対応を次の表に示します。

expression1	expression2	result
True	True	True
True	False	False
True	Null 値	Null 値
False	True	True
False	False	True
False	Null 値	True
Null 値	True	True
Null 値	False	Null 値
Null 値	Null 値	Null 値
Imp 演算子は、2 つの数式内の対応するビットに対するビット単位の比較も行います。次に示す真理値表に従って、演算結果 result 内の対応するビットがセットされます。

expression1	expression2	result
0	0	1
0	1	1
1	0	0
1	1	1


Not 演算子

式の論理否定を求めます。

構文

result = Not expression

Not 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
expression	必ず指定します。任意の式を指定します。
解説

式 expression の値と演算結果 result の値の対応を次の表に示します。

expression	result
True	False
False	True
Null 値	Null 値
Not 演算子は、変数に対してビット単位の反転も行います。次に示す真理値表に従って、演算結果 result の対応するビットがセットされます。

expression	result
0	1
1	0


Or 演算子

2 つの式の論理和を求めます。

構文

result = expression1 Or expression2

Or 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
expression1	必ず指定します。任意の式を指定します。
expression2	必ず指定します。任意の式を指定します。
解説

2 つの式のいずれか一方、または両方が真 (True) のとき、演算結果 result は真になります。2 つの式の値と演算結果 result の値の対応を次の表に示します。

expression1	expression2	result
True	True	True
True	False	True
True	Null 値	True
False	True	True
False	False	False
False	Null 値	Null 値
Null 値	True	True
Null 値	False	Null 値
Null 値	Null 値	Null 値
Or 演算子は、2 つの数式内の対応するビットに対してビット単位の比較も行います。次に示す真理値表に従って、演算結果 result 内の対応するビットがセットされます。

expression1	expression2	result
0	0	0
0	1	1
1	0	1
1	1	1


Xor 演算子

2 つの式の排他的論理和を求めます。

構文

[result =] expression1 Xor expression2

Xor 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	省略可能です。任意の数値変数を指定します。
expression1	必ず指定します。任意の式を指定します。
expression2	必ず指定します。任意の式を指定します。
解説

2 つの式の一方だけが真 (True) のとき、演算結果 result は真になります。いずれかの式が Null 値のときは、演算結果 result も Null 値になります。どちらの式も Null 値でないときは、演算結果 result の値は次に示す表に従って決まります。

expression1	expression2	result
True	True	False
True	False	True
False	True	True
False	False	False
Xor 演算子は論理演算子およびビット演算子として機能します。次の表に示すように、演算結果を得るために排他的論理和で 2 つの数式のビット単位の比較を行います。

expression1	expression2	result
0	0	0
0	1	1
1	0	1
1	1	0


Is 演算子

2 つのオブジェクト変数を比較します。

構文

result = object1 Is object2

Is 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
object1	必ず指定します。任意のオブジェクト変数を指定します。
object2	必ず指定します。任意のオブジェクト変数を指定します。
解説

object1 と object2 に指定した変数が、両方同じオブジェクトを参照している場合、演算結果 result は真 (True) になります。異なるオブジェクトを参照している場合は、演算結果 result は偽 (False) になります。2 つの変数に同じオブジェクトを参照させるには、いくつかの方法があります。

次の例では、変数 A は変数 B と同じオブジェクトを参照するようになります。

Set A = B

次の例では、変数 A と変数 B は変数 C と同じオブジェクトを参照するようになります。

Set A = C

Set B = C


Like 演算子

2 つの文字列の比較を行います。

構文

result = string Like pattern

Like 演算子の構文は、次の指定項目から構成されます。

指定項目	内容
result	必ず指定します。任意の数値変数を指定します。
string	必ず指定します。任意の文字列式を指定します。
pattern	必ず指定します。「解説」に示すパターン マッチング規則に従った任意の文字列式を指定します。
解説

文字列式 string と文字列式 pattern が一致していると、演算結果 result は真 (True) になります。一致していないときは、演算結果 result は偽 (False) になります。文字列式 string または文字列式 pattern のいずれかが Null 値のときは、演算結果 result も Null 値になります。

Like 演算子の動作は、Option Compare ステートメントの設定によって異なります。各モジュールに対する文字列比較の既定の方法は、Option Compare Binary ステートメントの設定が使われます。

Option Compare Binary ステートメントでは、文字列比較で使われる並べ替え順序は、バイナリ文字コードのコード順によって決まります。並べ替えのコード順としては、シフト JIS コードが使用されます。バイナリ モード (Binary) での並べ替え順序の例を次に示します。

A < B < E < Z < a < b < e < z < ﾀ < ﾊ < ﾘ < � < � < �

Option Compare Text ステートメントでは、文字列比較は、オペレーティング システムの国別情報によって決まり、日本語の場合は 50 音順およびアルファベット順で、大文字小文字を区別しない並べ替え順序になります。清音や濁音は、清音、濁音、半濁音の順序で並べ替えられます。テキスト モード (Text) での並べ替え順序の例を次に示します。

(*=＊) < (0=０) < (9=９) < (A=a=Ａ=ａ) < (B=b=Ｂ=ｂ) < (ｱ=ア=あ) < (ﾝ=ン=ん) < 亜

組み込みのパターン マッチング機能では、文字列比較のための便利な機能を利用できます。ワイルドカード、文字リスト、文字範囲などを組み合わせて使用できます。次に文字列式 pattern に指定できる文字と、一致する文字を示します。

文字パターン	引数 string の中の一致する文字
?	任意の 1 文字
*	任意の数の文字
#	任意の 1 文字の数字 (0-9)
[charlist]	文字リスト charlist に指定した文字の中の任意の  1 文字
[!charlist]	文字リスト charlist に指定した文字以外の任意の 1 文字
これらのうち、"#" を除くすべての文字パターンでは、2 バイト文字 (全角文字) も 1 文字と数えて文字列比較を行います。"#" には、1 バイト (半角) の数字だけが一致します。1 個以上の文字のリスト (charlist) を角かっこ ([ ]) で囲んで文字列式 pattern に指定すると、その中のいずれかの文字と、文字列式 string の中の該当する 1 文字が一致するかどうかを比較することができます。角かっこ ([ ]) の中の文字リストには、数字も含め、文字コードおよびシフト JIS コードのほぼすべての文字を指定できます。

メモ   特殊文字の左角かっこ ([)、疑問符 (?)、数値記号 (#)、およびアスタリスク (*) を文字列比較するには、これらの文字を角かっこで囲みます。右角かっこ (]) をワイルドカードとしてではなくその文字自体として文字列比較を行うときには、右角かっこを他の文字と共に角かっこで囲んでリストの中に指定することはできません。右角かっこは、文字のリストに入れずに単独で指定すると、独立した文字として、文字列の中の文字と比較できます。

角かっこの中に指定する文字リスト charlist には、文字コードの並びの上限と下限をハイフン (-) で区切ることによって、特定の文字範囲を指定することもできます。2 バイト文字も範囲指定でき、漢字の範囲の指定もできます。たとえば、[A-Z] と指定すると、大文字の A から Z までの文字をすべてリストの中に指定したときと同じ意味になり、文字列式 string の中の対応する位置の文字が大文字のアルファベットのいずれか 1 文字であるときに一致します。1 組の角かっこの中に複数の範囲を指定するときは、それぞれの範囲の間を区切らずに記述します。

指定した範囲の意味は、Option Compare ステートメントの設定と、実行時のオペレーティング システムの国別情報の設定によって異なります。Option Compare Binary ステートメントの例では、[A-E] の範囲を指定すると、A、B および E が一致します。Option Compare Text ステートメントでは、[A-E] の範囲を指定すると、A、a、ﾀ、焉AB、b、E、および e が一致します。この範囲を指定すると、ﾊ または � と一致しません。並べ替え順序では、アクセント記号付きの文字はアクセント記号の付いていない文字の後になります。

パターン マッチングに関するその他の主な規則を次に示します。

•	文字リスト charlist の先頭に感嘆符 (!) を指定すると、文字列 string の中の文字が文字リスト charlist に指定した文字以外のときに、一致することを表します。角かっこの外に指定した感嘆符は、文字としての感嘆符と一致します。

•	ハイフン (-) を文字リスト charlist の先頭 (感嘆符が使われているときはその直後) または charlist の末尾に指定したときは、文字としてのハイフンと一致します。それ以外の位置に指定したハイフンは、ASCII コードおよびシフト JIS コードの文字の範囲を表します。

•	文字の範囲を指定するとき、文字の順序は昇順 (低い方から高い方へ) でなければなりません。たとえば、[A-Z] と指定することはできますが、[Z-A] と指定すると文字の範囲は正しく解釈されません。

•	角かっこの中に何も指定しないと ([])、長さ 0 の文字列 ("") とみなされます。

一部の言語には、離れている 2 つの文字を意味する特殊文字がアルファベットに含まれています。たとえば、いくつかの言語では、文字 "a" と "e" が共に表示されるときに、文字 "�" を使って表します。Like 演算子は、単一の特殊文字と、異なる 2 つの文字が同等であると認識します。

このような特殊文字を使う言語をオペレーティング システムの国別情報で設定すると、文字列式 pattern または文字列式 string 内の一方の特殊文字は、他方の文字列内の同等な連続する 2 文字と一致します。同様に角かっこで囲まれた (角かっこ自体はリスト内または範囲内にある) 文字列式 pattern 内の単一の特殊文字は、文字列式 string 内の同等の連続する 2 文字と一致します。


Count プロパティの使用例

次の例は、Collection オブジェクトの Count プロパティを使って、MyClasses コレクションのメンバをすべて削除するのに必要なループ回数を取得します。数値によるインデックスが付いたコレクションでは、インデックス番号の既定の最小値は 1 です。コレクションは、メンバが削除されるとインデックスが自動的に付け直されます。したがって次のコードでは、ループするごとに先頭のメンバを削除しています。

Dim Num, MyClasses

For Num = 1 To MyClasses.Count	' コレクションからメンバを削除します。

MyClasses.Remove 1	' 数値によるインデックスが付いたコレクションでは、

Next	' インデックス番号は 1 から始まります。


Description プロパティの使用例

次の例は、Err オブジェクトの Description プロパティにユーザー定義のメッセージを設定します。

Err.Description = "この操作に必要なオブジェクトに" _

& "アクセスすることができませんでした。"


HelpContext プロパティの使用例

次の例は、Err オブジェクトの HelpContext プロパティを使って、"オーバーフローしました。" エラーに対応する Visual Basic のヘルプを表示します。

Dim Msg

Err.Clear

On Error Resume Next

Err.Raise 6 	' "オーバーフローしました。" エラーを発生させます。

If Err.Number <> 0 Then

Msg = "ヘルプ コンテキスト番号 " & Err.HelpContext & " について " & _

Err.HelpFile & " のヘルプを参照するには、F1 キーまたは Help キーを押してください。"

MsgBox Msg, , "ｴﾗｰ : " & Err.Description, Err.HelpFile, _

Err.HelpContext

End If


HelpFile プロパティの使用例

次の例は、Err オブジェクトの HelpFile プロパティを使って、ヘルプを表示します。特に指定しない限り、HelpFile プロパティには Visual Basic のヘルプ ファイルの名前が格納されています。

Dim Msg

Err.Clear

On Error Resume Next	' 説明のため、エラーを抑止します。

Err.Raise 6	' "オーバーフローしました。" エラーを発生させます。

Msg = "このエラーに関する項目を " & Err.HelpFile & _

" で参照するには、F1 キーまたは Help キーを押してください。"

MsgBox Msg, , "ｴﾗｰ : " & Err.Description,Err.HelpFile, Err.HelpContext


LastDLLError プロパティの使用例

次のコードをユーザー フォームに貼り付けて実行すると、DLL 関数を呼び出そうとします。コードが実行されていない場合、エラーが生成された Null ポインタおよびイベント SQL に渡された引数がキャンセルできないため、呼び出しは失敗します。次のコードでは、呼び出し後の戻り値を調べ、Err オブジェクトの LastDLLError プロパティを表示してエラー コードを示します。システムに DLL が存在しない場合、LastDLLError は常に 0 を返します。

 Private Declare Function SQLCancel Lib "ODBC32.dll" _

 (ByVal hstmt As Long) As Integer

Private Sub UserForm_Click()

Dim RetVal

' 無効なコードを呼び出します。

RetVal = SQLCancel(myhandle&)

' SQL エラー コードを調べます。

If RetVal = -2 Then

' 情報コードを表示します。

MsgBox "ｴﾗｰ ｺｰﾄﾞ : " & Err.LastDllError

    End If

End Sub


Number プロパティの使用例

最初の例では、エラー処理ルーチンでの Number プロパティの典型的な使用方法を示しています。2 つ目の例では、Err オブジェクトの Number プロパティの値を見て、オートメーション オブジェクトによって返されたエラーが、オブジェクトによって定義されたものであるか、または Visual Basic によって定義されたエラーに割り当てられたものであるかを調べます。定数 vbObjectError は大きな負の値で、サーバーによって定義されたエラーであることを示すために、オブジェクトが自分のエラー番号に加算するものです。したがって、Err.Number から定数 vbObjectError を差し引けば、オブジェクト定義のエラーか、Visual Basic 定義のエラーかが判別できます。エラーがオブジェクト定義のエラーである場合は、元のエラー番号は Error.Number に格納されています。この番号は、エラーの発生元と共にメッセージ ボックスに表示されます。エラーが Visual Basic のエラーである場合は、そのエラー番号をメッセージ ボックスに表示します。

' Number プロパティの典型的な使用例。

Sub test()

On Error GoTo out

Dim x, y

x = 1 / y	' 0 で除算するエラーを生成します。

Exit Sub

out:

MsgBox Err.Number

MsgBox Err.Description

' 0 で除算したエラーかどうかを調べます。

If Err.Number = 11 Then

y = y + 1

End If

Resume

End Sub

' オートメーション オブジェクトによって返されたエラーが設定された Number プロパティを使用します。

Dim MyError, Msg

' 最初に、オブジェクト自身のエラーであることを示すために加算した定数を引きます。

MyError = Err.Number - vbObjectError

' 定数 vbObjectError を差し引いた結果のエラー番号が、0 ～ 65,535 の範囲内にある場合、そのエラー番号はオブジェクト定義のエラー番号です。

If MyError > 0 And MyError < 65535 Then

Msg = "アクセスしたオブジェクトが、エラーに対して番号 " & MyError & _

 	" を割り当てました。エラーの発生元は " & Err.Source & _

" です。エラー発生元のヘルプを参照するには、F1 キーを押してください。"

' 0 ～ 65,535 の範囲外である場合は、Visual Basic のエラー番号です。

Else

Msg = "このエラー (エラー番号 " & Err.Number & ") は、Visual Basic のエラー番号です。" & _

" このエラーに関する Visual Basic のヘルプを参照するには、" _

& " ヘルプ ボタンまたは F1 キーを押してください。"

End If

MsgBox Msg, , "ｵﾌﾞｼﾞｪｸﾄ ｴﾗｰ ", Err.HelpFile, Err.HelpContext


Source プロパティの使用例

次の例は、Visual Basic で作成されたオートメーション オブジェクトのプログラム ID を変数 MyObjectID に代入し、その後、Raise メソッドでエラーを発生させるときに、この変数を Err オブジェクトの Source プロパティに代入しています。エラー処理を行うときには、Source プロパティおよび Err オブジェクトのプロパティのうち Number プロパティ以外のプロパティをコード内で使用しないでください。Number プロパティ以外のプロパティは、コードで処理できないエラーが発生した場合に、詳細な情報を表示する目的でのみ使用してください。この例では、App と MyClass への参照が有効であることを想定しています。

Dim MyClass, MyObjectID, MyHelpFile, MyHelpContext

' MyClass という種類のオブジェクトは、エラーを生成し、Source プロパティを含め、Err オブジェクトの全プロパティを設定します。

' Source プロパティには、App オブジェクトの Title プロパティと MyClass オブジェクトの Name プロパティを組み合わせた変数 MyObjectID を代入します。

MyObjectID = App.Title & "." & MyClass.Name

Err.Raise	Number := vbObjectError + 894, Source := MyObjectID, _

Description := "プログラムを完了することができませんでした。", _

HelpFile := MyHelpFile, HelpContext := MyHelpContext


Calendar プロパティ

プロジェクトで使用しているカレンダーの種類を表す値を設定します。値の取得も可能です。

Calendar プロパティには、次の設定値のうちの 1 つを指定できます。

設定値	値	説明
vbCalGreg	0	グレゴリオ暦 (既定値) を使用します。
vbCalHijri	1	回教暦を使用します。
解説

Calendar プロパティは、プログラムからのみ設定することができます。たとえば、回教暦を使う場合は、次のようになります。

Calendar = vbCalHijri


Count プロパティ

コレクション内のオブジェクトの数を含む長整数型 (Long) の値を返します。値の取得のみ可能です。


Description プロパティ

オブジェクトに関連付けられている説明の文字列を含む文字列式を設定します。値の取得も可能です。

Err オブジェクトでは、エラーに関連する説明の文字列を設定します。値の取得も可能です。

解説

Description プロパティには、エラーに関する簡単な説明を定義します。このプロパティを使用して、処理できないエラーまたは処理しないエラーをユーザーに警告してください。ユーザー定義エラーを生成するときには、エラーに関する簡単な説明を Description プロパティに割り当てます。Description プロパティを設定しない場合で、Number プロパティの値が Visual Basic の実行時エラーに対応しているときは、エラーが発生すると、Error 関数の戻り値 (エラー メッセージ) が Description プロパティに設定されます。


HelpContext プロパティ

ヘルプ ファイルのトピックに対応するコンテキスト番号を含む文字列式を設定します。値の取得も可能です。

解説

HelpContext プロパティを指定すると、HelpFile プロパティで指定したヘルプ トピックが自動的に表示されます。HelpFile プロパティと HelpContext プロパティが空の場合は、Number プロパティの値がチェックされます。その値が Visual Basic の実行時エラーの値に対応している場合は、そのエラーを表す Visual Basic ヘルプのコンテキスト番号が使われます。Number プロパティの値が Visual Basic エラーに対応していない場合は、Visual Basic ヘルプ ファイルの目次画面が表示されます。

メモ   一般的なエラーについては、できる限りエラー処理ルーチンを記述して処理してください。オブジェクトを使ってプログラムを作成する場合は、そのオブジェクトのヘルプ ファイルを使ってエラー処理方法を変更したり、エラーが回復不能な場合に適切なメッセージをユーザーに表示することができます。


HelpFile プロパティ

ヘルプ ファイルへの絶対バスを含む文字列式を設定します。値の取得も可能です。

解説

ヘルプ ファイルを HelpFile プロパティで指定すると、エラー メッセージが表示されるダイアログ ボックス内で [ヘルプ] ボタンをクリックするか、または F1 キー (Windows) か Help キー(Macintosh) )を押したときに自動的に呼び出されます。HelpContext プロパティに指定したファイルの有効なコンテキスト番号が入っていると、そのトピックが自動的に表示されます。HelpFile プロパティを指定しない場合は、Visual Basic のヘルプ ファイルが表示されます。

メモ   一般的なエラーについては、できる限りエラー処理ルーチンを記述して処理してください。オブジェクトを使ってプログラムを作成する場合は、そのオブジェクトのヘルプ ファイルを使ってエラー処理方法を変更したり、エラーが回復不能な場合に適切なメッセージをユーザーに表示することができます。


LastDLLError プロパティ

最後にダイナミック リンク ライブラリ (DLL) を呼び出したときのエラー コードを返します。値の取得のみ可能です。Macintosh では、LastDLLError は常に 0 の値を返します。

解説

LastDLLError プロパティは、Visual Basic のコードから DLL 呼び出しを行った場合のみ参照できます。通常、DLL 呼び出しが行われると、呼び出された関数は、関数の実行が正常に終了したかどうかを戻り値として返し、LastDLLError プロパティも設定されます。どのような値を返すかは、それぞれの DLL についてのドキュメントを参照してください。失敗を示す値が返された場合、LastDLLError プロパティを確認する必要があります。LastDLLError プロパティが設定された場合、例外は発生しません。


Number プロパティ

エラーを指定する数値を設定します。値の取得も可能です。Number プロパティは、Err オブジェクトの既定プロパティです。値の取得のみ可能です。

解説

オブジェクトからユーザー定義エラーを取得する場合は、エラーとして選択した数値を定数 vbObjectError に追加して Err オブジェクトの Number プロパティに設定します。たとえば、次のコードを使って、番号 1051 をエラー コードとして取得します。

Err.Raise Number := vbObjectError + 1051, Source:= "SomeClass"


Source プロパティ

エラーの発生元のオブジェクトまたはアプリケーションの名前を示す文字列式を設定します。値の取得も可能です。

解説

Source プロパティは、エラーを発生させたオブジェクトを表す文字列式を指定します。一般に、この式はそのオブジェクトのクラス名またはプログラム ID です。アクセスされたオブジェクトで発生したエラーを処理できないときには、Source プロパティを使って情報を提供してください。たとえば、Microsoft Excel にアクセスしたときに "0 で除算しました。" エラーが発生すると、エラーを発生させたオブジェクト Excel によって Err オブジェクトの Number プロパティにそのエラーを表すエラー番号が設定され、Source プロパティに Excel.Application が設定されます。

コードを使用してエラーを生成する場合、Source プロパティにはアプリケーションのプログラム ID が設定されます。クラス モジュールの場合は、Source プロパティに project.class の形式でクラスの名前を格納する必要があります。作成したコードで予期しないエラーが発生すると、自動的に Source プロパティが設定されます。標準モジュール内のエラーの場合、Source プロパティにはプロジェクトの名前が格納されます。クラス モジュール内のエラーの場合、Source プロパティには project.class  の形式でクラスの名前が格納されます。


DeleteSetting ステートメントの使用例

次の例は、SaveSetting ステートメントを使用して、Windows のレジストリ (16 ビット版 Windows の場合は、.INI ファイル) に MyApp アプリケーションのエントリを作成します。次に、DeleteSetting ステートメントを使用して、作成したエントリを削除します。名前付き引数 key を指定していないため、セクション名とセクションのすべてのキーを含むセクション全体が削除されます。

' レジストリに設定を書き込みます。

SaveSetting appname := "MyApp", section := "Startup", _

            key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' セクションと、セクションのすべての設定をレジストリから削除します。

DeleteSetting "MyApp", "Startup"


GetAllSettings 関数の使用例

次の例は、SaveSetting ステートメントを使用して、名前付き引数 appname に指定したアプリケーションのエントリを Windows のレジストリ (16 ビット版 Windows の場合は、.INI ファイル) に作成します。次に、GetAllSettings 関数を使用して、設定を表示します。GetAllSettings 関数では、アプリケーション名およびセクション名は取得できません。最後に、DeleteSetting ステートメントでアプリケーションのセクションを削除します。

' GetAllSettings 関数によって返される二次元配列を格納するためのバリアント型変数を宣言します。

' Integer to hold counter.

Dim MySettings As Variant, intSettings As Integer

' レジストリに設定を書き込みます。

SaveSetting appname := "MyApp", section := "Startup", _

key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' 設定を取得します。

MySettings = GetAllSettings(appname := "MyApp", section := "Startup")

For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)

Debug.Print MySettings(intSettings, 0), MySettings(intSettings, 1)

Next intSettings

DeleteSetting "MyApp", "Startup"


GetSetting 関数の使用例

次の例は、SaveSetting ステートメントを使用して、名前付き引数 appname に指定したアプリケーションのエントリを Windows のレジストリ (16 ビット版 Windows の場合は、.INI ファイル) に作成します。次に、GetSetting 関数を使用して、設定の 1 つを表示します。名前付き引数 default を指定すると、必ず値が返されます。GetSetting 関数では、セクション名は取得できません。最後に、DeleteSetting ステートメントを使用して、アプリケーションのすべてのセクションを削除します。

' GetSetting 関数によって返される二次元配列を格納するためにバリアント型変数を宣言します。

Dim MySettings As Variant

' レジストリに設定を書き込みます。

SaveSetting "MyApp","Startup", "Top", 75

SaveSetting "MyApp","Startup", "Left", 50

Debug.Print GetSetting(appname := "MyApp", section := "Startup", _

                       key := "Left", default := "25")

DeleteSetting "MyApp", "Startup"


SaveSetting ステートメントの使用例

次の例は、SaveSetting ステートメントを使用して、Windows のレジストリ (16 ビット版 Windows の場合は、.INI ファイル) に MyApp アプリケーションのエントリを作成します。次に、DeleteSetting ステートメントを使用して、作成したエントリを削除します。

' レジストリに設定を書き込みます。

SaveSetting appname := "MyApp", section := "Startup", _

            key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' セクションと、セクションのすべての設定をレジストリから削除します。

DeleteSetting "MyApp", "Startup"


DeleteSetting ステートメント

Microsoft Windows のレジストリにあるアプリケーションの項目、または Macintosh の場合にはアプリケーションの初期設定ファイルから、セクションまたはキー設定を削除します。

構文

DeleteSetting appname, section[, key]

DeleteSetting ステートメントの構文は、次の名前付き引数から構成されます。

指定項目	内容
appname	必ず指定します。セクションか、キー設定を適用するアプリケーション名またはプロジェクトの名前を含む文字列式を指定します。Macintosh の場合には、システム フォルダ内の初期設定 フォルダに含まれているファイル名を指定します。
section	必ず指定します。キー設定を削除するセクション名を含む文字列式を指定します。名前付き引数 appname および名前付き引数 section だけを指定した場合、指定されたセクションは関連付けられたすべてのキー設定と共に削除されます。
key	省略可能です。削除するキー名を含む文字列式を指定します。
解説

引数をすべて指定した場合、指定したキー設定が削除されます。ただし、指定したセクションまたはキー設定が存在しない場合に DeleteSetting ステートメントを使用すると、実行時エラーが発生します。。


GetAllSettings 関数

Microsoft Windows のレジストリにあるアプリケーションの項目、または Macintosh の場合にはアプリケーションの初期設定ファイルから、SaveSetting ステートメントを使って作成された項目内のすべてのキー設定および各キー設定に対応する値のリストを返します。

構文

GetAllSettings(appname, section)

GetAllSettings 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
appname	必ず指定します。キー設定を取得するアプリケーション名またはプロジェクト名を含む文字列式を指定します。Macintosh の場合には、システム フォルダ内の初期設定 フォルダに含まれているファイル名を指定します。
section	必ず指定します。キー設定を取得するセクション名を含む文字列式を指定します。GetAllSettings 関数では、指定したセクションのすべてのキー設定およびそのキー設定に対応する値を含む文字列の二次元配列を格納したバリアント型 (Variant) の値が返されます。
解説

名前付き引数 appname または名前付き引数 section のいずれかを指定していない場合、GetAllSettings 関数は初期化されていないバリアント型 (Variant) の値を返します。


GetSetting 関数

Microsoft Windows のレジストリにあるアプリケーションの項目、または Macintosh の場合にはアプリケーションの初期設定ファイルから、キー設定値を返します。

構文

GetSetting(appname, section, key[, default])

GetSetting 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
appname	必ず指定します。キー設定を取得するアプリケーション名またはプロジェクト名を含む文字列式を指定します。Macintosh の場合には、システム フォルダ内の初期設定 フォルダに含まれているファイル名を指定します。
section	必ず指定します。対象となるキー設定があるセクション名を含む文字列式を指定します。
key	必ず指定します。取得するキー設定名を含む文字列式を指定します。
default	省略可能です。キー設定に値が設定されていない場合に返す値を含む式を指定します。省略すると、長さ 0 の文字列 ("") とみなされます。
解説

GetSetting 関数の名前付き引数のいずれかを指定していない場合、GetSetting 関数では、名前付き引数 default の値が返されます。


SaveSetting ステートメント

Microsoft Windows のレジストリ、または Macintosh ではアプリケーションの初期設定ファイルに、アプリケーションの項目を保存または作成します。

構文

SaveSetting appname, section, key, setting

SaveSetting ステートメントの構文は、次の名前付き引数から構成されます。

指定項目	内容
appname	必ず指定します。設定を適用するアプリケーション名またはプロジェクト名を含む文字列式を指定します。Macintosh の場合には、システム フォルダ内の初期設定 フォルダに含まれているファイル名を指定します。
section	必ず指定します。キー設定を保存するセクション名を含む文字列式を指定します。
key	必ず指定します。保存するキー名を含む文字列式を指定します。
setting	必ず指定します。名前付き引数 key に設定する値を含む式を指定します。
解説

キー設定が保存できない場合、エラーが発生します。


Chr 関数の使用例

次の例は、Chr 関数を使って、指定した文字コードに対応する文字を返します。

Dim MyChar

MyChar = Chr(65)	' A を返します。

MyChar = Chr(97)	' a を返します。

MyChar = Chr(62)	' > を返します。

MyChar = Chr(37)	' % を返します。


Format 関数の使用例

次の例は、Format 関数を使って、定義済み書式やユーザー定義の書式に従って、各種の値を変換します。日付の区切り記号 (/)、時刻の区切り記号 (:)、AM/PM リテラルの変換後の書式は、実行時のシステムの国別情報の設定によって異なります。開発環境で日付と時刻が表示されるときには、コード記述時の国別情報で指定されている日付と時刻の短い形式が使われます。実行時に日付と時刻が表示されるときは、オペレーティング システムの国別情報で指定されている日付と時刻の短い形式が使われます。したがって、実行時に表示される形式は、コード記述時の国別情報の設定とは異なる場合があります。次の例では、国別情報で [英語/アメリカ] が設定されていることを前提としています。

変数 MyTime と変数 MyDate を開発環境で表示すると、現在のシステムで設定されている日付と時刻の短い形式が使われます。

Dim MyTime, MyDate, MyStr

MyTime = #17:04:23#

MyDate = #January 27, 1993#

' システムで定義されている時刻の長い形式を使って、システムの現在の時刻を返します。

MyStr = Format(Time, "Long Time")

' システムで定義されている日付の長い形式を使って、システムの現在の日付を返します。

MyStr = Format(Date, "Long Date")

MyStr = Format(MyTime, "h:m:s")	' "17:4:23" を返します。

MyStr = Format(MyTime, "hh:mm:ss AMPM")	' "05:04:23 PM" を返します。

MyStr = Format(MyDate, "dddd, mmm d yyyy")	' "Wednesday,Jan 27 1993" を返します。

' 書式を指定しない場合は文字列を返します。

MyStr = Format(23)	' "23" を返します。

' ユーザー定義の書式。

MyStr = Format(5459.4, "##,##0.00")	' "5,459.40" を返します。

MyStr = Format(334.9, "###0.00")	' "334.90" を返します。

MyStr = Format(5, "0.00%")	' "500.00%" を返します。

MyStr = Format("HELLO", "<")	' "hello" を返します。

MyStr = Format("This is it", ">")	' "THIS IS IT" を返します。


Hex 関数の使用例

次の例は、Hex 関数を使って、数値を 16 進数に変換した値を返します。

Dim MyHex

MyHex = Hex(5)	' 5 を返します。

MyHex = Hex(10)	' A を返します。

MyHex = Hex(459)	' 1CB を返します。


InStr 関数の使用例

次の例は、InStr 関数を使って、ある文字列の中から指定した文字列を検索し、最初に見つかった位置を返します。

Dim SearchString, SearchChar, MyPos

SearchString ="XXpXXpXXPXXP"	' 検索対象の文字列を定義します。

SearchChar = "P"	' "P" を検索します。

' 文字単位の比較を位置 4 から開始すると、6 が返されます。

MyPos = Instr(4, SearchString, SearchChar, 1)

' ビット単位の比較を位置 1 から開始すると、9 が返されます。

MyPos = Instr(1, SearchString, SearchChar, 0)

' 既定のビット単位の比較を行います(最後の引数を省略した場合)。

MyPos = Instr(SearchString, SearchChar)	' 9 を返します。

MyPos = Instr(1, SearchString, "W")	' 0 を返します。


LCase 関数の使用例

次の例は、LCase 関数を使って、文字列をすべて小文字に変換して返します。

Dim UpperCase, LowerCase

Uppercase = "Hello World 1234"	' 変換対象の文字列を定義します。

Lowercase = Lcase(UpperCase)	' "hello world 1234" を返します。


Left 関数の使用例

次の例は、Left 関数を使って、文字列の左端から指定したバイト数分の文字を返します。

Dim AnyString, MyStr

AnyString = "Hello World"	' 文字列を定義します。

MyStr = Left(AnyString, 1)	' "H" を返します。

MyStr = Left(AnyString, 7)	' "Hello W" を返します。

MyStr = Left(AnyString, 20)	' "Hello World" を返します。


Len 関数の使用例

次の例は、Len 関数を使って、文字列の文字数、または変数の保存に必要なバイト数を返します。CustomerRecord を定義する Type...End Type ブロックをクラス モジュール内で記述する場合、このブロックの直前にキーワード Private を付ける必要があります。標準モジュールでは、Type ステートメントでパブリックなユーザー定義型を定義できます。

Type CustomerRecord	' ユーザー定義型を定義します。

ID As Integer	' この定義は標準モジュール内に記述します。

Name As String * 10

Address As String * 30

End Type

Dim Customer As CustomerRecord	' 変数を宣言します。

Dim MyInt As Integer, MyCur As Currency

Dim MyString, MyLen

MyString = "Hello World"	' 変数を初期化します。

MyLen = Len(MyInt)	' 2 を返します。

MyLen = Len(Customer)	' 42 を返します。

MyLen = Len(MyString)	' 11 を返します。

MyLen = Len(MyCur)	' 8 を返します。

次の例では、LenB 関数とユーザー定義関数 LenMbcs を使用して、指定した文字列のバイト数を返します。32 ビット Windows 用の VBA を使用する場合と、Macintosh用の VBA を使用する場合とでは、返される結果が異なる点に注意してください。

Function LenMbcs (ByVal str as String)

LenMbcs = LenB(StrConv(str, vbFromUnicode))

End Function

Dim MyString, MyLen

MyString = "ＡＢc"

' "Ａ" と "Ｂ" は全角文字で "c" は半角文字です。

MyLen = Len(MyString)

' 文字数として 3 が返されます。

MyLen = LenB(MyString)

' Windows の場合は 6、Macintosh の場合には 5 がバイト数として返されます。

MyLen = LenMbcs(MyString)

' Windows の場合は 5 が返されます。Macintosh の場合は

' Unicode がサポートされていないため、エラーが返されます。


LSet ステートメントの使用例

次の例は、LSet ステートメントを使って、文字列変数内の文字列を左揃えにします。LSet ステートメントでは、ユーザー定義型の変数を互換性のある他のユーザー定義型の変数にコピーすることもできますが、このような使用は避けてください。データ構造体の実装がプラットフォームごとに異なるため、このように LSet ステートメントを使った場合、移植したデータは保証できません。

Dim MyString

MyString = "0123456789"	' 文字列を初期化します。

Lset MyString = "<-Left"	' MyString に "<-Left    " が格納されます。


LTrim、RTrim、および Trim 関数の使用例

次の例は、LTrim 関数を使って、文字列変数の先頭のスペースを削除し、RTrim 関数を使って、文字列変数の末尾のスペース削除します。また、Trim 関数を単独で使って、文字列変数の先頭と末尾のスペースを同時に削除します。

Dim MyString, TrimString

MyString = "  <-Trim->  "	' 文字列を初期化します。

TrimString = LTrim(MyString)	' TrimString は、"<-Trim->  " です。

TrimString = RTrim(MyString)	' TrimString は、"  <-Trim->" です。

TrimString = LTrim(RTrim(MyString))	' TrimString は、"<-Trim->" です。

' Trim 関数を単独で使っても、同様の結果になります。

TrimString = Trim(MyString)	' TrimString は、"<-Trim->" です。


Mid 関数の使用例

次の例は、Mid 関数を使って、文字列の中から指定した文字数分の文字を返します。

Dim MyString, FirstWord, LastWord, MidWords

MyString = "Mid Function Demo"	' 文字列を定義します。

FirstWord = Mid(MyString, 1, 3)	' "Mid" を返します。

LastWord = Mid(MyString, 14, 4)	' "Demo" を返します。

MidWords = Mid(MyString, 5)	' "Function Demo" を返します。


Mid ステートメントの使用例

次の例は、Mid ステートメントを使って、文字列変数の中にある指定した文字数分の文字を他の文字列に置き換えます。

Dim MyString, FirstWord, LastWord, MidWords

MyString = "Mid Function Demo"	' 文字列を定義します。

FirstWord = Mid(MyString, 1, 3)	' "Mid" を返します。

LastWord = Mid(MyString, 14, 4)	' "Demo" を返します。

MidWords = Mid(MyString, 5)	' "Function Demo" を返します。

次の例では、MidB 関数とユーザー定義関数 MidMbcs を使用して、文字列内の指定した文字を返します。32 ビット Windows 用の VBA を使用する場合と、Macintosh 用の VBA を使用する場合とでは、返される結果が異なる点に注意してください。

Function MidMbcs(ByVal str as String, start, length)

MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode)

End Function

Dim MyString

MyString = "ＡbＣdＥfＧ"

' "Ａ"、"Ｃ"、"Ｅ" および "Ｇ" は全角文字で、"b"、"d"、

' および "f" は半角文字です。

MyNewString = Mid(MyString, 3, 4)

' "ＣdＥf" が返されます。

MyNewString = MidB(MyString, 3, 4)

' Windows の場合は "bＣ" が、Macintosh の場合は "bＣd" が返されます。

MyNewString = MidMbcs(MyString, 3, 4)

' Windows の場合は "bＣd" が返されます。Macintosh の場合は Unicode が

' サポートされていないため、エラーが返されます。


Oct 関数の使用例

次の例は、Oct 関数を使って、数値を 8 進数に変換した値を返します。

Dim MyOct

MyOct = Oct(4) 	' 4 を返します。

MyOct = Oct(8)	' 10 を返します。

MyOct = Oct(459)	' 713 を返します。


Right 関数の使用例

次の例は、Right 関数を使って、文字列の右端から指定した文字数分の文字を返します。

Dim AnyString, MyStr

AnyString = "Hello World"	' 文字列を定義します。

MyStr = Right(AnyString, 1)	' "d" を返します。

MyStr = Right(AnyString, 6)	' " World" を返します。

MyStr = Right(AnyString, 20)	' "Hello World" を返します。


RSet ステートメントの使用例

次の例は、RSet ステートメントを使って、文字列変数内の文字列を右揃えにします。

Dim MyString

MyString = "0123456789"	' 文字列を初期化します。

Rset MyString = "Right->"	' MyString に "   Right->" を格納します。


Space 関数の使用例

次の例は、Space 関数を使って、指定した数のスペースからなる文字列を返します。

Dim MyString

' 10 個のスペースからなる文字列を返します。

MyString = Space(10)

' 2 つの文字列の間にスペースを 10 個挿入します。

MyString = "Hello" & Space(10) & "World"


Str 関数の使用例

次の例は、Str 関数を使って、数値を文字列で表した値で返します。数値を文字列に変換すると、符号を表示するためのスペースが必ず先頭に確保されます。

Dim MyString

MyString = Str(459)	' " 459" を返します。

MyString = Str(-459.65)	' "-459.65" を返します。

MyString = Str(459.001)	' " 459.001" を返します。


StrComp 関数の使用例

次の例は、StrComp 関数を使って、文字列を比較した結果を返します。3 番目の引数に 1 を指定すると、文字単位で比較します。3 番目の引数に 0 を指定するか省略すると、ビット単位で比較します。

Dim MyStr1, MyStr2, MyComp

MyStr1 = "ABCD": MyStr2 = "abcd"	' 変数を定義します。

MyComp = StrComp(MyStr1, MyStr2, 1)	' 0 を返します。

MyComp = StrComp(MyStr1, MyStr2, 0)	' -1 を返します。

MyComp = StrComp(MyStr2, MyStr1)	' 1 を返します。


String 関数の使用例

次の例は、String 関数を使って、指定した文字を指定した数だけ並べた文字列を返します。

Dim MyString

MyString = String(5, "*")	' "*****" を返します。

MyString = String(5, 42)	' "*****" を返します。

MyString = String(10, "ABC")	' "AAAAAAAAAA" を返します。


UCase 関数の使用例

次の例は、UCase 関数を使って、文字列をすべて大文字に変換して返します。

Dim LowerCase, UpperCase

LowerCase = "Hello World 1234"	' 変換対象の文字列を定義します。

UpperCase = UCase(LowerCase)	' "HELLO WORLD 1234" を返します。


StrConv Function Example

次の例は、StrConv 関数を使って、Unicode 文字列をANSI 文字列に変換します。

Dim i As Long

Dim x() As Byte

x = StrConv("ABCDEFG", vbFromUnicode)	' 文字列を変換します。

For i = 0 To UBound(x)

Debug.Print x(i)

Next


Chr 関数

指定した文字コードに対応する文字を示す文字列型 (String) の値を返します。

構文

Chr(charcode)

引数 charcode には文字を特定するための長整数型 (Long) の値を指定します。この引数は必ず指定します。

解説

ASCII コード 0 ～ 31 の範囲の文字は表示できません。この中には次に示す制御文字が含まれています。これらを利用すると MsgBox 関数や InputBox 関数などを使ってメッセージを表示するときに、文字列の中にタブや改行を含めることができます。

Chr(9)	タブ

Chr(10)	ライン フィード文字

Chr(13)	キャリッジ リターン

通常、引数 charcode には 0 ～ 255 の範囲の値を指定します。ただし、DBCS を使用しているシステムでは、引数 charcode は -32768 ～ 65535 の範囲の値をとります。

メモ   文字列型 (String) のデータをバイト データとして扱う場合は、ChrB 関数を使用します。ChrB 関数は文字ではなく、1 バイトを返します。ChrW 関数は、Unicode 文字セットの文字を含む文字列型 (String) で文字を返します。Unicode をサポートしていないプラットフォームでは、Chr 関数と同じ文字コードを返します。

メモ   Visual Basic for the Macintosh では、Unicode 文字列をサポートしていません。したがって、AscW(n) 関数は、Windows 環境では 128 ～ 65535 の範囲のすべての Unicode 文字を返すことができますが、Macintosh 環境では正確な Unicode 文字を返すことができません。このため、 Macintosh 環境では AscW 関数を使用しないようにしてください。


Format 関数

式を指定した書式に変換し、その文字列を示すバリアント型 (内部処理形式 String の Variant) の値を返します。

構文

Format(expression[, format[, firstdayofweek[, firstweekofyear]]])

Format 関数の構文は、次の指定項目から構成されます。

指定項目	内容
expression	必ず指定します。任意の式を指定します。引数 expression に指定したデータは、引数 format の書式に従って変換されます。
format	省略可能です。定義済み書式または表示書式指定文字を指定します。
firstdayofweek	省略可能です。週の 1 日目を指定する定数を指定します。
firstweekofyear	省略可能です。年の第 1 週を指定する定数を指定します。
設定値

引数 firstdayofweek には、次の定数を指定します。

定数	値	内容
vbUseSystem	0	NLS API の設定値を使用します。
vbSunday	1	(既定値) 日曜
vbMonday	2	月曜
vbTuesday	3	火曜
vbWednesday	4	水曜
vbThursday	5	木曜
vbFriday	6	金曜
vbSaturday	7	土曜
引数 firstweekofyear には、次の定数を指定します。

定数	値	内容
vbUseSystem	0	NLS API の設定値を使用します。
vbFirstJan1	1	(既定値) 1 月 1 日を含む週から始まります。
vbFirstFourDays	2	年の 4 日以上が含まれる最初の週から始まります。
vbFirstFullWeek	3	年のうち、7 日が含まれる最初の週から始まります。
解説

対象形式	書式の設定方法
数値	定義済み数値書式、または数値表示書式指定文字を使用します。
日付と時刻	定義済み日付/時刻書式、または日付/時刻表示書式指定文字を使用します。
日付と時刻のシリアル値	日付や時刻の形式または数値形式を使用します。
文字列	文字列表示書式指定文字を使用します。
引数 format を省略して数値に書式を設定しようとすると、Format 関数は Str 関数を呼び出した場合と同様の結果を返します。Format 関数の返す値は国別情報に対応しています。ただし、Str 関数を使用して正の数値を文字列に変換した場合、符号用のスペースが先頭に付加されますが、Format 関数を使用した場合、このスペースは付加されません。

ローカライズされていない数値文字列を書式設定する場合、目的の書式設定を確実に行うことができるように数値表示書式指定文字を使用するようにしてください。

メモ   Calendar プロパティの設定がグレゴリオ暦の場合で、引数 format で日付書式を使用するように指定した場合、引数 expression にはグレゴリオ暦で表される日付を指定する必要があります。Calendar プロパティの設定が回教暦の場合で、引数 format で日付書式を使用するように指定した場合、引数 expression には回教暦で表される日付を指定する必要があります。

Calendar プロパティの設定がグレゴリオ暦の場合、引数 format で指定する表示書式指定文字は、通常の場合と同じ意味になります。Calendar プロパティの設定が回教暦の場合、引数 format で指定する表示書式指定文字 (たとえば、dddd、mmmm、yyyy) は、グレゴリオ暦の場合と同じ意味になりますが、設定される対象は回教暦のカレンダーになります。また、表示書式指定文字自体は英語のままとなりますが、表示結果は表示書式指定文字に応じて適切なアラビア語が使用されます。さらに、表示書式指定文字で表される値の範囲が、次の表に示すようにグレゴリオ暦の場合と比べて変わる場合があります。

表示書式指定文字	値の範囲
d	1 ～ 30
dd	1 ～ 30
ww	1 ～ 51
mmm	完全な月の名前を表示します。回教暦の月の名前には、省略形式がありません。
y	1 ～ 355
y	100 ～ 9666


定義済み数値書式 (Format 関数)

次の表は、定義済み数値書式の書式名とその内容を示します。

書式名	内容
General Number	指定した数値を 1000 単位の区切り記号は付けずに返します。
Currency	通貨記号、小数点以下の桁数、1000 単位の区切り記号など、オペレーティング システムの国別情報の設定による形式で表した文字列を返します。
Fixed	整数部を最低 1 桁、小数部を最低 2 桁表示する形式で返します。1000 単位の区切り記号は付きません。
Standard	整数部を最低 1 桁、小数部を最低 2 桁表示する形式で返します。1000 単位の区切り記号が付きます。
Percent	指定した数値を 100 倍して、小数部を常に 2 桁表示する形式で返します。パーセント記号 (%) が右側に付きます。
Scientific	標準的な科学表記法で表した文字列を返します。
Yes/No	数値が 0 の場合には No、それ以外の場合には Yes を返します。
True/False	数値が 0 の場合には偽 (False)、それ以外の場合には真 (True) を返します。
On/Off	数値が 0 の場合には Off、それ以外の場合には On を返します。


数値表示書式指定文字 (Format 関数)

次の表は、数値表示書式指定文字とその内容を示します。これらの文字を組み合わせて、ユーザー定義の書式を指定することができます。

文字	内容
なし	指定した数値をそのまま返します。
(0)	桁位置や桁数を指定するときに使います。引数 format に指定した書式文字列内の表示書式指定文字 "0" 1 つで、数値の 1 桁を表します。変換対象の数値 (式) が、"0" で指定された桁位置を使っている場合は、その桁に該当する値が入ります。変換対象の数値の桁数が少なく、指定された桁位置に該当する値がない場合は、その桁には 0 が入ります。 引数 expression に指定した数値の整数部または小数部の桁数が、指定書式内の "0" の桁位置に満たない場合は、その桁位置には 0 が付加されます。また、数値の小数部の桁数が小数部に指定した "0" の桁位置を超える場合には、数値の小数部は指定の桁位置に合わせて四捨五入されます。逆に、整数部の桁数が整数部に指定した "0" の桁位置を超える場合には、整数部は変更されることなく、すべて表示されます。
(#)	桁位置や桁数を指定するときに使います。引数 format に指定した書式文字列内の表示書式指定文字 "#" 1 つで、数値の 1 桁を表します。変換対象の数値 (expression) が "#" で指定された桁位置を使っている場合は、その桁に該当する値が入ります。変換対象の数値の桁数が少なく、指定された桁位置に該当する値がない場合は、その桁には何も入りません。 この記号は表示書式指定文字の "0" と同じような働きをしますが、数値の小数部や整数部の桁数が "#" で指定された桁位置に満たない場合に 0 は挿入されず、その桁には何も入りません。
(.)	表示書式指定文字 ("0" または "#") と組み合わせて、小数点の位置を指定するときに使います。表示する桁数を指定するとき、この表示書式指定文字の位置によって、整数部と小数部が区別されます。指定書式内で "." の左側に "#" だけが指定されている場合は、1 未満の数値は小数点記号から始まります。数値が 1 未満の場合に小数点記号の左側に常に 0 が付くようにするには、指定書式内で " " の左側に "#" ではなく "0" を指定します。変換後の小数点記号は、オペレーティング システムの国別情報の設定によって決まります。
(%)	数値を 100 倍し、パーセント記号 (%) を付けるときに指定します。
(,)	1000 単位の区切り記号を挿入するときに指定します。整数部が 4 桁以上ある数値については、1000 単位の区切り記号が付きます。変換後の 1000 単位の区切り記号は、オペレーティング システムの国別情報の設定によって決まります。通常、この表示書式指定文字 "," の前後に "0" または "#" を指定して使います。この表示書式指定文字 "," の右側に "0" も "#" も指定しない場合、つまり、整数部の右端にこの表示書式指定文字 "," を 1 つ、または 2 つ以上続けて指定した場合 (小数部の表示指定の有無は任意)、変換対象の数値は 1000 単位で割った値に変換されます。このとき、値は桁位置の指定に応じて丸められます。たとえば、書式指定文字列として "##0,," と指定すると、数値 100000000 (1 億) は、100 に変換されます。100 万未満の数値は 0 となります。整数部の右端以外でこの表示書式指定文字 "," を 2 つ以上続けて指定した場合は、"," を 1 つ指定したときと同じになります。
(:)	時刻の区切り記号を挿入するときに指定します。時刻を時間、分、秒で区切ることができます。変換後の時刻の区切り記号は、オペレーティング システムの国別情報の設定によって決まります。
(/)	日付の区切り記号を挿入するときに指定します。日付を年、月、日で区切ることができます。変換後の区切り記号は、オペレーティング システムの国別情報の設定によって決まります。
(E- E+ e- e+)	指数表記で表すときに指定します。"E-"、"E+"、"e-"、"e+" のいずれかの右側に "0" または "#" を 1 つ以上指定すると、数値は指数表記で表され、整数部と指数部の間に e または E が挿入されます。これらの表示書式指定文字の右側に指定する "0" または "#" の数は、指数部の桁数を示します。"E-" や "e-" を使うと、指数が負の場合にはマイナス記号が付きます。"E+" や "e+" の場合は、指数の正負に合わせてプラス記号かマイナス記号が付きます。
- + $ ( ) スペース	指定する文字をそのまま挿入します。これら以外の表示書式指定文字を挿入するには、その前に円記号 (\) を付けるか、ダブル クォーテーション (" ") で囲みます。
(\)	すぐ後に続く 1 文字をそのまま表示します。書式指定の中で、特別な意味を持っている "#" または "E" などの文字を文字としてそのまま表示するには、その文字の前に円記号 (\) を付けます。この場合、前に付けた円記号 (\) は表示されません。文字をダブル クォーテーション (" ") で囲んでも、同じです。円記号 (\) を挿入するには、円記号 (\) を 2 つ続けて記述します (\\)。 そのままでは挿入できない文字としては、日付や時刻の表示書式指定文字 (a、c、d、h、m、n、p、q、s、t、w、y、/、:)、数値の表示書式指定文字 (#、0、%、E、e、カンマ、ピリオド)、文字列の表示書式指定文字 (@、&、<、>、!) などがあります。
("ABC")	ダブル クォーテーション (" ") で囲まれた文字列は、そのまま挿入されます。書式指定の引数 format に文字列を含めるには、Chr(34) を使って文字列を囲みます。文字コードではダブル クォーテーション (" ") は 34 になります。


数値を表すその他の書式 (Format 関数)

表示書式指定文字を使って数値を文字列に変換する場合は、引数 format には、セミコロン (;) で区切ることにより最大 4 種類の書式を指定できます。ただし、引数 format に定義済み書式が含まれる場合、指定できる書式は 1 つだけです。

書式の数	結果
1	数値の範囲に関係なく、常にその書式を使って変換されます。
2	数値が正または 0 の場合には 1 番目の書式、負の場合には 2 番目の書式を使って変換されます。
3	数値が正の場合には 1 番目の書式、負の場合には 2 番目の書式、0 の場合には 3 番目の書式を使って変換されます。
4	数値が正の場合には 1 番目の書式、負の場合には 2 番目の書式、0 の場合には 3 番目の書式、Null 値の場合には 4 番目の書式を使って変換されます。
書式を 2 つ指定した場合の例を次に示します。1 番目の書式は数値が正の値および 0 のときに使われ、2 番目の書式は数値が負の値のときに使われます。

"$#,##0;($#,##0)"

複数のセミコロン (;) の間に何も記述しない場合、その空の書式に対応する数値は、正の数値用の書式を使って変換されます。たとえば、次の書式指定文字列を使うと、正と負の数値に対して 1 番目の書式が使われ、0 に対しては "Zero" が返されます。

"$#,##0;;\Z\e\r\o"


数値表示書式指定文字の使用例

次の表は、数値の表示書式を指定した場合の例を示します。国別情報が日本語/日本に設定されているものと仮定します。1 番左の列は書式を示します。その右の各列は、それぞれ値の指定例に対する出力結果を示します。

指定した書式 (format)	正の数 5	負の数 5	小数 .5	Null 値
長さ 0 の文字列 ("")	5	-5	0.5
0	5	-5	1
0.00	5.00	-5.00	0.50
#,##0	5	-5	1
#,##0.00;;;Nil	5.00	-5.00	0.50	Nil
\\#,##0;\\-#,##0	\5	(\5)	\1
\\#,##0.00;\\-#,##0.00	\5.00	(\5.00)	\0.50
0%	500%	-500%	50%
0.00%	500.00%	-500.00%	50.00%
0.00E+00	5.00E+00	-5.00E+00	5.00E-01
0.00E-00	5.00E00	-5.00E00	5.00E-01


定義済み日付/時刻書式 (Format 関数)

次の表は、定義済み日付/時刻書式の名前とその内容を示します。

書式名	内容
General Date	日付または時刻、あるいはその両方を返します。整数部と小数部の両方を含む数値を指定すると、日付と時刻の両方を表す文字列 (たとえば 96/4/3 5:34) に変換します。小数部がない場合には日付のみ (たとえば 96/4/3)、整数部がない場合には時刻のみ (たとえば 5:34) を表す文字列に変換します。日付と時刻の表示形式はコントロール パネルの設定により決まります。
Long Date	日付の長い形式 (コントロール パネルの設定) で表した日付を返します。
Medium Date	簡略形式で表した日付を返します。ホスト アプリケーションで使用されます。
Short Date	日付の短い形式 (コントロール パネルの設定) で表した日付を返します。
Long Time	時刻、分、秒を含む形式で表した時刻を返します。
Medium Time	時間と分を 12 時間制で表した時刻を返します。同時に午前 (AM)、午後 (PM) も追加します。
Short Time	時間と分を 24 時間制で表した時刻 (たとえば 17:45) を返します。


日付/時刻表示書式指定文字 (Format 関数)

次の表は、日付/時刻表示書式指定文字とその内容を示します。

文字	内容
(:)	時刻の区切り記号です。オペレーティング システムの国別情報の設定によっては、時刻の区切り記号として他の記号が使用されることがあります。時刻を時間、分、および秒で区切ることができます。変換後の時刻の区切り記号は、コントロール パネルの設定によって決まります。
(/)	日付の区切り記号です。オペレーティング システムの国別情報の設定によっては、他の記号が使用されることがあります。日付を年、月、および日で区切ることができます。変換後の区切り記号は、コントロール パネルの設定によって決まります。
c	ddddd および t t t t t の書式で表した日付と時刻を、日付、時刻の順序で返します。指定された値に小数部がない場合は日付のみ、整数部がない場合は時刻のみを表す文字列を返します。
d	日付を返します。1 桁の場合、先頭に 0 が付きません (1 ～ 31)。
dd	日付を返します。1 桁の場合、先頭に 0 が付きます (01 ～ 31)。
ddd	曜日を英語 (省略形) で返します (Sun ～ Sat)。
aaa	曜日を日本語 (省略形) で返します (日～土)。
dddd	曜日を英語で返します (Sunday ～ Saturday)。
aaaa	曜日を日本語で返します (日曜日～土曜日)。
ddddd	年、月、日を含む短い形式 (コントロール パネルで設定) で表した日付を返します。既定の短い日付形式は、m/d/yy です。
dddddd	年、月、日を含む長い形式 (コントロール パネルで設定) で表した日付を返します。既定の長い日付形式は mmmm dd, yyyy です。
w	曜日を表す数値を返します (日曜日が 1、土曜日が 7 となります)。
ww	その日が一年のうちで何週目に当たるかを表す数値を返します (1 ～ 54)。
m	月を表す数値を返します。1 桁の場合、先頭に 0 が付きません (1 ～ 12)。ただし、h や hh の直後に m を指定した場合、月ではなく分と解釈されます。
mm	月を表す数値を返します。1 桁の場合、先頭に 0 が付きます (01 ～ 12)。ただし、h や hh の直後に mm を指定した場合、月ではなく分と解釈されます。
mmm	月の名前を英語 (省略形) の文字列に変換して返します (Jan ～ Dec)。
mmmm	月の名前を英語で返します (January ～ December)。
oooo	月の名前を日本語で返します (1 月 ～ 12 月)。
q	1 年のうちで何番目の四半期に当たるかを表す数値を返します (1 ～ 4)。
g	年号の頭文字を返します (M、T、S、H)。
gg	年号の先頭の 1 文字を漢字で返します (明、大、昭、平)。
ggg	年号を返します (明治、大正、昭和、平成)。
e	年号に基づく和暦の年を返します。1 桁の場合、先頭に 0 が付きません。
ee	年号に基づく和暦の年を 2 桁の数値を使って返します。1 桁の場合、先頭に 0 が付きます。
y	1 年のうちで何日目に当たるかを数値で返します (1 ～ 366)。
yy	西暦の年を下 2 桁の数値で返します (00 ～ 99)。
yyyy	西暦の年を 4 桁の数値で返します (100 ～ 9999)。
h	時間を返します。1 桁の場合、先頭に 0 が付きません (0 ～ 23)。
hh	時間を返します。1 桁の場合、先頭に 0 が付きます (00 ～ 23)。
n	分を返します。1 桁の場合、先頭に 0 が付きません (0 ～ 59)。
nn	分を返します。1 桁の場合、先頭に 0 が付きます (00 ～ 59)。
s	秒を返します。1 桁の場合、先頭に 0 が付きません (0 ～ 59)。
ss	秒を返します。1 桁の場合、先頭に 0 が付きます (00 ～ 59)。
t t t t t	コントロール パネルで設定されている形式で時刻を返します。先頭に 0 を付けるオプションが選択されていて、時刻が午前または午後 10 時以前の場合、先頭に 0 が付きます。既定の形式は、h:mm:ss です。
AM/PM	時刻が正午以前の場合は大文字で AM を返し、正午～午後 11 時 59 分の間は大文字で PM を返します。
am/pm	時刻が正午以前の場合は小文字で am を返し、正午～午後 11 時 59 分の間は小文字で pm を返します。
A/P	時刻が正午以前の場合は大文字で A を返し、正午～午後 11 時 59 分の間は大文字で P を返します。
a/p	時刻が正午以前の場合は小文字で a を返し、正午～午後 11 時 59 分の間は小文字で p を返します。
AMPM	"12 時間制" が選択されていて、時刻が正午以前の場合は午前を表すリテラル文字列を、正午～午後 11 時 59 分の間は午後を表すリテラル文字列を返します。これらの文字列の設定および "12 時間制" の選択は、コントロール パネルで行います。AMPM は大文字、小文字のどちらでも指定できます。既定の形式は、AM/PM です。


日付/時刻表示書式指定文字の使用例

次の表は、日付と時刻の表示書式の指定例を示します。ただし、国別情報が日本語/日本に設定されているものと仮定します。また、日付は 1958 年 12 月 7 日、時刻は午後 8 時 50 分 35 秒であるものと仮定します。最後の例は、日付と時刻の両方を対象としています。

指定した書式	変換結果
yy/mm/dd	58/12/07
mm-d	12-7
d-mmmm-yy	7-December-58
d mmmm	7 December
mmmm yy	December 58
ddddd(aaa)	58/12/07(日)
dddddd	1958 年 12 月 7 日 日曜日
ggge年m月d日(aaaa)	昭和33年12月7日(日曜日)
hh:mm AM/PM	08:50 PM
h:mm:ss a/p	8:50:35 p
h:mm	20:50
h:mm:ss	20:50:35
m/d/yy h:mm	12/7/58 20:50


文字列表示書式指定文字 (Format 関数)

次の表は、文字列表示書式指定文字と、その内容を示します。

文字	内容
@	1 つの文字またはスペースを表します。変換対象 expression の中で @ (アット マーク) に対応する位置に文字が存在する場合は、その文字が表示されます。文字がなければスペースが表示されます。@ は、引数 format に指定した書式の中に表示書式指定文字の ! (感嘆符) がない限り、右から左の順に埋められます。
&	1 つの文字を表します。変換対象 expression の中で & (アンパサンド) に対応する位置に文字が存在する場合は、その文字が表示されます。文字がなければ何も表示せず、詰められて表示されます。& は、引数 format に指定した書式の中に表示書式指定文字の ! (感嘆符) がない限り、右から左の順に埋められます。
<	小文字にします。すべての文字は小文字に変換されます。
>	大文字にします。すべての文字は大文字に変換されます。
!	文字を右から左ではなく、左から右の順に埋めていくように指定します。この文字を指定しない場合は、右から左の順に埋められます。


文字列を表すその他の書式 (Format 関数)

文字列の書式指定では、セミコロン (;) で区切ることにより 2 種類の書式を引数 format に指定できます。

書式の数	結果
1	対象文字列の内容に関係なく、常にその書式が適用されます。
2	通常は 1 番目の書式が対象文字列に適用されますが、対象が Null 値、または長さ 0 の文字列 ("") の場合は 2 番目の書式が適用されます。


Hex 関数

指定した値を 16 進数で表した文字列型 (String) を返します。

構文

Hex(number)

引数 number には、任意の数式または文字列式を指定します。この引数は必ず指定します。

解説

引数 number が整数でない場合、変換の前に一番近い整数に丸められます。

number の値	戻り値
Null 値	Null 値
Empty 値	0
その他の数値	16 進数を表す最大 8 桁の文字列
適切な範囲の数値の前に &H を付けて記述すると、値を直接 16 進数で記述することができます。たとえば、10 進数の 16 を &H10 のように 16 進数で表記することができます。


InStr 関数

バリアント型 (内部処理形式 Long の Variant) の値を返します。ある文字列 (string1) の中から指定した文字列 (string2) を検索し、最初に見つかった文字位置 (先頭からその位置までの文字数) を返す文字列処理関数です。

構文

InStr([start, ]string1, string2[, compare])

Instr 関数の構文は、次の引数から構成されます。

指定項目	内容
start	省略可能です。検索の開始位置を表す数式を指定します。省略すると、先頭の文字から検索されます。引数 start に Null 値が含まれている場合、エラーが発生します。引数 compare を指定した場合は、start も指定する必要があります。
string1	必ず指定します。検索対象となる文字列式を指定します。
string2	必ず指定します。引数 string1 内で検索する文字列式を指定します。
compare	省略可能です。文字列比較の比較モードを指定する番号を設定します。引数 compare が Null 値の場合は、エラーが発生します。引数 compare を指定した場合は、引数 start も指定する必要があります。引数 compare を省略すると、Option Compare ステートメントの設定に応じて、比較モードが決まります。ローカル固有の比較ルールを使用するには、有効なLCID (LocaleID) を指定します。
設定値

引数 compare の設定値は次のとおりです。

定数	値	説明
vbUseCompareOption	-1	Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare	0	バイナリ モードの比較を行います。
vbTextCompare	1	テキスト モードの比較を行います。
vbDatabaseCompare	2	Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較を行います。
戻り値

内容	値
string1 が長さ 0 の文字列 ("") のとき	0
string1 が Null 値のとき	Null 値
string2 が長さ 0 の文字列 ("") のとき	start
string2 が Null 値のとき	Null 値
string2 が見つからないとき	0
string2 が string1 内で見つかったとき	見つかった文字列の位置
start の値が string1 の文字数を超えるとき	0
解説

文字列をバイト データとして扱う場合は、InStrB 関数を使用します。InStrB 関数は検索結果をバイト位置 (先頭からその位置までのバイト数) で返します。


LCase 関数

アルファベットの大文字を小文字に変換する文字列処理関数です。

構文

LCase(string)

引数 string には、任意の文字列式を指定します。この引数は必ず指定します。string に Null 値が含まれている場合、Null 値を返します。

解説

大文字だけが小文字に変換されます。大文字のアルファベット以外の文字は影響を受けません。


Left 関数

バリアント型 (内部処理形式 String の Variant) の値を返します。文字列の左端から指定した文字数分の文字列を返します。

構文

Left(string, length)

Left 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
string	必ず指定します。この文字列式の左端から文字列が取り出されます。名前付き引数 string に Null 値が含まれている場合は、Null 値を返します。
length	必ず指定します。バリアント型 (内部処理形式 Long の Variant) を指定します。取り出す文字列の文字数を表す数式を指定します。0 を指定した場合は、長さ 0 の文字列 ("") を返します。string 全体の文字数以上の値を指定した場合は、string 全体を返します。
解説

名前付き引数 string の文字数を調べるには、Len 関数を使用します。

メモ   文字列をバイト データとして扱う場合は、LeftB 関数を使用します。LeftB 関数は指定したバイト数分の文字列を取り出します。


Len 関数

指定した文字列の文字数または指定した変数に必要なバイト数を表す長整数型 (Long) の値を返します。

構文

Len(string | varname)

Len 関数の構文は、次の指定項目から構成されます。

指定項目	内容
string	任意の文字列式を指定します。引数 string に Null 値が含まれている場合は、Null 値を返します。
Varname	任意の変数の名前を指定します。引数 varname に Null 値が含まれている場合は、Null 値を返します。引数 varname がバリアント型 (Variant) であれば、Len 関数はその変数を文字列型 (String) として処理し、常にその文字数を返します。
解説

指定可能な 2 つの引数のうち、いずれか 1 つだけを指定します。Len 関数にユーザー定義型の変数を指定すると、ファイルに書き込まれるデータのサイズを返します。

メモ   文字列をバイト データとして扱う場合は、LenB 関数を使用します。LenB 関数は、指定した文字列のバイト数を返します。LenB 関数にユーザー定義型の変数を指定すると、メモリ内でのサイズを返します。この値には要素間の埋め込みも含まれています (ただし、Windows の VBA と Mac のVBA とでは返す値が異なる場合があります)。

LenB 関数のコード例は、Len 関数の使用例を参照してください。

メモ   データ型がユーザー定義型の可変長文字列を Len 関数に指定すると、必要な格納領域の実際のバイト数を判断できないことがあります。


LSet ステートメント

文字列変数の値を左揃えにしたり、ユーザー定義型の変数を別のユーザー定義型の変数にコピーします。

構文

LSet stringvar = string

LSet varname1 = varname2

LSet ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
stringvar	必ず指定します。文字列変数の名前を指定します。
string	必ず指定します。引数 stringvar に左揃えで格納される文字列式を指定します。
varname1	必ず指定します。コピー先のユーザー定義型変数の名前を指定します。
varname2	必ず指定します。コピー元のユーザー定義型変数の名前を指定します。
解説

LSet ステートメントは引数 stringvar の余った部分をスペースで埋めます。

引数 string が引数 stringvar より長い場合、stringvar に左揃えで格納できる長さの文字だけ stringvar にコピーされ、格納できない部分は切り捨てられます。

警告   LSet ステートメントを使って、あるユーザー定義型の変数を別のユーザー定義型の変数にコピーすることは、できる限りしないでください。あるデータ型のデータを別のデータ型で予約されている領域にコピーすると、予期しない結果が生じる可能性があります。

あるユーザー定義型から別のユーザー定義型に変数をコピーすると、その領域の要素に対して指定されているデータ型に関係なく、一方の変数のバイナリ データだけが他方のメモリ領域にコピーされます。


LTrim、RTrim、Trim 関数

指定した文字列から先頭のスペース (LTrim) または 末尾のスペース (RTrim)、あるいは先頭と末尾の両方のスペース (Trim) を削除した文字列を表すバリアント型 (内部処理形式 String の Variant) の値を返します。

構文

LTrim(string)

RTrim(string)

Trim(string)

引数 string には、任意の文字列式を指定します。この引数は必ず指定します。1 バイト (半角)、2 バイト (全角) にかかわらず、文字列の先頭あるいは末尾のスペースを削除します。引数 string に Null 値が含まれている場合は、Null 値を返します。


Mid 関数

バリアント型 (内部処理形式 String の Variant) の値を返します。文字列から指定した文字数分の文字列を返します。

構文

Mid(string, start[, length])

Mid 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
string	必ず指定します。文字列を取り出す、元の文字列式を指定します。名前付き引数 string に Null 値が含まれている場合は、Null 値を返します。
start	必ず指定します。長整数型 (Long) の値を指定します。名前付き引数 string の先頭の位置を 1 として、どの位置から文字列を取り出すかを先頭からの文字数で指定します。start が string の文字数を超える場合、Mid 関数は長さ 0 の文字列 ("") を返します。
length	省略可能です。バリアント型 (内部処理形式 Long) の値を指定します。取り出す文字数を指定します。名前付き引数 length を省略した場合、または文字列内に length より短い文字数しかない場合には、start から後のすべての文字が返されます。
解説

名前付き引数 string の文字数を決定するときに Len 関数を使用します。

メモ   文字列をバイト データとして扱う場合は、MidB 関数を使用します。MidB 関数はバイト単位で文字列を取り出します。MidB 関数には、文字数でなく、バイト数を指定します。MidB のコード例は、Mid 関数の使用例を参照してください (ただし、Windows の VBA と Mac のVBA とでは返す値が異なる場合があります)。


Mid ステートメント

バリアント型 (内部処理形式 String の Variant) 変数の一部を他の文字列に置き換えます。

構文

Mid(stringvar, start[, length]) = string

Mid ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
stringvar	必ず指定します。変更する文字列変数の名前を指定します。
start	必ず指定します。バリアント型 (内部処理形式 Long) の値を指定します。引数 stringvar の中の置き換えを始める位置を文字数単位で指定します。
length	省略可能です。バリアント型 (内部処理形式 Long) の値を指定します。置き換えを行う文字数を指定します。省略すると、文字列すべてが対象となります。
string	必ず指定します。新しく置き換える文字列式を指定します。
解説

置き換える文字列には常に引数 stringvar の文字数よりも小さいか、または等しい文字列を指定します。

メモ   文字列をバイト データとして扱う場合は、MidB 関数を使用します。MidB 関数では、引数 start を使って引数 stringvar 内の置き換えを始める位置をバイト数単位で指定します。また、引数 length を使って置き換えるバイト数を指定します。


Oct 関数

引数に指定した値を 8 進数で表すバリアント型 (内部処理形式 String の Variant) の値を返します。

構文

Oct(number)

引数 number には、任意の数式または文字列式を指定します。この引数は必ず指定します。

解説

引数 number に小数点以下の値を持つ数式を指定すると、変換する前に一番近い整数に丸められます。

number	戻り値
Null 値	Null 値
Empty 値	0
その他の数値	最大 11 桁の 8 進数
適切な範囲の数値の前に &O を付けると、8 進数を表すことができます。たとえば、&O10 は 10 進数では 8 になります。


Right 関数

バリアント型 (内部処理形式 String の Variant) の値を返します。文字列の右端から指定した文字数分の文字列を返します。

構文

Right(string, length)

Right 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
string	必ず指定します。この文字列式の右端から文字列を取り出します。名前付き引数 string に Null 値が含まれている場合は、Null 値を返します。
length	必ず指定します。バリアント型 (内部処理形式 Long) の値を指定します。取り出す文字列の文字数を表す数式を指定します。0 を指定した場合は、長さ 0 の文字列 ("") を返します。名前付き引数 string の文字数以上の場合は、文字列全体が返されます。
解説

string の文字数を決定するときは、Len 関数を使用します。

メモ   文字列をバイト データとして扱う場合、RightB 関数を使用します。RightB 関数は指定したバイト数分の文字列を取り出します。


RSet ステートメント

文字列変数の値を右揃えにします。

構文

RSet stringvar = string

RSet ステートメントの構文は、次の指定項目から構成されます。

指定項目	内容
stringvar	必ず指定します。文字列変数の名前を指定します。
string	必ず指定します。stringvar に右揃えで格納される文字列式を指定します。
解説

引数 stringvar が引数 string よりも短い場合、RSet ステートメントは引数 stringvar の余った部分をスペースで埋め、文字列の先頭にカーソル位置を戻します。

メモ   RSet ステートメントでは、ユーザー定義型の変数を使用することはできません。


Space 関数

バリアント型 (内部処理形式 String の Variant) の値を返します。指定した数のスペースからなる文字列を返す文字列処理関数です。

構文

Space(number)

引数 number には、スペースの数を指定します。この引数は必ず指定します。

解説

Space 関数は書式を整えるためにスペースを出力したり、固定長文字列を消去する場合などに役立ちます。


Str 関数

バリアント型 (内部処理形式 String の Variant) の値を返します。数式の値を文字列で表した値 (数字) で返す文字列処理関数です。

構文

Str(number)

引数 number には有効な数式を長整数型 (Long) で指定します。この引数は必ず指定します。

解説

数値を文字列に変換すると、戻り値の先頭に符号を表示するためのスペースが常に確保されます。数値が正の場合は、Str 関数の戻り値の先頭にスペースが挿入されます。このスペースはプラス記号を意味します。

日付、時刻、通貨、ユーザー定義の書式などで数値を書式設定するときに、Format 関数を使います。Str 関数と異なり、Format 関数を使用して変換した場合は、引数 number の先頭にスペースは挿入されません。

メモ   Str 関数は、ピリオド (.) だけを有効な小数点記号として認識します。異なる小数点記号を使用する場合は、CStr 関数を使って数値を文字列に変換します。


StrComp 関数

文字列比較の結果を表すバリアント型 (内部処理形式 String の Variant) の値を返します。

構文

StrComp(string1, string2[, compare])

StrComp 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
string1	必ず指定します。任意の文字列式を指定します。
string2	必ず指定します。任意の文字列式を指定します。
compare	省略可能です。文字列比較のモードを指定する番号を設定します。名前付き引数 compare が Null 値の場合は、エラーが発生します。compare を省略すると、Option Compare ステートメントの設定により比較モードが決まります。
設定値

引数 compare の設定値は次のとおりです。

定数	値	説明
vbUseCompareOption	-1	Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare	0	バイナリ モードの比較を行います。
vbTextCompare	1	テキスト モードの比較を行います。
vbDatabaseCompare	2	Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較を行います。
戻り値

StrComp 関数の戻り値は次の通りです。

内容	戻り値
string1 は string2 未満	-1
string1 と string2 は等しい	0
string1 は string2 を超える	1
String1 または string2 は Null 値	Null 値


StrConv 関数

変換した文字列をバリアント型 (内部処理形式 String の Variant) で返します。

構文

StrConv(string, conversion, LCID)

StrConv 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
string	必ず指定します。変換する文字列式を指定します。
conversion	必ず指定します。整数型 (Integer) の値を指定します。実行する変換の種類の値の合計を指定します。
LCID	省略可能です。システムとは異なる国別情報識別子 (LCID) を指定できます。既定値はシステムが使用する LCID です。
設定値

名前付き引数 conversion には、次のいずれかの定数または値を指定します。

定数	値	内容
vbUpperCase	1	文字列を大文字に変換します。
vbLowerCase	2	文字列を小文字に変換します。
vbProperCase	3	文字列の各単語の先頭の文字を大文字に変換します。
vbWide*	4*	文字列内の半角文字 (1 バイト) を全角文字 (2 バイト) に変換します。
vbNarrow*	8*	文字列内の全角文字 (2 バイト) を半角文字 (1 バイト) に変換します。
vbKatakana**	16**	文字列内のひらがなをカタカナに変換します。
vbHiragana**	32	文字列内のカタカナをひらがなに変換します。
vbUnicode	64	システムの既定のコード ページを使って文字列を Unicode に変換します。Macintosh. では使用できません)
vbFromUnicode	128	文字列を Unicode からシステムの既定のコード ページに変換します。Macintosh. では使用できません)
*    国別情報の設定が中国、韓国、および日本の場合に適用されます。

**  国別情報の設定が日本の場合のみ有効です。

メモ   これらの定数は Visual Basic で定義されているものです。したがって、コードの中の任意の場所で、実際の値の代わりに使用できます。通常、定数は互いに矛盾しない限り、組み合わせて指定できます。たとえば、定数 vbUpperCase と vbWide を組み合わせることはできます。しかし、定数 vbUnicode と vbFromUnicode は指定内容が矛盾するため、組み合わせることはできません。また、不適切な場所で定数 vbWide、vbNarrow、vbKatakana、および vbHiragana を指定した場合は、実行時エラーが発生します。

大文字/小文字を正しく区別する単語セパレータは、Null 値 (Chr$(0))、水平タブ (Chr$(9))、ライン フィード (Chr$(10))、垂直タブ (Chr$(11))、フォーム フィード (Chr$(12))、キャリッジ リターン (Chr$(13))、およびスペース (SBCS の場合) (Chr$(32)) です。DBCS のスペースの実際の値は、国によって異なります。

解説

ANSI 形式のバイト型配列を文字列に変換する場合は、StrConv 関数を使用してください。Unicode 形式の配列を変換する場合は、代入式を使用してください。


String 関数

バリアント型 (内部処理形式 String の Variant) の値を返します。指定した文字コード (ASCII またはシフト JIS コード) の示す文字、または文字列の先頭文字を、指定した文字数だけ並べた文字列を返す文字列処理関数です。

構文

String(number, character)

String 関数の構文は、次の名前付き引数から構成されます。

指定項目	内容
number	必ず指定します。長整数型 (Long) の値を指定します。文字をいくつ並べるのかを指定します。名前付き引数 number に Null 値が含まれる場合は、Null 値を返します。
character	必ず指定します。バリアント型 (Variant) の値を指定します。文字の文字コード、または文字列式を指定します。この文字列の先頭文字を number 回繰り返したものを返します。名前付き引数 character に Null 値が含まれる場合は、Null 値を返します。
解説

名前付き引数 character に ASCII でもシフト JIS でもない無効な数値を指定すると、0 として処理されます。


UCase 関数

バリアント型 (内部処理形式 String の Variant) の値を返します。指定したアルファベットの小文字を大文字に変換する文字列処理関数です。

構文

UCase(string)

引数 string には、任意の文字列式を指定します。引数 string に Null 値が含まれていると、Null 値を返します。

解説

小文字だけが大文字に変換されます。小文字のアルファベット以外の文字は影響を受けません。


機能別キーワード一覧

機能	内容
エラー	エラー処理とエラー値の取得
コンパイラ ディレクティブ	コンパイラの動作の制御
データ型	データ型およびバリアント型の内部処理形式
フォルダとファイル	ファイル システムの制御およびファイルの処理
演算子	比較演算子およびその他の演算子
財務計算	財務計算の実行
数値演算	三角関数およびその他の数値演算
制御構造	プロシージャの流れの制御
入出力	入力の取得と出力の表示および印刷
配列	配列の作成、定義、および使用
日付と時刻	日付および時間の変換および使用
変換	数値およびデータ型の変換
変数と定数	変数および定数の宣言および定義
文字列操作	文字列および文字列型データの操作
その他	他のアプリケーションの実行およびイベントの処理


配列に関するキーワード一覧

機能	キーワード
配列かどうかの検査	IsArray
配列を作成	Array
既定最少値の変更	Option Base
配列の宣言および初期化	Dim, Private, Public, ReDim, Static
配列サイズの限度の検査	LBound, UBound
配列を再初期化	Erase, ReDim


コレクション オブジェクトに関するキーワード一覧

機能	キーワード
コレクションの作成	Collection
コレクションへのオブジェクトの追加	Add
コレクションからのオブジェクトの解放	Remove
コレクションの項目の参照	Item


コンパイラ ディレクティブに関するキーワード一覧

機能	キーワード
コンパイラ定数の定義	#Const
条件付きコンパイル	#If...Then...#Else


制御構造に関するキーワード一覧

機能	キーワード
分岐	GoSub...Return, GoTo, On Error, On...GoSub, On...GoTo
プログラムの終了または一時停止	DoEvents, End, Exit, Stop
ループ	Do...Loop, For...Next, For Each...Next, While...Wend, With
意志決定	Choose, If...Then...Else, Select Case, Switch
プロシージャの使用	Call, Function, Property Get, Property Let, Property Set, Sub


変換に関するキーワード一覧

機能	キーワード
ANSI コードの値の文字列への変換	Chr
文字列の小文字または大文字への変換	Format, LCase, UCase
日付の連続した番号への変換	DateSerial, DateValue
十進法表記の他の表記法への変換	Hex, Oct
数字の文字列への変換.	Format, Str
データ型の変換	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
日付から日、週、月、年への変換	Day, Month, Weekday, Year
時間から時、分、秒への変換	Hour, Minute, Second
文字列の ASCII コードの値への変換	Asc
文字列の数字への変換	Val
時間の連続した番号への変換	TimeSerial, TimeValue


データ型に関するキーワード一覧

機能	キーワード
データ型の変換	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
組み込みデータ型の設定	Boolean, Byte, Currency, Date, Double, Integer, Long, Object, Single, String, Variant (既定値)
データ型の検査	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject


日付と時刻に関するキーワード一覧

機能	キーワード
現在の日付または時間の取得	Date, Now, Time
日付計算の実行	DateAdd, DateDiff, DatePart
日付の取得	DateSerial, DateValue
時間の取得	TimeSerial, TimeValue
現在の日付または時間の設定	Date, Time
処理時間の計測	Timer


フォルダとファイルに関するキーワード一覧

機能	キーワード
フォルダの変更	ChDir
ドライブの変更	ChDrive
ファイルのコピー	FileCopy
フォルダの作成	MkDir
フォルダの削除	RmDir
ファイルまたはフォルダの名前の変更	Name
現在のパスの取得	CurDir
ファイルの日付または時間のスタンプの取得	FileDateTime
ファイルまたはラベルの属性の取得	GetAttr
ファイルの長さの取得	FileLen
ファイルの名前またはボリューム ラベルの取得	Dir
ファイルの属性情報の設定	SetAttr


エラーに関するキーワード一覧

機能	キーワード
実行時エラーの生成	Clear, Error, Raise
エラー メッセージの取得	Error
エラー情報の設定	Err
バリアント型のエラー値の取得	CVErr
実行時エラーのトラップ	On Error, Resume
エラー値の検査	IsError


財務に関するキーワード一覧

機能	キーワード
減価償却の計算	DDB, SLN, SYD
将来価値の計算	FV
利息率を計算	Rate
内部利益率の計算	IRR, MIRR
投資期間の計算	NPer
支払額の計算	IPmt, Pmt, PPmt
現在価値の計算	NPV, PV


入出力に関するキーワード一覧

機能	キーワード
ファイルの操作または作成	Open
ファイルを閉じる	Close, Reset
出力形式の制御	Format, Print, Print #, Spc, Tab, Width #
ファイルのコピー	FileCopy
ファイルに関する情報の取得	EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek
ファイルの操作	Dir, Kill, Lock, Unlock, Name
ファイルからの読み込み	Get, Input, Input #, Line Input #
ファイルの長さの取得	FileLen
ファイル属性の設定または取得	FileAttr, GetAttr, SetAttr
ファイルの読み込みまたは書き込み位置の設定	Seek
ファイルへの書き込み	Print #, Put, Write #


数値演算に関するキーワード一覧

機能	キーワード
三角関数による値の取得	Atn, Cos, Sin, Tan
一般的な計算	Exp, Log, Sqr
乱数の発生	Randomize, Rnd
絶対値の取得	Abs
式の符号の取得	Sgn
数値変換の実行	Fix, Int


その他のキーワード一覧

機能	キーワード
保留イベントの制御	DoEvents
他のプログラムの実行	AppActivate, Shell
キー コードの転送	SendKeys
ビープ音を鳴らす	Beep
環境変数の取得	Environ
コマンド ライン文字列の提供	Command
オートメーションの制御	CreateObject, GetObject
色	QBColor, RGB


演算子に関するキーワード一覧

機能	キーワード
算術演算子	^, -, *,  /, \, Mod, +, &, =
比較演算子	=, <>, <, >, <=, >=, Like, Is
論理演算子	Not, And, Or, Xor, Eqv, Imp


レジストリに関するキーワード一覧

機能	キーワード
レジストリ設定の削除	DeleteSetting
レジストリ設定の取得	GetSetting, GetAllSettings
レジストリ設定の保存	SaveSetting


文字列操作に関するキーワード一覧

機能	キーワード
文字列の比較	StrComp
文字列の変換	StrConv
小文字または大文字に変換	Format, LCase, UCase
文字の繰り返し	Space, String
文字列の長さの取得	Len
文字列書式の設定	Format
文字列の配置	LSet, RSet
文字列の操作	InStr, Left, LTrim, Mid, Right, RTrim, Trim
文字列の比較条件の設定	Option Compare
文字コードの操作	Asc, Chr


変数と定数に関するキーワード一覧

機能	キーワード
値の代入	Let
変数または定数の宣言	Const, Dim, Private, Public, New, Static
プライベート モジュールの宣言	Option Private Module
バリアント型に関する情報を取得	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType
現在のオブジェクトの参照	Me
変数の明示的な宣言を要求	Option Explicit
既定のデータ型の設定	Deftype


トラップできるエラー

トラップできるエラーは、アプリケーションの実行中に発生します。トラップできるエラーのいくつかは、デザイン時またはコンパイル時にも発生します。On Error ステートメントおよび Err オブジェクトの Number プロパティを使用して、トラップできるエラーのテストおよびエラーへの対応を行うことができます。エラー番号 1 ～ 1000 の範囲で、使用されていない番号は、Visual Basic で予約されています。

番号	メッセージ
3	Return に対応する GoSub がありません。
5	プロシージャの呼び出し、または引数が不正です。
6	オーバーフローしました。
7	メモリが足りません。
9	インデックスが有効範囲にありません。
10	この配列は固定されているか、または一時的にロックされています。
11	0 で除算しました。
13	型が一致しません。
14	文字列領域が不足しています。
16	式が複雑すぎます。
17	要求された操作は実行できません。
18	ユーザーによる割り込みが発生しました。
20	エラーが発生していないときに Resume を実行することはできません。
28	スタック領域が不足しています。
35	Sub、Function、または Propertyが定義されていません。
47	コード リソースまたは DLL のクライアント アプリケーションが多すぎます。
48	コード リソースまたは DLL 読み込み時のエラーです。
49	コード リソースまたは DLL が正しく呼び出せません。
51	内部エラーです。
52	ファイル名または番号が不正です。
53	ファイルが見つかりません。
54	ファイル モードが不正です。
55	ファイルは既に開かれています。
57	デバイス I/O エラーです。
58	既に同名のファイルが存在しています。
59	レコード長が一致しません。
61	ディスクの空き容量が不足しています。
62	ファイルにこれ以上データがありません。
63	レコード番号が不正です。
67	ファイルが多すぎます。
68	デバイスが準備されていません。
70	書き込みできません。
71	ディスクが準備されていません。
74	ディスク名は変更できません。
75	パス名が無効です。
76	パスが見つかりません。
91	オブジェクト変数または With ブロック変数が設定されていません。
92	For ループが初期化されていません。
93	パターン文字列が不正です。
94	Null の使い方が不正です。
97	オブジェクトが定義クラスのインスタンスではない場合、このオブジェクトに関するフレンド関数は呼び出せません。
98	プロパティまたはメソッドの呼び出しの場合には、引数または戻り値としてプライベート オブジェクトへの参照を含めることはできません。
298	システムリソースまたは  DLL をロードできません。
320	キャラクタ デバイスは使えません。
321	不正なファイル形式です。
322	必要なテンポラリ ファイルを作成できません。
325	リソース ファイルの形式が不正です。
327	データ値が見つかりません。
328	不正なパラメータです。配列に書き込めません。
335	システム レジストリにアクセスできません。
336	コンポーネントが正しく登録されていません。
337	コンポーネントが見つかりません。
338	コンポーネントが正常に実行されませんでした。
360	このオブジェクトは既にロードされています。
361	このオブジェクトは、ロードまたはアンロードすることはできません。
363	指定されたコントロールが見つかりません。
364	既にアンロードされています。
365	現在アンロードできません。
368	ファイルは古い形式で作成されています。このプログラムには新しい形式のファイルが必要です。
371	指定されたオブジェクトは、Show メソッドのオーナー フォームとして使用できません。
380	プロパティの値が不正です。
381	プロパティ配列のインデックスが不正です。
382	プロパティは、実行時には設定できません。
383	プロパティは値の取得のみ可能です。
385	このプロパティには配列のインデックスが必要です。
387	プロパティは値を設定できません。
393	プロパティは実行時に値の取得はできません。
394	プロパティは設定のみ可能です。
400	既にフォームは表示されています。モーダルにできません。
402	一番手前 (前面) のモーダル フォームを先に閉じてください。
419	オブジェクトを利用できません。
422	プロパティが見つかりません。
423	プロパティまたはメソッドが見つかりません。
424	オブジェクトが必要です。
425	オブジェクトの使い方が不正です
429	コンポーネントはオブジェクトを作成できません。
430	クラスはオートメーションをサポートしていません。
432	オートメーションの操作中にファイル名またはクラス名を見つけられませんでした。
438	オブジェクトは、このプロパティまたはメソッドをサポートしていません。
440	オートメーション エラーです。
442	リモート プロセス用のタイプ ライブラリまたはオブジェクト ライブラリへの参照は失われました。
443	オートメーション オブジェクトには既定値がありません。
445	オブジェクトはこの動作をサポートしていません。
446	オブジェクトは名前付き引数をサポートしていません。
447	オブジェクトは現在の国別情報の設定をサポートしていません。
448	名前付き引数が見つかりません。
449	引数は省略できません。または不正なプロパティを指定しています。
450	引数の数が一致していません。または不正なプロパティを指定しています。
451	このオブジェクトがコレクションではありません。
452	序数が不正です。
453	関数は指定されたコード リソース には定義されていません。
454	コード リソースが見つかりません。
455	コード リソースのロック エラー
457	このキーは既にこのコレクションの要素に割り当てられています。
458	Visual Basic でサポートされていないオートメーションが変数で使用されています。
459	このコンポーネントでは、イベントはサポートされていません。
460	クリップボードのデータ形式が不正です。
461	メソッドまたはデータ メンバが見つかりません。
462	リモート サーバーがないか、使用できる状態ではありません。
463	ローカル マシンにクラスが登録されていません。
480	AutoRedraw イメージを作成できません。
481	ピクチャが不正です。
482	プリンタ エラーです。
483	プリンタ ドライバは指定されたプロパティをサポートしていません。
484	システムからプリンタ情報を受けるときに問題が発生しました。プリンタが正しく設定されているかを確かめてください。
485	ピクチャの形式が不正です。
486	フォームのイメージをこのプリンターで印刷することはできません。
520	クリップボードを空にできません。
521	クリップボードを開けません。
735	テンポラリ ファイルに保存できません。
744	検索文字列が見つかりませんでした。
746	置換後の文字列が長すぎます。
31001	メモリが不足しています。
31004	オブジェクトがありません。
31018	クラスが設定されていません。
31027	オブジェクトをアクティブにできません。
31032	埋め込みオブジェクトが作成できません。
31036	ファイルへの書き込み中にエラーが発生しました。
31037	ファイルの読み込み中にエラーが発生しました。


AddressOf 演算子

プロシージャのアドレスを取得する単項演算子です。引数リストの一部にプロシージャへのポインタが含まれる API プロシージャを呼び出す場合、先にこの演算子を用いてプロシージャのアドレスを取得します。

構文

AddressOf procedurename

引数 procedurename は必ず指定します。この引数には、アドレスを渡すプロシージャの名前を指定します。API の呼び出しを行うプロジェクト内の標準モジュールの中のプロシージャを指定する必要があります。

解説

引数リストの中にプロシージャ名が記述されている場合は、通常、プロシージャの処理が行われて、プロシージャからの戻り値が格納された領域のアドレスが引数として渡されます。AddressOf 演算子を使うと、プロシージャからの戻り値ではなくプロシージャ自体のアドレスが、ダイナミック リンク ライブラリ (DLL)のWindows API 関数に渡されます。API 関数は、このようにして渡されたアドレスを使って Basic のプロシージャを呼び出す、コールバックと呼ばれる処理を行います。AddressOf 演算子は、API プロシージャの呼び出しの中にだけ記述できます。

Basic プロシージャの間でも AddressOf 演算子を使ってプロシージャのポインタを渡せますが、渡されたポインタを使って Basic プロシージャから関数を呼び出すことはできません。つまり、Basic で記述されたクラスには、ポインタを使ってコントローラにコールバックを行う機能はありません。AddressOf 演算子を使って Basic のプロシージャ間でポインタを渡す場合は、呼び出されるプロシージャの引数は、As Long で宣言する必要があります。

警告   コールバック機能の概念について十分理解せずに AddressOf 演算子を使うと、予測できない結果が発生するおそれがあります。Basic におけるコールバック処理の方法、および関数のアドレスを渡す先の DLL のコードについて理解しておく必要があります。このような、アドレスの受け渡しによって機能するプログラムは、開発環境という同じプロセス内で動作するため、デバッグが容易ではありません。

メモ   ユーザー独自のコールバック関数のプロトタイプを DLL ファイルとして作成することができます。これらの DLL ファイルは、Microsoft Visual C++ または同等の開発環境で作成します。AddressOf を使うためには、そのプロトタイプで __stdcall 呼び出し規約を使用する必要があります。既定の呼び出し規約 (__cdecl) では、AddressOf は使用できません。

プログラムの制御がコールバック プロシージャに渡されると、これ以降にコールバック プロシージャでエラーが発生した場合に、呼び出し側に制御が戻されずにプログラムが中断してしまいます。この場合、コールバック プロシージャの先頭に On Error Resume Next ステートメントを記述することによって、エラーが発生したときにもプログラムの制御を呼び出し側に戻すことができます。


Assert メソッド

Assert メソッドが記述されている行で、メソッドに指定された条件に従ってプログラムの実行を中断します。

構文

object.Assert booleanexpression

Assert メソッドの構文の指定項目は次のとおりです。

指定項目	内容
object	必ず指定します。常に Debug オブジェクトを指定します。
booleanexpression	必ず指定します。真 (True) または偽 (False) として評価される式を指定します。
解説

Assert メソッドは開発環境でのみ呼び出すことができます。実行可能なモジュールとしてコンパイルされると、Debug オブジェクトでのメソッドの呼び出しは実行されません。

引数 booleanexpression で指定した式の全体が常に評価されます。たとえば、And 演算子で連結された式の最初の部分が偽 (False) と評価された場合でも、式全体の評価が行われます。


Friend <キーワード>
Friend キーワード

フォーム モジュール内のプロシージャまたはクラス モジュールの定義を変更して、クラスの外のモジュールからプロシージャを呼び出せるようにします。ただし、呼び出すモジュールはクラスが定義されているプロジェクトの一部である必要があります。標準モジュール内ではFriend プロシージャは使用できません。

構文

[Private | Friend | Public] [Static] [Sub | Function | Property] procedurename

引数 procedurename は必ず指定します。この引数にはプロシージャの名前を指定します。このプロシージャは、プロジェクト全体から呼び出せるようになりますが、クラスのコントローラからは呼び出せません。

解説

クラスにおいてパブリック (Public) として宣言されたプロシージャは、クラスのインスタンスのコントローラも含めて、クラス内のどこからでも呼び出せます。プロシージャをプライベート (Private) として宣言すると、そのプロシージャはオブジェクトのコントローラから呼び出せなくなるだけではなく、クラス自体が定義されているプロジェクト内からも呼び出せなくなります。フレンド (Friend) を指定されたプロシージャは、プロジェクト内からは呼び出せますが、オブジェクトのインスタンスのコントローラからは呼び出せません。キーワード Friend はフォーム モジュールおよびクラス モジュールでのみ記述できます。修飾できるのはプロシージャ名だけで、変数およびデータ型は修飾できません。あるクラスのプロシージャは、プロジェクト内のほかのすべてのクラスのフレンド (Friend) プロシージャを呼び出せます。タイプ ライブラリには登録されません。フレンド (Friend) プロシージャは、実行時バインディングを行えません。


RaiseEvent ステートメント

クラス、フォーム、またはドキュメント内のモジュール レベルで宣言されたイベントを通知します。

構文

RaiseEvent eventname [(argumentlist)]

引数 eventname は必ず指定します。この引数にはモジュール内で宣言されたイベントの名前を指定します。変数名は Basic の標準的な名前付け規則に従ってください。

RaiseEvent ステートメントの構文の指定項目は次の通りです。

指定項目	内容
eventname	必ず指定します。通知するイベントの名前です。
argumentlist	省略可能です。変数、配列および式のリストを、カンマで区切って指定します。argumentlist はかっこで囲む必要があります。この引数を指定しない場合は、かっこも必要ありません。
解説

イベントを生成するモジュール内でイベントが宣言されていない場合、エラーが発生します。次の例は、イベントの宣言と、イベントを発行するプロシージャです。

' クラス モジュールのモジュール レベルでイベントを宣言します。

Event LogonCompleted (UserName as String)

Sub

' イベントを発行します。

RaiseEvent LogonCompleted ("AntoineJan")

End Sub

イベントに引数がない場合、RaiseEvent ステートメントの呼び出しで空のかっこを指定すると、イベントの起動時にエラーが発生します。モジュール内で明示的に宣言されていないイベントは、RaiseEvent イベントを使って通知できません。たとえば、フォームに Click イベントがある場合、RaiseEvent ステートメントでは Click イベントを通知できません。フォーム モジュールで Click イベントを宣言すると、フォーム自体の Click イベントは裏に隠されます。この場合にも、RaiseEvent ステートメントを使うのではなく、通常のイベント呼び出しの構文を使って、フォームの Click イベントを起動できます。

イベントの通知は、接続が確立された順番に行われます。イベントには参照渡し (ByRef) のパラメータを設定できるので、後から接続したプロセスは、先に接続していたイベント ハンドラによって変更されたパラメータを受け取ることがあります。


AddressOf 演算子の使用例

次の例では、フォームを作成しています。フォームの中のリスト ボックスには、システムのフォントをアルファベット順にソートして表示します。

この例を実行するには、フォームを作成して、その上にリスト ボックスを配置します。フォームには次のコードを記述します。

Option Explicit

Private Sub Form_Load()

    Module1.FillListWithFonts List1

End Sub

標準モジュールを追加し、そこに以下のコードを記述します。 The third argument in the definition of the EnumFontFamilies 関数の定義では 3 番目の引数は長整数型 (Long) として定義されています。この引数には、プロシージャからの戻り値ではなく、プロシージャのアドレスが含まれなければなりません。EnumFontFamilies の呼び出しでは、3 番目の引数に AddressOf 演算子を指定します。これによって、Windows API 関数 EnumFontFamilies の呼び出しで必要となる、EnumFontFamProc プロシージャのアドレスが返されるようになります。 EnumFontFamilies 関数にAddressOf EnumFontFamProc が渡されると、Windows は、システムの各フォント ファミリごとに 1 回ずつ EnumFontFamProc プロシージャを呼び出します。EnumFontFamilies 関数に渡す最後の引数には、情報を表示するためのリスト ボックスを指定します。

'フォントの列挙型

Public Const LF_FACESIZE = 32

Public Const LF_FULLFACESIZE = 64

Type LOGFONT

        lfHeight As Long

        lfWidth As Long

        lfEscapement As Long

        lfOrientation As Long

        lfWeight As Long

        lfItalic As Byte

        lfUnderline As Byte

        lfStrikeOut As Byte

        lfCharSet As Byte

        lfOutPrecision As Byte

        lfClipPrecision As Byte

        lfQuality As Byte

        lfPitchAndFamily As Byte

        lfFaceName(LF_FACESIZE) As Byte

End Type

Type NEWTEXTMETRIC

        tmHeight As Long

        tmAscent As Long

        tmDescent As Long

        tmInternalLeading As Long

        tmExternalLeading As Long

        tmAveCharWidth As Long

        tmMaxCharWidth As Long

        tmWeight As Long

        tmOverhang As Long

        tmDigitizedAspectX As Long

        tmDigitizedAspectY As Long

        tmFirstChar As Byte

        tmLastChar As Byte

        tmDefaultChar As Byte

        tmBreakChar As Byte

        tmItalic As Byte

        tmUnderlined As Byte

        tmStruckOut As Byte

        tmPitchAndFamily As Byte

        tmCharSet As Byte

        ntmFlags As Long

        ntmSizeEM As Long

        ntmCellHeight As Long

        ntmAveWidth As Long

End Type

' ntmFlags フィールドのフラグ

Public Const NTM_REGULAR = &H40&

Public Const NTM_BOLD = &H20&

Public Const NTM_ITALIC = &H1&

'  tmPitchAndFamily フラグ

Public Const TMPF_FIXED_PITCH = &H1

Public Const TMPF_VECTOR = &H2

Public Const TMPF_DEVICE = &H8

Public Const TMPF_TRUETYPE = &H4

Public Const ELF_VERSION = 0

Public Const ELF_CULTURE_LATIN = 0

'  EnumFonts マスク

Public Const RASTER_FONTTYPE = &H1

Public Const DEVICE_FONTTYPE = &H2

Public Const TRUETYPE_FONTTYPE = &H4

Declare Function EnumFontFamilies Lib "gdi32" Alias _
 "EnumFontFamiliesA" _
 (ByVal hDC As Long, ByVal lpszFamily As String, _
 ByVal lpEnumFontFamProc As Long, LParam As Any) As Long

Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long

Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, _
 ByVal hDC As Long) As Long

Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, _
 ByVal FontType As Long, LParam As ListBox) As Long

Dim FaceName As String

Dim FullName As String

    FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)

    LParam.AddItem Left$(FaceName, InStr(FaceName, vbNullChar) - 1)

    EnumFontFamProc = 1

End Function

Sub FillListWithFonts(LB As ListBox)

Dim hDC As Long

    LB.Clear

    hDC = GetDC(LB.hWnd)

    EnumFontFamilies hDC, vbNullString, AddressOf EnumFontFamProc, LB

    ReleaseDC LB.hWnd, hDC

End Sub


Assert メソッドの使用例

次の例は、Assert メソッドの使用例です。この例では、2 つのボタンが配置されたフォームが必要です。ボタン コントロールの名前はそれぞれ、Command1 と Command2 です。

このプログラムを実行し、Command1 ボタンをクリックすると、0 と 1 の間の数値がボタン上に表示されます。Command2 ボタンをクリックすると、何も行われないか、またはアサーションが発生します。結果がどちらになるかは、Command1 ボタンに表示されている値によって決まります。アサーションが発生すると、最後に実行されたステートメント、つまり強調表示されている "Debug.Assert" の行で、プログラムの実行が止まります。

Option Explicit

Private blnAssert As Boolean

Private intNumber As Integer

Private Sub Command1_Click()

    blnAssert = Not blnAssert

    intNumber = IIf(intNumber <> 0, 0, 1)

    Command1.Caption = intNumber

End Sub

Private Sub Command2_Click()

    Debug.Assert blnAssert

End Sub

Private Sub Form_Load()

    Command1.Caption = intNumber

    Command2.Caption = "Assert Tester"

End Sub


Friend の使用例

次のコードをクラス モジュールに記述した場合、メンバ変数 dblBalance はプロジェクト内のすべてのクラスから参照できるようになります。プロジェクト内の他のコードによって、変数に値が代入されている場合にこのクラスを使用すると、その変数の値も取得できます。

Private dblBalance As Double

Public Property Get Balance() As Double

    Balance = dblBalance

End Property

Friend Property Let Balance(dblNewBalance As Double)

    dblBalance = dblNewBalance

End Property


RaiseEvent ステートメントの使用例

次の例では、イベントを使用して 100 メートル走の秒数の計測をシミュレートしています。コード例には、イベントに関連するメソッド、プロパティ、ステートメントなどに加え、RaiseEvent ステートメントが記述されます。

イベントを発行するクラスはイベント ソースと呼ばれ、イベントをインプリメントするクラスはイベント シンクと呼ばれます。イベント ソースは、複数のイベント シンクに対してイベントを通知できます。クラスによってイベントが発行されると、イベント シンクとして指定されているすべてのクラスに対してイベントが通知されます。

この例ではクラスモジュールのほかにフォーム モジュール (Form1) を使っています。フォーム上には、ボタン コントロール (Command1)、ラベル コントロール (Label1) および 2 つのテキスト ボックス コントロール (Text1 と Text2) が配置されています。ボタンをクリックすると、1 つめのテキスト ボックスに "スタート" の文字が表示され、2 つめのテキストボックスには現在の秒数カウントが表示されます。最長秒数 (この場合には 9.84 秒) が経過すると 1 つめのテキスト ボックスに "ゴール" という文字列が表示され、2 つめのテキスト ボックスには経過秒数の "9.84" が表示されます。

フォーム モジュール Form1 にはプログラムの開始時と終了時に実行されるコードに加え、イベントが発生したときに実行されるコードが記述されています。

Option Explicit

Private WithEvents mText As TimerState

Private Sub Command1_Click()

    Text1.Text = "スタート"

    Text1.Refresh

    Text2.Text = "0"

    Text2.Refresh

    Call mText.TimerTask(9.84)

End Sub

Private Sub Form_Load()

    Command1.Caption = "クリックすると開始します"

    Text1.Text = ""

    Text2.Text = ""

    Label1.Caption = "100 メートル走の所定秒数が経過しました:"

    Set mText = New TimerState

    End Sub

Private Sub mText_ChangeText()

    Text1.Text = "ゴール"

    Text2.Text = "9.84"

End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)

    Text2.Text = Str(Format(dblJump, "0"))

    DoEvents

End Sub

クラス モジュール TimerState には次のコードを記述します。Raise Event ステートメントは、このクラスモジュールに含まれています。

Option Explicit

Public Event UpdateTime(ByVal dblJump As Double)

Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)

    Dim dblStart As Double

    Dim dblSecond As Double

    Dim dblSoFar As Double

    dblStart = Timer

    dblSoFar = dblStart

    Do While Timer < dblStart + Duration

        If Timer - dblSoFar >= 1 Then

            dblSoFar = dblSoFar + 1

            RaiseEvent UpdateTime(Timer - dblStart)

        End If

    Loop

    RaiseEvent ChangeText

End Sub


ASCII 文字セット (128 - 255)

128	・	160	[ｽﾍﾟｰｽ]	192	ﾀ	224	・
129	・	161	｡	193	ﾁ	225	・
130	・	162	｢	194	ﾂ	226	・
131	・	163	｣	195	ﾃ	227	・
132	・	164	､	196	ﾄ	228	・
133	・	165	･	197	ﾅ	229	・
134	・	166	ｦ	198	ﾆ	230	・
135	・	167	ｧ	199	ﾇ	231	・
136	・	168	ｨ	200	ﾈ	232	・
137	・	169	ｩ	201	ﾉ	233	・
138	・	170	ｪ	202	ﾊ	234	・
139	・	171	ｫ	203	ﾋ	235	・
140	・	172	ｬ	204	ﾌ	236	・
141	・	173	ｭ	205	ﾍ	237	・
142	・	174	ｮ	206	ﾎ	238	・
143	・	175	ｯ	207	ﾏ	239	・
144	・	176	-	208	ﾐ	240	・
145	・	177	ｱ	209	ﾑ	241	・
146	・	178	ｲ	210	ﾒ	242	・
147	・	179	ｳ	211	ﾓ	243	・
148	・	180	ｴ	212	ﾔ	244	・
149	・	181	ｵ	213	ﾕ	245	・
150	・	182	ｶ	214	ﾖ	246	・
151	・	183	ｷ	215	ﾗ	247	・
152	・	184	ｸ	216	ﾘ	248	・
153	・	185	ｹ	217	ﾙ	249	・
154	・	186	ｺ	218	ﾚ	250	・
155	・	187	ｻ	219	ﾛ	251	・
156	・	188	ｼ	220	ﾜ	252	・
157	・	189	ｽ	221	ﾝ	253	・
158	・	190	ｾ	222	ﾞ	254	・
159	・	191	ｿ	223	ﾟ	255	・
・	これらの文字は、Microsoft Windows ではサポートされていません。

表の値は、Windows の既定値を示しています。ただし、文字コードの値が 127 より大きい文字については、ユーザーのオペレーティング システムが使用しているコード ページによって文字が異なる場合があります。


日付形式の定数

コード内で定数を使用するには、目的の定数の定義が入った適切なタイプ ライブラリをプロジェクトから明示的に参照しておく必要があります。

定数	値	説明
vbGeneralDate	0	日付か時刻、または両方を表示します。実数では、日付と時刻を表示します。小数部がない場合は、日付のみを表示します。整数部がない場合は、時刻のみを表示します。日付および時刻の表示は、システムの設定に従います。
vbLongDate	1	コントロール パネルの [地域のプロパティ] で指定されている長い形式で日付を表示します。
vbShortDate	2	コントロール パネルの [地域のプロパティ] で指定されている短い形式で日付を表示します。
vbLongTime	3	コントロール パネルの [地域のプロパティ] で指定されている長い形式で時刻を表示します。
vbShortTime	4	コントロール パネルの [地域のプロパティ] で指定されている短い形式で時刻を表示します。


DriveType プロパティの定数

コード内で定数を使用するには、目的の定数の定義が入った適切なタイプ ライブラリをプロジェクトから明示的に参照しておく必要があります。

定数	値	説明
Unknown	0	ドライブの種類を判断できません。
Removable	1	ドライブには、リムーバブル メディアがセットされます。これには、フロッピー ディスク ドライブそのほか多くの記憶装置が含まれます。
Fixed	2	ドライブには、固定メディア (取り外せないメディア) がセットされています。これには、あらゆるハード ディスクが含まれます (リムーバブル ハード ディスクも含まれます)。
Remote	3	ネットワーク ドライブ。これには、ネットワーク上のあらゆる場所の共有ドライブが含まれます。
CDROM	4	CD-ROM ドライブ。読み取り専用と書き込み可能な CD-ROM ドライブの区別は行われません。
RAMDisk	5	RAM (ランダム アクセス メモリ) ブロックによるドライブ。ローカル コンピュータ上では、ディスク ドライブのように機能します。


ファイル属性の定数

コード内で定数を使用するには、目的の定数の定義が入った適切なタイプ ライブラリをプロジェクトから明示的に参照しておく必要があります。

定数	値	説明
Normal	0	標準ファイル。どの属性も設定されません。
ReadOnly	1	読み取り専用ファイル。この属性は、値の取得も設定も可能です。
Hidden	2	隠しファイル。この属性は、値の取得も設定も可能です。
System	4	システム ファイル。この属性は、値の取得も設定も可能です。
Volume	8	ディスク ドライブ ボリューム ラベル。この属性は、値の取得のみ可能です。
Directory	16	フォルダまたはディレクトリ。この属性は、値の取得のみ可能です。
Archive	32	ファイルが前回のバックアップ以降に変更されているかどうか。この属性は、値の取得も設定も可能です。
Alias	64	リンクまたはショートカット。この属性は、値の取得のみ可能です。
Compressed	128	圧縮ファイル。この属性は、値の取得のみ可能です。


ファイル入出力の定数

コード内で定数を使用するには、目的の定数の定義が入った適切なタイプ ライブラリをプロジェクトから明示的に参照しておく必要があります。

定数	値	説明
ForReading	1	読み取り専用でファイルを開きます。
ForWriting	2	書き込み専用でファイルを開きます。同じ名前のファイルが存在する場合は、上書き保存されます。
ForAppending	8	ファイルの末尾から追加書き込みをするためのファイルを開きます。


特殊フォルダの定数

コード内で定数を使用するには、目的の定数の定義が入った適切なタイプ ライブラリをプロジェクトから明示的に参照しておく必要があります。

定数	値	説明
WindowsFolder	0	Windows オペレーティング システムによりセットアップされたファイルが格納されている Windows フォルダ。
SystemFolder	1	ライブラリ、フォント、デバイス ドライバなどが格納されている System フォルダ。
TemporaryFolder	2	一時ファイルの格納に使用される Temp フォルダ。このパスは、環境変数 TMP に設定されています。


Tristate の定数

コード内で定数を使用するには、目的の定数の定義が入った適切なタイプ ライブラリをプロジェクトから明示的に参照しておく必要があります。

定数	値	説明
VbTrue	-1	真 (True)
VbFalse	0	偽 (False)
VbUseDefault	-2	既定値を使用する。


Filter 関数

機能

指定されたフィルタ条件に基づいた文字列配列のサブセットを含むゼロ ベースの配列を返します。

構文

Filter(sourcesrray, match[, include[, compare]])

Filter 関数の構文は、次の名前付き引数から構成されます。

指定項目	説明
sourcearray	必ず指定します。検索先の 1 次元配列の文字列を指定します。
match	必ず指定します。検索する文字列を指定します。
include	省略可能です。引数 sourcearray に指定した配列の各要素の文字列の中に、引数 include が含まれるかどうかを表すブール値を指定します。引数 include が真 (True) の場合、Filter 関数は、配列の各要素の文字列の中で、引数 match が含まれる配列のサブセットを返します。引数 include が偽 (False) の場合、Filter 関数は、配列の各要素の文字列の中で、引数 match が含まれない配列のサブセットを返します。
ｃompare	省略可能です。文字列式を評価するときに使用する文字列比較のモードを表す数値を指定します。設定する値については、次の「設定値」を参照してください。
設定値

引数 compare の設定値は次のとおりです。

定数	値	説明
vbUseCompareOption	-1	Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare	0	バイナリ モードの比較を行います。
vbTextCompare	1	テキスト モードの比較を行います。
vbDatabaseCompare	2	Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較を行います。
解説

引数 sourcearray 内で引数 match に一致する文字列がなかった場合は、Filter 関数は空の配列を返します。引数 sourcearray が Null 値であるか、1 次元配列でない場合は、エラーになります。

Filter 関数が返す配列は、一致した項目数分だけの要素が含まれています。


FormatCurrency 関数

機能

システムの [コントロール パネル] で定義されている書式を使って通貨形式の文字列を返す文字列処理関数です。

構文

FormatCurrency(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatCurrency 関数の構文は、次の指定項目から構成されます。

指定項目	説明
Expression	必ず指定します。書式を変換する式を指定します。
NumDigitsAfterDecimal	省略可能です。小数点以下に表示する桁数を表す数値を指定します。既定値は -1 で、[地域のプロパティ] の値を使用します。
IncludeLeadingDigit	省略可能です。小数点の左側のゼロを表示するかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
UseParensForNegativeNumbers	省略可能です。負の値をかっこで囲むかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
GroupDigits	省略可能です。[地域のプロパティ] で指定されている桁区切り記号を使用して、数値を区切るかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
設定値

IncludeLeadingDigit、UseParensForNegativeNumbers、および GroupDigits の各引数の設定値は次のとおりです。

定数	値	説明
vbTrue	-1	真 (True)
vbFalse	0	偽 (False)
vbUseDefault	-2	[地域のプロパティ] の設定値を使用します。
解説

引数を省略すると、[地域のプロパティ] の対応する値を使用します。

通貨記号の位置は、[地域のプロパティ] の設定値で決まります。

メモ   これらの設定値の情報は、[地域のプロパティ] の [通貨] タブに基づいています。ただし、ゼロの表示については、[数値] タブに基づいています。


FormatDateTime 関数

機能

日付形式または時刻形式の文字列を返す文字列処理関数です。

構文

FormatDateTime(Date[,NamedFormat])

FormatDateTime 関数の構文は、次の指定項目から構成されます。

指定項目	説明
Date	必ず指定します。書式を変換する日付式を指定します。
NamedFormat	省略可能です。使用されている日付/時刻形式を表す数値を指定します。省略すると、定数 vbGeneralDate が使用されます。
設定値

引数 NamedFormat の設定値は次のとおりです。

定数	値	説明
vbGeneralDate	0	日付か時刻、または両方を表示します。日付部がある場合は、日付を短い形式で表示します。時刻部がある場合は、時刻を長い形式で表示します。両方がある場合は、両方とも表示します。
vbLongDate	1	[地域のプロパティ] で指定されている長い形式で日付を表示します。
vbShortDate	2	[地域のプロパティ] で指定されている短い形式で日付を表示します。
vbLongTime	3	[地域のプロパティ] で指定されている形式で時刻を表示します。
vbShortTime	4	24 時間形式 (hh:mm) で時刻を表示します。


FormatNumber 関数

機能

数値形式の文字列を返します。

構文

FormatNumber(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatNumber 関数の構文は、次の指定項目から構成されます。

指定項目	説明
Expression	必ず指定します。書式を変換する式を指定します。
NumDigitsAfterDecimal	省略可能です。小数点以下に表示する桁数を表す数値を指定します。既定値は -1 で、[地域のプロパティ] の値を使用します。
IncludeLeadingDigit	省略可能です。小数点の左側のゼロを表示するかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
UseParensForNegativeNumbers	省略可能です。負の値をかっこで囲むかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
GroupDigits	省略可能です。[地域のプロパティ] で指定されている桁区切り記号を使用して、数値を区切るかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
設定値

IncludeLeadingDigit、UseParensForNegativeNumbers、および GroupDigits の各引数の設定値は次のとおりです。

定数	値	説明
vbTrue	-1	真 (True)
vbFalse	0	偽 (False)
vbUseDef	-2	[地域のプロパティ] の設定値を使用します。
解説

引数を省略すると、[地域のプロパティ] の対応する値を使用します。

メモ   これらの設定値の情報は、[地域のプロパティ] の [数値] タブに基づいています。


FormatPercent 関数

機能

100 で乗算したパーセント形式の式にパーセント記号 (%) を付加して返します。

構文

FormatPercent(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatPercent 関数の構文は、次の指定項目から構成されます。

指定項目	説明
Expression	必ず指定します。書式を変換する式を指定します。
NumDigitsAfterDecimal	省略可能です。小数点以下に表示する桁数を表す数値を指定します。既定値は -1 で、[地域のプロパティ] の値を使用します。
IncludeLeadingDigit	省略可能です。小数点の左側のゼロを表示するかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
UseParensForNegativeNumbers	省略可能です。負の値をかっこで囲むかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
GroupDigits	省略可能です。[地域のプロパティ] で指定されている桁区切り記号を使用して、数値を区切るかどうかを表す定数を指定します。設定する値については、次の「設定値」を参照してください。
設定値

IncludeLeadingDigit、UseParensForNegativeNumbers、および GroupDigits の各引数の設定値は次のとおりです。

定数	値	説明
vbTrue	-1	真 (True)
vbFalse	0	偽 (False)
vbUseDef	-2	[地域のプロパティ] の設定値を使用します。
解説

引数を省略すると、[地域のプロパティ] の対応する値を使用します。

メモ   これらの設定値の情報は、[地域のプロパティ] の [数値] タブに基づいています。


InStrRev 関数

機能

ある文字列 (string1) の中から指定された文字列 (string2) を最後の文字位置から検索を開始し、最初に見つかった文字位置 (先頭からその位置までの文字数) を返す文字列処理関数です。

構文

InstrRev(stringcheck, stringmatch[, start[, compare]])

InstrRev 関数の構文は、次の名前付き引数から構成されます。

指定項目	説明
stringcheck	必ず指定します。検索先の文字列式を指定します。
stringmatch	必ず指定します。検索する文字列式を指定します。
start	省略可能です。各検索の開始位置を設定する数式を指定します。引数 start を省略すると -1 が使用され、最後の文字位置から検索を開始します。引数 start に Null 値が含まれると、エラーになります。
compare	省略可能です。文字列式を評価するときに使用する文字列比較のモードを表す数値を指定します。引数 compare を省略すると、バイナリ モードで比較が行われます。設定する値については、次の「設定値」を参照してください。
設定値

引数 compare の設定値は次のとおりです。

定数	値	説明
vbUseCompareOption	-1	Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare	0	バイナリ モードで比較を行います。
vbTextCompare	1	テキスト モードで比較を行います。
VbDatabaseCompare	2	Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較を行います。
戻り値

InStrRev 関数の戻り値は次のとおりです。

条件	InStrRev の戻り値
stringcheck is zero-length	0
stringcheck is Null	Null 値
stringmatch is zero-length	Start
stringmatch is Null	Null 値
stringmatch is not found	0
stringmatch is found within stringcheck	文字列が見つかった位置
start > Len(stringmatch)	0
解説

InstrRev関数の構文は、Instr関数の構文とは異なります。


Join 関数

機能

配列に含まれる各要素の内部文字列を結合して作成される文字列を返します。

構文

Join(sourcearray [, delimiter])

Join 関数の構文は、次の名前付き引数から構成されます。

指定項目	説明
sourcearray	必ず指定します。結合する文字列を含む 1 次元配列を指定します。
delimiter	省略可能です。戻り値となる文字列を区切るのに使用する文字を指定します。省略すると、スペース (" ") が使用されます。引数 delimiter が長さ 0 の文字列 ("") である場合は、リスト内のすべての項目が区切り文字なしで連結されます。


MonthName 関数

機能

指定された月を表す文字列を返します。

構文

MonthName(month[, abbreviate])

MonthName 関数の構文は、次の指定項目から構成されます。

指定項目	説明
month	必ず指定します。月を示す数値を指定します。たとえば、1 月は 1、2 月は 2 になります。
abbreviate	省略可能です。月名を省略するかどうかを表すブール値を指定します。省略すると、既定値の偽 (False) が使用され、月名は省略されません。


Replace 関数

機能

指定された文字列の一部を、別の文字列で指定された回数分で置換した文字列を返します。

構文

Replace(expression, find, replace[, start[, count[, compare]]])

Replace 関数の構文は、次の名前付き引数から構成されます。

指定項目	説明
expression	必ず指定します。置換する文字列を含む文字列式 を指定します。
find	必ず指定します。検索する文字列を指定します。
replace	必ず指定します。置換する文字列を指定します。
start	省略可能です。引数 expression 内の内部文字列の検索開始位置を指定します。この引数を省略すると、1 が使用されます。.
count	省略可能です。置換する文字列数を指定します。この引数を省略すると、既定値の -1 が使用され、すべての候補が置換されます。
compare	省略可能です。文字列式を評価するときに使用する文字列比較のモードを表す数値を指定します。設定する値については、次の「設定値」を参照してください。
設定値

引数 compare の設定値は次のとおりです。

定数	値	説明
vbUseCompareOption	-1	Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare	0	バイナリ モードで比較を行います。
vbTextCompare	1	テキスト モードで比較を行います。
vbDatabaseCompare	2	Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較を行います。
戻り値

Replace 関数の戻り値は次のとおりです。

条件	Replace の戻り値
expression is zero-length	長さ 0 の文字列 ("")
expression is Null	エラー
find is zero-length	expression のコピー
replace is zero-length	find がすべて削除された expression のコピー
start > Len(expression)	長さ 0 の文字列 ("")
count is 0	expression のコピー
解説

引数 start を指定した場合、Replace 関数は、指定された位置から引数 expression の文字列の末尾までを返します。


Round 関数

機能

指定された小数点位置で丸めた数値を返します。

構文

Round(expression [,numdecimalplaces])

Round 関数の構文は、次の指定項目から構成されます。

指定項目	説明
expression	必ず指定します。丸めを行う数式を指定します。
numdecimalplaces	省略可能です。丸めを行う小数点以下の桁数を表す数値を指定します。省略すると、Round 関数は整数値を返します。


Split 関数

機能

各要素ごとに区切られた文字列から 1 次元配列を作成し、返します。

構文

Split(expression[, delimiter[, limit[, compare]]])

Split 関数の構文は、次の名前付き引数から構成されます。

指定項目	説明
expression	必ず指定します。文字列と区切り文字を含んだ文字列式を指定します。引数 expression が長さ 0 の文字列 ("") である場合、Split 関数は、要素もデータもない空の配列を返します。
delimiter	省略可能です。文字列の区切りを識別する文字を指定します。引数 delimiter を省略すると、区切り文字にスペース (" ") が使用されます。引数 delimiter が長さ 0 の文字列 ("") である場合は、引数 expression 全体の文字列を含む単一の要素の配列を返します。
limit	省略可能です。返す配列の要素数を指定します。-1 を指定すると、すべての文字列を含んだ配列を返します。
compare	省略可能です。文字列式を評価するときに使用する文字列比較のモードを表す数値を指定します。設定する値については、次の「設定値」を参照してください。
設定値

引数 compare の設定値は次のとおりです。

定数	値	説明
VbUseCompareOption	-1	Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare	0	バイナリ モードで比較を行います。
vbTextCompare	1	テキスト モードで比較を行います。
vbDatabaseCompare	2	Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較を行います。


StrReverse 関数

機能

指定された文字列の文字の並びを逆にした文字列を返します。

構文

StrReverse(expression)

引数 expression に文字の並びを逆にする文字列を指定します。引数 expression が長さ 0 の文字列 ("") である場合は、長さ 0 の文字列を返します。引数 expression が Null 値である場合は、エラーになります。


WeekdayName 関数

機能

指定された曜日を表す文字列を返します。

構文

WeekdayName(weekday, abbreviate, firstdayofweek)

WeekdayName 関数の構文は、次の指定項目から構成されます。

指定項目	説明
weekday	必ず指定します。曜日を示す数値を指定します。各曜日を表す数値は、引数 firstdayofweek の設定値によって異なります。
abbreviate	省略可能です。曜日名を省略するかどうかを示すブール値を指定します。省略すると、既定値の偽 (False) が使われ、曜日名は省略されません。
firstdayofweek	省略可能です。曜日の最初の日を示す数値を指定します。設定する値については、次の「設定値」を参照してください。
設定値

引数 firstdayofweek の設定値は次のとおりです。

定数	値	説明
vbUseSystem	0	各国語対応 (NLS) API の設定値を使用します。
vbSunday	1	日曜 (既定値)
vbMonday	2	月曜
vbTuesday	3	火曜
vbWednesday	4	水曜
vbThursday	5	木曜
vbFriday	6	金曜
vbSaturday	7	土曜


Add メソッド (Dictionary オブジェクト)

機能

Dictionary オブジェクトにキーと対の項目を追加します。

構文

object.Add key, item

Add メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
Object	必ず指定します。Dictionary オブジェクトの名前を指定します。
Key	必ず指定します。追加する引数 item と関連付けられた引数 key を指定します。
Item	必ず指定します。追加する引数 key と関連付けられた引数 item を指定します。
解説

引数 key での指定が既に存在している場合は、エラーとなります。


Add メソッド (Folders コレクション)

機能

Folders コレクションに新しい Folder オブジェクトを追加します。

構文

object.Add folderName

Add メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。Folders コレクションの名前を指定します。
folderName	必ず指定します。新しく追加する Folder オブジェクトの名前を指定します。
解説

引数 folderName で指定したフォルダが既に存在していた場合は、エラーが発生します。


BuildPath メソッド

機能

既存パスの末尾に名前を追加します。

構文

object.BuildPath(path, name)

BuildPath メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
path	必ず指定します。引数 name で指定した名前を末尾に追加する既存パスを指定します。絶対パスまたは相対パスのどちらかを指定します。また、存在しないフォルダを指定することができます。
name	必ず指定します。引数 path で指定した既存パスの末尾に追加する名前を指定します。
解説

BuildPath メソッドは、必要な場合だけ、既存パスと指定した名前の間にパスの区切り文字を挿入します。


Close メソッド

機能

開いているTextStream ファイルを閉じます。

構文

object.Close

object には、TextStream オブジェクトの名前を指定する必要があります。


Copy メソッド

機能

指定されたファイルまたはフォルダを別の場所へコピーします。

構文

object.Copy destination[, overwrite]

Copy メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。File オブジェクトまたは Folder オブジェクトの名前を指定します。
destination	必ず指定します。ファイルまたはフォルダのコピー先を指定します。ワイルドカード文字は指定できません。
overwrite	省略可能です。既存ファイルや既存フォルダを上書きする場合は、既定値の真 (True) を指定します。上書きしない場合は、偽 (False) を指定します。
解説

File オブジェクトまたは Folder オブジェクトに対して実行した Copy メソッドの結果は、FileSystemObject.CopyFile または FileSystemObject.CopyFolder を使用して行った処理とまったく同じです。これらのメソッドを使用する場合は、object でファイルまたはフォルダをメソッドに対して指定します。これらの代替メソッドを使用した場合は、複数のファイルやフォルダをコピーすることもできます。


CopyFile メソッド

機能

ファイルを別の場所へコピーします。

構文

object.CopyFile source, destination[, overwrite]

CopyFile メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
source	必ず指定します。コピーするファイルを表す文字列を指定します。1 つまたは複数のファイルを指定するためにワイルドカード文字を使用できます。
destination	必ず指定します。引数 source で指定したファイルのコピー先を表す文字列を指定します。ワイルドカード文字は使用できません。
overwrite	省略可能です。既存ファイルを上書きするかどうかを示すブール値を指定します。真 (True) を指定すると既存ファイルは上書きされ、偽 (False) を指定すると上書きされません。既定値は、真 (True) です。引数 destination に指定したコピー先が読み取り専用の属性を持っていた場合は、引数 overwrite に指定した値とは関係なく CopyFile メソッドの処理は失敗するので、注意してください。
解説

ワイルドカード文字は、引数 source に指定するパスの最後の構成要素内でしか使用できません。たとえば、次のような指定は可能です。

FileSystemObject.CopyFile "c:\mydocuments\letters\*.doc", "c:\tempfolder\"

ところが、次のような指定は行えません。この場合、ワイルドカード文字の記述する位置と引数 destination で指定したパスがパスの区切り文字 (\) で終了していないためにディレクトリとして扱われます。

FileSystemObject.CopyFile "c:\mydocuments\*\R1???97.xls", "c:\tempfolder"

引数 source にワイルドカード文字を指定した場合、または引数 destination がパスの区切り文字 (\) で終わる場合は、引数 destination に既存フォルダが指定されたとし、条件に一致するファイルがそのフォルダ内へコピーされます。それ以外の場合では、引数 destination に作成するファイルの名前が指定されたとします。いずれの場合も、ファイルのコピーで実行される可能性のある処理は 3 種類あります。

•	引数 destination に指定したファイルが存在しない場合、引数 source に指定したファイルがコピーされます。これが通常の場合です

•	引数 destination に指定したファイルまたはフォルダが既に存在する場合、指定したファイルまたは指定したフォルダ内にコピーが試みられます。ただし、引数 destination で指定したファイル名または指定したフォルダ内のファイル名が引数 source に指定したファイルと同名の場合、引数 overwrite が偽 (False) に指定されていると、エラーが発生し、真 (True) に指定されていると、コピーが行われ、既存ファイルは上書きされます。

•	引数 destination に指定したディレクトリが存在する場合、エラーが発生します。

引数 source でワイルドカード文字を使って指定したファイルが、どのファイルとも一致しなかった場合でも、エラーが発生します。CopyFile メソッドは、最初のエラーが発生した時点で処理を中止します。エラーが発生するまでに行った処理を取り消したり元に戻したりする処理は一切行われません。


CopyFolder メソッド

機能

フォルダを再帰的に別の場所へコピーします。

構文

object.CopyFolder source, destination[, overwrite]

CopyFolder メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
source	必ず指定します。コピーするフォルダを表す文字列を指定します。1 つまたは複数のフォルダを指定するためにワイルドカード文字を使用できます。
destination	必ず指定します。引数 source で指定したフォルダおよびサブフォルダのコピー先を表す文字列を指定します。ワイルドカード文字は使用できません。
overwrite	省略可能です。既存フォルダを上書きするかどうかを示すブール値を指定します。真 (True) を指定すると既存フォルダ内のファイルを上書きし、偽 (False) を指定すると上書きしません。既定値は、真 (True) です。
解説

ワイルドカード文字は、引数 source に指定する最後の構成要素内でしか使用できません。たとえば、次のような指定は可能です。

FileSystemObject.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\"

ところが、次のような指定は行うことができません。

FileSystemObject.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"

引数 source にワイルドカード文字を指定した場合、または引数 destination がパスの区切り文字 (\) で終わる場合は、引数 destination に既存フォルダが指定されたとし、条件に一致するフォルダおよびサブフォルダがそのフォルダ内へコピーされます。それ以外の場合では、引数 destination には、作成するフォルダの名前が指定されたとします。いずれの場合も、フォルダのコピーで実行される可能性のある処理は 4 種類あります。

•	引数 destination に指定したフォルダが存在しない場合、引数 source に指定したフォルダおよびそのフォルダ内のすべてのファイルとフォルダがコピーされます。これが通常の場合です。

•	引数 destination にフォルダではなくファイルを指定した場合、エラーが発生します。

•	引数 destination に指定したフォルダが既に存在する場合、指定したフォルダおよびそのフォルダ内のすべてのファイルとフォルダにコピーが試みられます。ただし、引数 destination に指定したフォルダ名が、引数 source に指定したフォルダ名と同名の場合、引数 overwrite が偽 (False) に指定されていると、エラーが発生し、真 (True) に指定されていると、コピーが行われ、既存ファイルが上書きされます。

•	引数 destination に読み取り専用のフォルダを指定した場合、引数 overwrite に偽 (False) を指定し、フォルダ内の既存の読み取り専用ファイルへコピーを試みようとすると、エラーが発生します。

引数 source でワイルドカード文字を使って指定したフォルダが、どのフォルダとも一致しない場合も、エラーが発生します。

0	CopyFolder メソッドは、最初のエラーが発生した時点で処理を中止します。エラーが発生するまでに行った処理を取り消したり元に戻したりする処理は一切行われません。


CreateFolder メソッド

機能

フォルダを作成します。

構文

object.CreateFolder(foldername)

CreateFolder メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObjectオブジェクトの名前を指定します。
foldername	必ず指定します。作成するフォルダを表す文字列式を指定します。
解説

指定したフォルダが既に存在していた場合は、エラーが発生します。


CreateTextFile メソッド

機能

指定されたファイル名のファイルを作成し、ファイルを読み込んだり、書き込むときに使用する TextStream オブジェクトを返します。

構文

object.CreateTextFile(filename[, overwrite[, unicode]])

CreateTextFile メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクト、または Folder オブジェクトの名前を指定します。
filename	必ず指定します。作成するファイルを示す文字列式を指定します。
overwrite	省略可能です。既にあるファイルを上書きするかどうかを示すブール値を指定します。ファイルを上書きする場合は、真 (True) を指定し、上書きしない場合は、偽 (False) を指定します。省略すると、ファイルは上書きされません。
unicode	省略可能です。Unicode または ASCII ファイルのいずれかで作成されたファイルかを示すブール値を指定します。Unicode で作成されたファイルでは、真 (True) を指定します。ASCII ファイルで作成されたファイルでは、偽 (False) を指定します。省略した場合、ASCII ファイルで作成されたファイルとします。
解説

次の例は、CreateTextFile メソッドを使用して、テキスト ファイルを作成し、開くコードです。

Sub CreateAfile

0	    Set fs = CreateObject("Scripting.FileSystemObject")

1	    Set a = fs.CreateTextFile("c:\testfile.txt", True)

2	    a.WriteLine("This is a test.")

3	    a.Close

4	End Sub

引数 overwrite の指定を偽 (False) または省略した場合に、引数 filename で既存のファイルを指定するとエラーとなります。


Delete メソッド

機能

指定されたファイルまたはフォルダを削除します。

構文

object.Delete force

Deleteメソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。File オブジェクトまたは Folder オブジェクトの名前を指定します。
force	省略可能です。真 (True) を指定すると読み取り専用のファイルやフォルダも削除されます。既定値の偽 (False) を指定すると読み取り専用のファイルやフォルダを削除しません。
解説

指定したファイルまたはフォルダが存在しなかった場合は、エラーが発生します。

0	File オブジェクトまたは Folder オブジェクトに対して実行した Delete メソッドの結果は、FileSystemObject.DeleteFile または FileSystemObject.DeleteFolder を使って行った処理とまったく同じです。

1	Delete メソッドでは、ほかのフォルダやファイルを含むフォルダと何も含まないフォルダとは区別されません。指定したフォルダは、ほかのファイルやフォルダが格納されているかどうかに関係なく削除されます。


DeleteFile メソッド

機能

指定されたファイルを削除します。

構文

object.DeleteFile filespec[, force]

DeleteFile メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
filespec	必ず指定します。削除するファイルの名前を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。
force	省略可能です。真 (True) を指定すると、読み取り専用のファイルも削除されます。既定値の偽 (False) を指定すると、読み取り専用のファイルは削除されません。
解説

名前の一致するファイルが見つからない場合は、エラーが発生します。DeleteFile メソッドは、最初のエラーが発生した時点で処理を中止します。エラーが発生するまでに行った処理を取り消したり元に戻したりする処理は一切行われません。


DeleteFolder メソッド

機能

指定したフォルダおよびそのフォルダ内のフォルダとファイルを削除します。

構文

object.DeleteFolder folderspec[, force]

DeleteFolder メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
folderspec	必ず指定します。削除するフォルダの名前を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。
force	省略可能です。真 (True) を指定すると、読み取り専用のフォルダも削除されます。既定値の偽 (False) を指定すると、読み取り専用のフォルダは削除されません 。
解説

DeleteFolder メソッドでは、ほかのフォルダやファイルを含むフォルダと何も含まないフォルダとは区別されません。指定したフォルダは、ほかのファイルやフォルダが格納されているかどうかに関係なく削除されます

0	名前の一致するフォルダが見つからない場合は、エラーが発生します。DeleteFolder メソッドは、最初のエラーが発生した時点で処理を中止します。エラーが発生するまでに行った処理を取り消したり元に戻したりする処理は一切行われません。


DriveExists メソッド

機能

指定されたドライブが存在する場合は、真 (True) を返します。存在しない場合は、偽 (False) を返します。

構文

object.DriveExists(drivespec)

DriveExists メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
drivespec	必ず指定します。ドライブ名またはフル パスを指定します。
解説

リムーバブル メディアのドライブの場合は、メディアがセットされていなくても真 (True) が返されます。ドライブの準備ができているかどうかを調べるには、Drive オブジェクトの IsReady プロパティを使用してください。


Exists メソッド

機能

指定されたキーが Dictionary オブジェクトの中に存在する場合は、真 (True) を返します。存在しない場合は、偽 (False) を返します。

構文

object.Exists(key)

Exists メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。Dictionary オブジェクトの名前を指定します。
key	必ず指定します。Dictionary オブジェクトの中から検索するキーの値を指定します。


FileExists メソッド

機能

指定されたファイルが存在する場合は、真 (True) を返します。存在しない場合は、偽 (False) を返します。

構文

object.FileExists(filespec)

FileExists メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
filespec	必ず指定します。存在するかどうかを調べるファイルの名前を指定します。カレント フォルダ内にないファイルの場合は、フル パスを指定する必要があります。絶対パス、または相対パスのどちらでも指定できます。


FolderExists メソッド

機能

指定したフォルダが存在する場合は、真 (True) を返します。存在しない場合は、偽 (False) を返します。

構文

object.FolderExists(folderspec)

FolderExists メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
folderspec	必ず指定します。存在するかどうかを調べるフォルダの名前を指定します。カレント フォルダ内にないフォルダの場合は、フル パスを指定する必要があります。絶対パス、または相対パスのどちらでも指定できます。


GetAbsolutePathName メソッド

機能

指定したパスに対して、完全な一意のパス名を返します。

構文

object.GetAbsolutePathName(pathspec)

GetAbsolutePathName メソッドの構文は次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
pathspec	必ず指定します。完全で一意的なパス名を取得するパスを指定します。
解説

パスは、それが格納されているドライブのルートからのフル パスになっていれば、完全で一意的になります。パスがパスの区切り文字 (\) で終わるのは、ドライブ名を割り当てられているルート フォルダを指定した場合だけです。

0	次の表は、カレント ディレクトリが c:\mydocuments\reports だった場合を例にとり、GetAbsolutePathName メソッドにより返されるパスを示します。

引数 pathspec	返されるパス
"c:"	"c:\mydocuments\reports"
"c:.."	"c:\mydocuments"
"c:\\\"	"c:\"
"c:*.*\may97"	"c:\mydocuments\reports\*.*\may97"
"region1"	"c:\mydocuments\reports\region1"
"c:\..\..\mydocuments"	"c:\mydocuments"


GetBaseName メソッド

機能

指定されたパスのベース名を表す文字列を返します。ファイル拡張子は含まれません。

構文

object.GetBaseName(path)

GetBaseName メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
path	必ず指定します。ベース名を取得する構成要素のパスを指定します。
解説

引数 path に指定された文字列にベース名に該当するものがない場合は、GetBaseName メソッドは長さ 0 の文字列 ("") を返します。

メモ   GetBaseName メソッドは、引数 path で指定された文字列に対してしか処理を行いません。指定されたパスを解決したり、指定されたパスが実際に存在するかどうかは確認しません。


GetDrive メソッド

機能

指定されたパスに含まれるドライブに対応する Drive オブジェクトを返します。

構文

object.GetDrive drivespec

GetDrive メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
drivespec	必ず指定します。ドライブ名 (c)、コロン付きのドライブ名 (c:)、コロンとパスの区切り文字の付いたドライブ名 (c:\)、任意のネットワーク共有名 (\\computer2\share1) のいずれかを指定します。
解説

ネットワーク共有を指定した場合は、その共有が存在するかどうかが確認されます。

0	引数 drivespec が指定可能な形式になっていない場合、および指定したドライブが存在しない場合は、エラーが発生します。

1	通常のパス名を使って GetDrive メソッドを呼び出すには、次の例のようなコードを記述して、引数 drivespec に指定できる文字列を取得してください。

DriveSpec = GetDriveName(GetAbsolutePathName(Path))


GetDriveName メソッド

機能

指定されたパスが置かれているドライブの名前の入った文字列を返します。

構文

object.GetDriveName(path)

GetDriveName メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
path	必ず指定します。ドライブ名を取り出すパスを指定します。
解説

ドライブが判断できない場合は、長さ 0 の文字列 ("") が返されます。

メモ   GetDriveName メソッドは、引数 path で指定された文字列に対してしか処理を行いません。指定されたパスを解決したり、指定されたパスが実際に存在するかどうかは確認しません。


GetExtensionName メソッド

機能

指定されたパスの拡張子を表す文字列を返します。

構文

object.GetExtensionName(path)

GetExtensionName メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
path	必ず指定します。拡張子を取り出す構成要素のパスを指定します。
解説

ネットワーク ドライブの場合は、ルート ディレクトリ (\) が構成要素となります。

0	引数 path に指定された文字列で拡張子に該当するものがない場合は、長さ 0 の文字列 ("") が返されます。


GetFile メソッド

機能

指定されたパスに置かれているファイルに対応する File オブジェクトを返します。

構文

object.GetFile(filespec)

GetFile メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
filespec	必ず指定します。目的のファイルのパスを指定します。絶対パス、または相対パスのどちらかを指定できます。
解説

指定したファイルが存在しない場合は、エラーが発生します。


GetFileName メソッド

機能

指定されたパスの最後の構成要素を返します。指定するパスは、ドライブの指定の一部であってはなりません。

構文

object.GetFileName(pathspec)

GetFileName メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
pathspec	必ず指定します。目的のファイルのパスを指定します。絶対パス、または相対パスのどちらかを指定できます。
解説

引数 pathspec に指定した文字列の最後が名前付きの構成要素になっていない場合は、長さ 0 の文字列 ("") が返されます。

メモ   GetFileName は、引数 path で指定された文字列に対してしか処理を行いません。指定されたパスを解決したり、指定されたパスが実際に存在するかどうかは確認しません。


GetFolder メソッド

機能

指定されたパスに置かれているフォルダに対応する Folder オブジェクトを返します。

構文

object.GetFolder(folderspec)

GetFolder メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
folderspec	必ず指定します。目的のフォルダのパスを指定します。絶対パス、または相対パスのどちらかを指定できます。
解説

指定したフォルダが存在しない場合は、エラーが発生します。


GetParentFolderName メソッド

機能

指定されたパスの最後の構成要素の親フォルダの名前が入った文字列を返します。

構文

object.GetParentFolderName(path)

GetParentFolderNameメソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
Path	必ず指定します。親フォルダの名前を取得する構成要素のパスを指定します。
解説

引数 path に指定した構成要素に親フォルダがない場合は、長さ 0 の文字列 ("") が返されます。

メモ   GetParentFolderNameメソッドは、引数 path で指定された文字列に対してしか処理を行いません。指定されたパスを解決したり、指定されたパスが実際に存在するかは確認しません。


GetSpecialFolder メソッド

機能

指定された特別なフォルダを返します。

構文

object.GetSpecialFolder(folderspec)

GetSpecialFolder メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
Object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
Folderspec	必ず指定します。取得する特別なフォルダの種類を指定します。設定する値については、次の「設定値」を参照してください。
設定値

引数 folderspec には、次に示す値を指定できます。

定数	値	説明
WindowsFolder	0	Windows オペレーティング システムによりセットアップされたファイルの置かれている Windows フォルダが返されます。
SystemFolder	1	ライブラリ、フォント、デバイス ドライバなどの置かれている System フォルダが返されます。
TemporaryFolder	2	一時ファイルの格納に使用される Temp フォルダが返されます。このパスは、環境変数 TMP より取得します。


GetTempName メソッド

機能

一時ファイルまたは一時フォルダの名前をランダムに生成し、それを返します。このメソッドは、一時ファイルや一時フォルダを必要とする処理を行うときに便利です。

構文

object.GetTempName

object には、FileSystemObject オブジェクトの名前を指定します。省略することも可能です。

解説

GetTempName メソッドは、ファイルを作成するわけではありません。CreateTextFile を使ってファイルを作成する際に使用できる一時ファイル名を返すだけです。


Items メソッド

機能

Dictionary オブジェクトのすべての項目に含まれる配列を返します。

構文

object.Items

object には、Dictionary オブジェクトの名前を指定する必要があります。

解説

次のコードは、Items メソッドの使用例です。

Dim a, d, i             '複数の変数を作成します。

0	Set d = CreateObject("Scripting.Dictionary")

1	d.Add "a", "Athens"     '複数のキーと項目を追加します。

2	d.Add "b", "Belgrade"

3	d.Add "c", "Cairo"

4	a = d.Items             '項目を取得します。

5	For i = 0 To d.Count -1 '配列を繰り返します。

6	    Print a(i)          '項目を印刷します。

7	Next

8	...


Keys メソッド

機能

Dictionary オブジェクトにあるすべてのキーに含まれる配列を返します。

構文

object.Keys

object には、Dictionary オブジェクトの名前を指定します。

解説

次のコードは、Keys メソッドの使用例です。

Dim a, d, i             '複数の変数を作成します。

0	Set d = CreateObject("Scripting.Dictionary")

1	d.Add "a", "Athens"     '複数のキーと項目を追加します。

2	d.Add "b", "Belgrade"

3	d.Add "c", "Cairo"

4	a = d.keys              'キーを取得します。

5	For i = 0 To d.Count -1 '配列を繰り返します。

6	    Print a(i)          'キーを印刷します。

7	Next

8	...


Move メソッド

機能

指定されたファイルまたはフォルダを別の場所へ移動します。

構文

object.Move destination

Move メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
Object	必ず指定します。File オブジェクトまたは Folder オブジェクトの名前を指定します。
destination	必ず指定します。ファイルまたはフォルダの移動先を指定します。ワイルドカード文字は指定できません。
解説

File オブジェクトまたは Folder オブジェクトに対して実行した Move メソッドの結果は、FileSystemObject.MoveFile または FileSystemObject.MoveFolder を使って行った処理とまったく同じです。ただし、これらの代替メソッドを使った場合は、複数のファイルやフォルダをコピーすることもできます。


MoveFile メソッド

機能

ファイルを別の場所へ移動します。

構文

object.MoveFile source, destination

MoveFile メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
source	必ず指定します。移動するファイルを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。
destination	必ず指定します。引数 source で指定したファイルの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。
解説

引数 source にワイルドカード文字を指定した場合、および引数 destination がパスの区切り文字 (\) で終わる場合は、引数 destination に既存フォルダが指定されたとし、条件に一致するファイルがそのフォルダ内へ移動されます。それ以外の場合は、引数 destination に作成するファイルの名前が指定されたとします。いずれの場合も、ファイルの移動で実行される可能性のある処理は 3 種類あります。

•	引数 destination に指定したファイルが存在しない場合、引数 source に指定したファイルが移動します。これが通常の場合です。

•	引数 destination に指定したファイルが既に存在する場合、エラーが発生します。

•	引数 destination に指定したディレクトリが存在する場合、エラーが発生します。

引数 source でワイルドカード文字を使って指定したファイルが、どのファイルと一致しなかった場合も、エラーが発生します。MoveFile メソッドは、最初のエラーが発生した時点で処理を中止します。エラーが発生するまでに行った処理を取り消したり元に戻したりする処理は一切行われません。

重要   このメソッドを使ってボリューム間でファイルを移動できるのは、オペレーティング システムでボリューム間のファイル移動がサポートされている場合だけです。


MoveFolder メソッド

機能

フォルダを別の場所へ移動します。

構文

object.MoveFolder source, destination

MoveFolder メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
Object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
source	必ず指定します。移動するフォルダを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。
destination	必ず指定します。引数 source で指定したフォルダの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。
解説

引数 source にワイルドカード文字を指定した場合、および引数 destination がパスの区切り文字 (\) で終わる場合は、引数 destination に既存フォルダが指定されたとし、条件に一致するフォルダおよびサブフォルダがそのフォルダ内へ移動されます。それ以外の場合では、引数 destination に作成するフォルダの名前が指定されたとします。いずれの場合でも、フォルダの移動で実行される可能性のある処理は 3 種類あります。

•	引数 destination に指定したフォルダが存在しない場合、引数 source に指定したフォルダが移動されます。これが通常の場合です。

•	引数 destination にフォルダではなくファイルの場合、エラーが発生します。

•	引数 destination に指定したディレクトリが存在する場合、エラーが発生します。

引数 source でワイルドカード文字を使って指定したフォルダが、どのフォルダとも一致しなかった場合も、エラーが発生します。MoveFolder メソッドは、最初のエラーが発生した時点で処理を中止します。エラーが発生するまでに行った処理を取り消したり元に戻したりする処理は一切行われません。

重要   このメソッドを使ってボリューム間でフォルダを移動できるのは、オペレーティング システムでボリューム間のフォルダ移動がサポートされている場合だけです。


OpenAsTextStream メソッド

機能

指定されたファイルを開き、開いたファイルの読み取り、書き込み、または追加書き込みに使用できる TextStream オブジェクトを返します。

構文

object.OpenAsTextStream([iomode, [format]])

OpenAsTextStream メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。File オブジェクトの名前を指定します。
iomode	省略可能です。入出力モードを指定します。設定する値については、次の「設定値」を参照してください。
format	省略可能です。開くファイルの形式を指定します。設定する値については、次の「設定値」を参照してください。省略すると、ファイルは ASCII ファイルとして開かれます。
設定値

引数 iomode の設定値は次のとおりです。

定数	値	説明
ForReading	1	ファイルを読み取り専用として開きます。このファイルには一切書き込みできません。
ForWriting	2	ファイルを書き込み用に開きます。同じ名前のファイルが存在した場合、以前の内容は上書きされます。
ForAppending	8	ファイルを開き、ファイルの最後から書き込みを行います。
引数 format の設定値は次のとおりです。

定数	値	説明
TristateUseDefault	-2	システム デフォルトを使ってファイルを開きます。
TristateTrue	-1	ファイルを Unicode ファイルとして開きます。
TristateFalse	0	ファイルを ASCII ファイルとして開きます。
解説

OpenAsTextStream メソッドは、FileSystemObject の OpenTextFile メソッドと同じ機能を提供しますが、OpenTextFile メソッドと違って、ファイルへの追加モードではない書き込みにも使用できます。

次のコードは、OpenAsTextStream メソッドの使用例です。

Sub TextStreamTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 3

    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0

    Dim fs, f, ts, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    fs.CreateTextFile "test1.txt"            'ファイルの作成

    Set f = fs.GetFile("test1.txt")

    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)

    ts.Write "Hello World"

    ts.Close

    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)

    s = ts.ReadLine

    MsgBox s

    ts.Close

End Sub


OpenTextFile メソッド

機能

指定されたファイルを開き、ファイルを読み込んだり、文字列を追加するときに使用する TextStream オブジェクトを返します。

構文

object.OpenTextFile(filename[, iomode[, create[, format]]])

OpenTextFile メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。FileSystemObject オブジェクトの名前を指定します。
filename	必ず指定します。開くファイルを示す文字列式を指定します。
iomode	省略可能です。読み込み、または書き込みのいずれのためにファイルを開くのかを示す、ForReading または ForAppending のいずれかの定数を指定します。
create	省略可能です。引数 filename で指定されたファイルが存在しない場合に新しいファイルを作成するかどうかを示すブール値を指定します。新しいファイルを作成する場合は、真 (True) を指定し、作成しない場合は、偽 (False) を指定します。省略すると、新しいファイルは作成されません。
format	省略可能です。開くファイルの形式を示す値を指定します。省略すると、ASCII ファイルとして開かれます。
設定値

引数 iomode の設定値は次のとおりです。

定数	値	説明
ForReading	1	読み取り専用でファイルを開きます。このファイルに書き込むことはできません。
ForAppending	8	ファイルを開き、ファイルの末尾から書き込みます。
引数 format の設定値は次のとおりです。

定数	値	説明
TristateUseDefault	-2	システムの既定値を使ってファイルを開きます。
TristateTrue	-1	Unicode としてファイルを開きます。
TristateFalse	0	ASCII ファイルとしてファイルを開きます。
解説

次の例は、OpenTextFile メソッドを使用して、ファイルを開いたり、文字列を追加するコードです。

Sub OpenTextFileTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 3

    Dim fs, f

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.OpenTextFile("c:\testfile.txt", ForAppending,TristateFalse)

    f.Write "Hello world!"

    f.Close

End Sub


Read メソッド

機能

TextStream ファイルから指定された文字数を読み込み、その結果の文字列を返します。

構文

object.Read(characters)

Read メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。TextStream オブジェクトの名前を指定します。
characters	必ず指定します。ファイルから読み込む文字数を指定します。


ReadAll メソッド

機能

TextStream ファイル全体を読み込み、その結果の文字列を返します。

構文

object.ReadAll

object には、TextStream オブジェクトの名前を指定します。

解説

大きいファイルの場合は、ReadAll メソッドを使用すると、メモリ リソースの消費量が増大します。このようなファイルを入力するときは、一行ずつファイルを読み込むなどの工夫を行うとよいでしょう。


ReadLine メソッド

機能

TextStream ファイルから 1 行 (改行文字を除く) を読み込み、その結果の文字列を返します。

構文

object.ReadLine

object には、TextStream オブジェクトの名前を指定します。


Remove メソッド

機能

Dictionary オブジェクトからキーと項目の組みを削除します。

構文

object.Remove(key)

Remove メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。Dictionary オブジェクトの名前を指定します。
key	必ず指定します。Dictionary オブジェクトから削除するキーと項目の組みと関連付けられた引数 Key を指定します。
解説

指定されたキーと項目の組みが存在していない場合は、エラーとなります。

次のコードは、Remove メソッドの使用例です。

Dim a, d, i             '複数の変数を作成します。

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"     '複数のキーと項目を追加します。

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

...

a = d.Remove()          ' 2 番目の組みを削除します。


RemoveAll メソッド

機能

Dictionary オブジェクトからすべてのキーと項目を削除します。

構文

object.RemoveAll

object には、Dictionary オブジェクトの名前を指定します。

解説

The following code illustrates use of the RemoveAll method:

Dim a, d, i             '複数の変数を作成します。

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"     '複数のキーと項目を追加します。

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

...

a = d.RemoveAll         'Dictionary オブジェクトをクリアします。


Skip メソッド

機能

TextStream ファイルを読み込むときに指定された数の文字をスキップします。

構文

object.Skip(characters)

Skip メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。TextStream オブジェクトの名前を指定します。
characters	必ず指定します。ファイルを読み込むときにスキップさせる文字数を指定します。
解説

スキップされた文字列は切り捨てられます。


SkipLine メソッド

機能

TextStream ファイルを読み込むときに次の行をスキップします。

構文

object.SkipLine

object には、TextStream オブジェクトの名前を指定します。

解説

行のスキップとは、改行までの一行に含まれるすべての文字列 (改行文字を含む) を読み込んだり、切り捨てることを指します。

開かれていないファイルに対して読み込みを行うと、エラーになります。


Write メソッド

機能

TextStream ファイルに指定された文字列を書き込みます。

構文

object.Write(string)

Write メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
Object	必ず指定します。TextStream オブジェクトの名前を指定します。
string	必ず指定します。ファイルに書き込む文字列を指定します。
解説

各文字列間にスペースや文字を入れずに指定された文字列がファイルに書き込まれます。WriteLine メソッドを使うと、改行文字または末尾に改行文字が付いた文字列が書き込まれます。


WriteBlankLines メソッド

機能

TextStream ファイルに指定された数の改行文字を書き込みます。

構文

object.WriteBlankLines(lines)

WriteBlankLines メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
object	必ず指定します。TextStream オブジェクトの名前を指定します。
lines	必ず指定します。ファイルに書き込む改行文字の数を指定します。


WriteLine メソッド

機能

TextStream ファイルに指定された文字列と改行文字を書き込みます。

構文

object.WriteLine([string])

WriteLine メソッドの構文は、次の指定項目から構成されます。

指定項目	説明
Object	必ず指定します。TextStream オブジェクトの名前を指定します。
string	省略可能です。ファイルに書き込む文字列を指定します。省略すると、改行文字がファイルに書き込まれます。


Dictionary オブジェクト

機能

データ キーと組みとなる項目を格納するオブジェクトです。

構文

Scripting.Dictionary

解説

Dictionary オブジェクトは、PERL の関連配列と同等です。任意の型のデータにできる項目は、配列に格納されます。項目は、重複しないキーで関連付けられます。キーは各項目を取得するのに使用され、通常、整数型か文字列型ですが、配列にはできません。

Dictionary オブジェクトの作成方法を次に示します。

Dim d                   '変数を宣言します。

Set d = CreateObject(Scripting.Dictionary)

d.Add "a", "Athens"     'キーと項目を追加します。

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

...


Drive オブジェクト

機能

ディスク ドライブまたはネットワーク共有の各種プロパティへアクセスする手段を提供します。

解説

次のコードは、Drive オブジェクトを使ってドライブのプロパティにアクセスする例です。

Sub ShowFreeSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "ドライブ " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "空き容量: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " Kbytes"

    MsgBox s

End Sub


Drives コレクション

機能

利用可能なすべてのドライブのコレクションです。このコレクションは、メンバの取得のみ可能です。

解説

リムーバブル メディアは、ドライブにメディアがセットされていなくても Drives コレクションに追加されます。

次のコードは、Drives コレクションを取得し、For Each...Next ステートメントを使ってコレクションに繰り返し処理を行う例です。

Sub ShowDriveList

    Dim fs, d, dc, s, n

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dc = fs.Drives

    For Each d in dc

        s = s & d.DriveLetter & " - "

        If d.DriveType = Remote Then

            n = d.ShareName

        Else

            n = d.VolumeName

        End If

        s = s & n & vbCrLf

    Next

    MsgBox s

End Sub


File オブジェクト

機能

ファイルのあらゆるプロパティにアクセスする手段を提供します。

解説

次のコードは、File オブジェクトを取得し、そのプロパティの 1 つを表示する例です。

Sub ShowFileInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.DateCreated

    MsgBox s

End Sub


Files コレクション

機能

フォルダ内のすべての File オブジェクトのコレクションです。

解説

次のコードは、Folders コレクションを取得し、For Each...Next ステートメントを使ってコレクションに繰り返し処理を行う例です。

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.Files

    For Each f1 in fc

        s = s & f1.name

        s = s & vbCrLf

    Next

    MsgBox s

End Sub


FileSystemObject オブジェクト

機能

コンピュータのファイル システムへのアクセスを提供します。

構文

Scripting.FileSystemObject

解説

次のコードは、FileSystemObject オブジェクトを使用して、読み書きできる TextStream オブジェクトを返す例です。

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.CreateTextFile("c:\testfile.txt", True)

a.WriteLine("This is a test.")

a.Close

上記のコード例では、CreateObject 関数で FileSystemObject オブジェクト (fs) を返します。次に、CreateTextFile メソッドでファイルを TextStream オブジェクト (a) として作成し、WriteLine メソッドで 1 行の文字列を作成されたテキスト ファイルに書き込んでいます。Close メソッドでバッファをフラッシュし、ファイルを閉じます。


Folder オブジェクト

機能

フォルダのあらゆるプロパティにアクセスする手段を提供します。

解説

次のコードは、Folder オブジェクトを取得し、そのプロパティの 1 つを表示する例です。

Sub ShowFolderInfo(folderspec)

    Dim fs, f, s,

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    s = f.DateCreated

    MsgBox s

End Sub


Folders コレクション

機能

1 つの Folder オブジェクトに含まれるすべての Folder オブジェクトのコレクションです。

解説

次のコードは、Folders コレクションを取得し、For Each...Next ステートメントを使ってコレクションに繰り返し処理を行う例です。

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.SubFolders

    For Each f1 in fc

        s = s & f1.name

        s = s &  vbCrLf

    Next

    MsgBox s

End Sub


TextStream オブジェクト

機能

ファイルへのシーケンシャル アクセスを行うオブジェクトです。

構文

TextStream.{property | method}

引数 property と引数 method には、TextStream オブジェクトに関連付けられている任意のプロパティとメソッドを指定します。実際の TextStream オブジェクトの使用は、FileSystemObject で返される TextStream オブジェクトを表す変数プレースホルダに置き換えられます。

解説

次のコードで、オブジェクト変数 a は FileSystemObject の CreateTextFile メソッドで返された TextStream オブジェクトです。

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.CreateTextFile("c:\testfile.txt", True)

a.WriteLine("This is a test.")

a.Close

WriteLine と Close は、TextStream オブジェクトのメソッドです。


= (代入) 演算子

機能

変数またはプロパティに値を代入します。

構文

variable = value

代入演算子の構文は以下の指定項目から構成されます。

指定項目	内容
variable	任意の変数、または値の設定が可能な任意のプロパティ。
value	任意の数値、文字列、定数または数式。
解説

等号の左側には、スカラ変数や配列の要素なども指定できます。また、等号の左側にプロパティを指定する場合は、実行時に値の設定が可能なプロパティを指定してください。


AtEndOfLine プロパティ

機能

TextStream ファイルの中で、ファイル ポインタがファイルの末尾 (EOL) の直前にある場合は、真 (True) を返します。それ以外の場合は、偽 (False) を返します。値の取得のみ可能です。

構文

object.AtEndOfLine

object には、TextStream オブジェクトの名前を指定します。

解説

AtEndOfLine プロパティは、読み取り専用で開かれた TextStream ファイルのみに適用されます。他のファイルの場合は、エラーとなります。

次のコードは、AtEndOfLine プロパティの使用例です。

Dim fs, a, retstring

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.OpenTextFile("c:\testfile.txt", ForReading, False)

Do While a.AtEndOfLine <> True

    retstring = a.Read(1)

    ...

Loop

a.Close


AtEndOfStream プロパティ

機能

ファイルのポインタが TextStream ファイルの末尾の位置にある場合は、真 (True) を返します。それ以外の場合は、偽 (False) を返します。値の取得のみ可能です。

構文

object.AtEndOfStream

object には、TextStream オブジェクトの名前を指定します。

解説

AtEndOfStream プロパティは、読み取り専用で開かれた TextStream ファイルのみに適用されます。他のファイルの場合は、エラーとなります。

次のコードは、AtEndOfStream プロパティの使用例です。

Dim fs, a, retstring

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.OpenTextFile("c:\testfile.txt", ForReading, False)

Do While a.AtEndOfStream <> True

    retstring = a.ReadLine

    ...

Loop

a.Close


Attributes プロパティ

機能

ファイルまたはフォルダの属性を設定します。値の取得も可能です。属性によっては、値の取得のみ可能な場合もあります。

構文

object.Attributes [= newattributes]

Attributes プロパティの構文は、次の指定項目から構成されます。

指定項目	内容
Object	必ず指定します。File オブジェクトまたは Folder オブジェクトの名前を指定します。
newattributes	省略可能です。object に指定したファイルまたはフォルダに与える新しい属性値を指定します。
設定値

引数 newattributes には、次に示す定数の値または複数に組み合わせた定数の値の和を指定できます。

定数	値	内容
Normal	0	標準ファイル。どの属性も設定されません。
ReadOnly	1	読み取り専用ファイル。この属性は、値の取得も設定も可能です。
Hidden	2	隠しファイル。この属性は、値の取得も設定も可能です。
System	4	システム ファイル。この属性は、値の取得も設定も可能です。
Volume	8	ディスク ドライブ ボリューム ラベル。この属性は、値の取得のみ可能です。
Directory	16	フォルダまたはディレクトリ。この属性は、値の取得のみ可能です。
Archive	32	ファイルが前回のバックアップ以降に変更されているかどうか。この属性は、値の取得も設定も可能です。
Alias	64	リンクまたはショートカット。この属性は、値の取得のみ可能です。
Compressed	128	圧縮ファイル。この属性は、値の取得のみ可能です。
解説

次のコードは、ファイルでの Attributes プロパティの使用例です。

Sub SetClearArchiveBit(filespec)

    Dim fs, f, r

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(fs.GetFileName(filespec))

    If f.attributes and 32 Then

        r = MsgBox("アーカイブ ビットはオンになっています。オフにしますか？", vbYesNo, "アーカイブ ビットの設定/解除")

        If r = vbYes Then

            f.attributes = f.attributes - 32

            MsgBox "アーカイブ ビットをオフにしました。"

        Else

            MsgBox "アーカイブ ビットはオンのままです。"

        End If

    Else

        r = MsgBox("アーカイブ ビットはオフになっています。オンにしますか？", vbYesNo, "アーカイブ ビットの設定/解除")

        If r = vbYes Then

            f.attributes = f.attributes + 32

            MsgBox "アーカイブ ビットをオンにしました。"

        Else

            MsgBox "アーカイブ ビットはオフのままです。"

        End If

    End If

End Sub


AvailableSpace プロパティ

機能

指定されたドライブまたはネットワーク共有でユーザーが使用できるディスク容量を返します。

構文

object.AvailableSpace

object には、Drive オブジェクトの名前を指定します。

解説

通常は、AvailableSpace プロパティの戻り値は FreeSpace プロパティの戻り値と同じです。この 2 つの値が異なる可能性があるのは、コンピュータ システムがディスク クォータ機能をサポートしている場合だけです。

次のコードは、AvailableSpace プロパティの使用例です。

Sub ShowAvailableSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Drive " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "使用可能な容量: " & FormatNumber(d.AvailableSpace/1024, 0)

    s = s & " KB"

    MsgBox s

End Sub


Column プロパティ

機能

TextStream ファイルの現在の行のカラム位置 (行頭からの文字数) を返します。値の取得のみ可能です。

構文

object.Column

object には、TextStream オブジェクトの名前を指定します。

解説

改行文字が書き込まれた後で、他の文字が書き込まれる前であれば、Column プロパティの値は 1 になります。


CompareMode プロパティ

機能

Dictionary オブジェクトに文字列比較キーの比較モードを設定します。値の取得も可能です。

構文

object.CompareMode[ = compare]

CompareMode プロパティの構文は、次の指定項目から構成されます。

指定項目	内容
object	必ず指定します。Dictionary オブジェクトの名前を指定します。
compare	省略可能です。StrComp 関数などの関数を使って、比較モードを表す値を指定します。
設定値

引数 compare には、次に示す定数の値を指定できます。

定数	値	内容
vbUseCompareOption	-1	Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare	0	バイナリ モードで比較を行います。
vbTextCompare	1	テキスト モードで比較を行います。
vbDatabaseCompare	2	Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較を行います。
解説

既にデータが含まれている Dictionary オブジェクトの比較モードを変更しようとすると、エラーが発生します。

CompareMode プロパティには、StrComp 関数の引数 compare の値と同じ値が使われます。2 より大きな値は、国別情報 (LCID) を使って比較を行うときに使われます。


Count プロパティ

機能

Dictionary オブジェクトに含まれる項目の数を返します。値の取得のみ可能です。

構文

object.Count

object には、対象のオブジェクトの名前を指定します。

解説

次のコードは、Count プロパティの使用例です。

Dim a, d, i             '複数の変数を作成します。

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"     '複数のキーと項目を追加します。

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

a = d.Keys              'キーを取得します。

For i = 0 To d.Count -1 '配列を繰り返します。

    Print a(i)          'キーを印刷します。

Next

...


DateCreated プロパティ

機能

指定されたファイルまたはフォルダが作成された日付と時刻を返します。値の取得のみ可能です。

構文

object.DateCreated

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、ファイルでの DateCreated プロパティの使用例です。

Sub ShowFileInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "Created: " & f.DateCreated

    MsgBox s

End Sub


DateLastAccessed プロパティ

機能

指定されたファイルまたはフォルダが最後にアクセスされたときの日付と時刻を返します。値の取得のみ可能です。

構文

object.DateLastAccessed

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、ファイルでの DateLastAccessed プロパティの使用例です。

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(filespec) & vbCrLf

    s = s & "Created: " & f.DateCreated & vbCrLf

    s = s & "最終アクセス日時: " & f.DateLastAccessed & vbCrLf

    s = s & "最終変更日時: " & f.DateLastModified

    MsgBox s, 0, "ファイル アクセス情報"

End Sub

重要   このメソッドの動作は、使用しているオペレーティング システムに依存します。オペレーティング システムがこの時刻情報の提供をサポートしていない場合は、何も返されません。


DateLastModified プロパティ

機能

指定されたファイルまたはフォルダが最後に更新されたときの日付と時刻を返します。値の取得のみ可能です。

構文

object.DateLastModified

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、ファイルでの DateLastModified プロパティの使用例です。

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(filespec) & vbCrLf

    s = s & "作成日時: " & f.DateCreated & vbCrLf

    s = s & "最終アクセス日時: " & f.DateLastAccessed & vbCrLf

    s = s & "最終更新日時: " & f.DateLastModified

    MsgBox s, 0, "ファイル アクセス情報"

End Sub


Drive プロパティ

機能

指定されたファイルまたはフォルダが格納されているドライブの名前を返します。値の取得のみ可能です。

構文

object.Drive

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、Drive プロパティの使用例です。

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.Name & " は、ドライブ " & UCase(f.Drive) & " 上に置かれています。" & vbCrLf

    s = s & "作成日時: " & f.DateCreated & vbCrLf

    s = s & "最終アクセス日時: " & f.DateLastAccessed & vbCrLf

    s = s & "最終更新日時: " & f.DateLastModified

    MsgBox s, 0, "ファイル アクセス情報"

End Sub


DriveLetter プロパティ

機能

物理ローカル ドライブまたはネットワーク共有のドライブ名を返します。値の取得のみ可能です。

構文

object.DriveLetter

object には、Drive オブジェクトの名前を指定します。

解説

指定したドライブにドライブ名が関連付けられていなかった場合は、長さ 0 の文字列 ("") が返されます。たとえば、ドライブ名の割り当てられていないネットワーク共有などがこれに該当します。

次のコードは、DriveLetter プロパティの使用例です。

Sub ShowDriveLetter(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "ドライブ " & d.DriveLetter & ": - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "空き容量: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " KB"

    MsgBox s

End Sub


Drives プロパティ

機能

ローカル マシンで利用できるすべての Drive オブジェクトが入った Drives コレクションを返します。

構文

object.Drives

The object is always a FileSystemObject.

解説

object には、FileSystemObject オブジェクトの名前を指定します。

リムーバブル メディア ドライブは、ドライブにメディアが挿入されていなくても Drives コレクションに追加されます。For Each...Next ステートメントを使うと、Drives コレクションの各メンバに繰り返し処理を行うことができます。次のコードは、これを行う例です

Sub ShowDriveList

    Dim fs, d, dc, s, n

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dc = fs.Drives

    For Each d in dc

        s = s & d.DriveLetter & " - "

        If d.DriveType = 3 Then

            n = d.ShareName

        Else

            n = d.VolumeName

        End If

        s = s & n & vbCrLf

    Next

    MsgBox s

End Sub


DriveType プロパティ

機能

指定されたドライブの種類を示す値を返します。

構文

object.DriveType

object には、Drive オブジェクトの名前を指定します。

解説

次のコードは、DriveType プロパティの使用例です。

Sub ShowDriveType(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(drvpath)

    Select Case d.DriveType

        Case 0: t = "不明"

        Case 1: t = "リムーバブル ディスク"

        Case 2: t = "ハード ディスク"

        Case 3: t = "ネットワーク ドライブ"

        Case 4: t = "CD-ROM"

        Case 5: t = "RAM ディスク"

    End Select

    s = "ドライブ " & d.DriveLetter & ": - " & t

    MsgBox s

End Sub


Files プロパティ

機能

指定されたフォルダ内に置かれているすべての File オブジェクトの入った Files コレクションを返します。このコレクションには、隠しファイルやシステム ファイルの属性を持つ File オブジェクトも含まれます。

構文

object.Files

object には、Folder オブジェクトの名前を指定します。

解説

次のコードは、Files プロパティの使用例です。

Sub ShowFileList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.Files

    For Each f1 in fc

        s = s & f1.name

        s = s &  vbCrLf

    Next

    MsgBox s

End Sub


FileSystem プロパティ

機能

指定されたドライブが使用しているファイル システムの種類を返します。

構文

object.FileSystem

object には、Drive オブジェクトの名前を指定します。

解説

返される可能性のある種類には、FAT、NTFS、CDFS があります。

次のコードは、FileSystem プロパティの使用例です。

Sub ShowFileSystemType

    Dim fs,d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive("e:")

    s = d.FileSystem

    MsgBox s

End Sub


FreeSpace プロパティ

機能

指定されたドライブまたはネットワーク共有でユーザーが使用できるディスク空き容量を返します。値の取得のみ可能です。

構文

object.FreeSpace

object には、Drive オブジェクトの名前を指定します。

解説

通常は、FreeSpace プロパティの戻り値は AvailableSpace プロパティの戻り値と同じです。この 2 つの値が異なる可能性があるのは、コンピュータ システムがディスク クォータ機能をサポートしている場合だけです。

次のコードは、FreeSpace プロパティの使用例です。

Sub ShowFreeSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Drive " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "空き容量: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " KB"

    MsgBox s

End Sub


IsReady プロパティ

機能

指定されたドライブの準備ができている場合は真 (True) を返します。準備ができれいなければ偽 (False) を返します。

構文

object.IsReady

object には、Drive オブジェクトの名前を指定します。

解説

リムーバブル ディスク ドライブおよび CD-ROM ドライブの場合は、ドライブにメディアがセットされており、アクセスできる状態にある場合にだけ真 (True) が返されます。

次のコードは、IsReady プロパティの使用例です。

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(drvpath)

    Select Case d.DriveType

        Case 0: t = "不明"

        Case 1: t = "リムーバブル ディスク"

        Case 2: t = "ハード ディスク"

        Case 3: t = "ネットワーク ドライブ"

        Case 4: t = "CD-ROM"

        Case 5: t = "RAM ディスク"

    End Select

    s = "ドライブ " & d.DriveLetter & ": - " & t

    If d.IsReady Then

        s = s & vbCrLf & "ドライブの準備ができています。"

    Else

        s = s & vbCrLf & "ドライブの準備ができていません。"

    End If

    MsgBox s

End Sub


IsRootFolder プロパティ

機能

指定されたフォルダがルート フォルダの場合は、真 (True) を返します。ルート フォルダでなければ、偽 (False) を返します。

構文

object.IsRootFolder

object には、Folder オブジェクトの名前を指定します。

解説

次のコードは、IsRootFolder プロパティの使用例です。

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

Sub DisplayLevelDepth(pathspec)

    Dim f, n

    Set f = fs.GetFolder(pathspec)

    If f.IsRootFolder Then

        MsgBox "指定したフォルダはルート フォルダです。"

    Else

        Do Until f.IsRootFolder

            Set f = f.ParentFolder

            n = n + 1

        Loop

        MsgBox "指定したフォルダは、第" & n & " レベルまでネストされています。"

    End If

End Sub


Item プロパティ

機能

Dictionary オブジェクトにある指定されたキーと関連付ける項目を設定します。コレクションの場合、指定されたキーを基に項目を返します。値の取得も可能です。

構文

object.Item(key) [= newitem]

Item プロパティの構文は、次の指定項目から構成されます。

指定項目	内容
Object	必ず指定します。Dictionary オブジェクトの名前を指定します。
Key	必ず指定します。取得または追加する項目と関連付けるキーを指定します。
Newitem	省略可能です。引数 key で指定した値と関連付ける新しい項目を指定します。
解説

項目を変更するときに引数 key の値が見つからない場合は、引数 newitem で指定された項目と関連付けられた新しいキーが作成されます。既にある項目を取得しようとするときに引数 key の値が見つからない場合は、新しいキーが作成され、関連付けられる項目は空の状態になります。


Key プロパティ

機能

Dictionary オブジェクトにキーを設定します。値の取得も可能です。

構文

object.Key(key) = newkey

Key プロパティの構文は、次の指定項目から構成されます。

指定項目	内容
object	必ず指定します。Dictionary オブジェクトの名前を指定します。
key	必ず指定します。変更するキーを指定します。
newkey	必ず指定します。引数 key で指定した値と置き換える新しいキーを指定します。
解説

キーを変更するときに引数 key の値が見つからない場合は、実行時エラーが発生します。


Line プロパティ

機能

TextStream ファイルの現在のファイル ポインタの位置を行番号で返します。値の取得のみ可能です。

構文

object.Line

object には、TextStream オブジェクトの名前を指定します。

解説

新規にファイルが開かれた後で、文字が書き込まれる前であれば、Line プロパティの値は 1 になります。


Name プロパティ

機能

指定されたファイルまたはフォルダの名前を設定します。値の取得も可能です。

構文

object.Name [= newname]

Name プロパティの構文は、次の指定項目から構成されます。

指定項目	内容
object	必ず指定します。File オブジェクトまたは Folder オブジェクトの名前を指定します。
newname	省略可能です。object に指定したファイルまたはフォルダに与える新しい名前を指定します。
解説

次のコードは、Name プロパティの使用例です。

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.Name & " は、ドライブ " & UCase(f.Drive) & "上に置かれています。" & vbCrLf

    s = s & "作成日時: " & f.DateCreated & vbCrLf

    s = s & "最終アクセス日時: " & f.DateLastAccessed & vbCrLf

    s = s & "最終更新日時: " & f.DateLastModified

    MsgBox s, 0, "ファイル アクセス情報"

End Sub


ParentFolder プロパティ

機能

指定されたファイルまたはフォルダが格納されているフォルダを表す Folder オブジェクトを返します。取得のみ可能です。

構文

object.ParentFolder

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、ファイルでの ParentFolder プロパティの使用例です。

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(f.Name) & " in " & UCase(f.ParentFolder) & vbCrLf

    s = s & "作成日時: " & f.DateCreated & vbCrLf

    s = s & "最終アクセス日時: " & f.DateLastAccessed & vbCrLf

    s = s & "最終更新日時: " & f.DateLastModified

    MsgBox s, 0, "ファイル アクセス情報"

End Sub


Path プロパティ

機能

指定されたファイル、フォルダ、またはドライブのパスを返します。

構文

object.Path

object には、File オブジェクト、Folder オブジェクト、または Drive オブジェクトの名前を指定します。

解説

ドライブ名の場合は、返される文字列にルート ディレクトリは含まれません。たとえば、C ドライブの場合なら、C:\ ではなく C: が返されます。

次のコードは、File オブジェクトでの Path プロパティの使用例です。

Sub ShowFileAccessInfo(filespec)

    Dim fs, d, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(f.Path) & vbCrLf

    s = s & "作成日時: " & f.DateCreated & vbCrLf

    s = s & "最終アクセス日時: " & f.DateLastAccessed & vbCrLf

    s = s & "最終更新日時: " & f.DateLastModified

    MsgBox s, 0, "ファイル アクセス情報"

End Sub


RootFolder プロパティ

機能

指定されたドライブのルート フォルダを表す Folder オブジェクトを返します。取得のみ可能です。

構文

object.RootFolder

object には、Drive オブジェクトの名前を指定します。

解説

返された Folder オブジェクトを使うと、ドライブ上に置かれているすべてのファイルおよびフォルダにアクセスできます。


SerialNumber プロパティ

機能

ディスク ボリュームを一意に識別するための十進数のシリアル番号を返します。

構文

object.SerialNumber

object には、Drive オブジェクトの名前を指定します。

解説

SerialNumber プロパティを使うと、リムーバブル メディアを使用している場合に、正しいディスクがドライブにセットされているかどうかを確認することができます。

次のコードは、SerialNumber プロパティの使用例です。

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    Select Case d.DriveType

        Case 0: t = "不明"

        Case 1: t = "リムーバブル ディスク"

        Case 2: t = "ハード ディスク"

        Case 3: t = "ネットワーク ドライブ"

        Case 4: t = "CD-ROM"

        Case 5: t = "RAM ディスク"

    End Select

    s = "ドライブ " & d.DriveLetter & ": - " & t

    s = s & vbCrLf & "SN: " & d.SerialNumber

    MsgBox s

End Sub


ShareName プロパティ

機能

指定されたドライブのネットワーク共有名を返します。

構文

object.ShareName

object には、Drive オブジェクトの名前を指定します。

解説

object にネットワーク ドライブでないドライブを指定すると、長さ 0 の文字列 ("") が返されます。

次のコードは、ShareName プロパティの使用例です。

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "ドライブ " & d.DriveLetter & ": - " & d.ShareName

    MsgBox s

End Sub


ShortName プロパティ

機能

以前の 8.3 名前付け規則に従った名前を必要とするプログラムで使用できる短い名前を返します。

構文

object.ShortName

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、File オブジェクトでの ShortName プロパティの使用例です。

Sub ShowShortName(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "" & "" & UCase(f.Name)

    s = s & "" & vbCrLf

    s = s & " の短い名前は " & "" & f.ShortName & " です。"& ""

    MsgBox s, 0, "短い名前"

End Sub


ShortPath プロパティ

機能

以前の 8.3 名前付け規則に従った名前を必要とするプログラムで使用できる短いパスを返します。

構文

object.ShortPath

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、File オブジェクトでの ShortPath プロパティの使用例です。

Sub ShowShortPath(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "The short path for " & "" & UCase(f.Name)

    s = s & "" & vbCrLf

    s = s & " の短いパス名は、" & "" & f.ShortPath & " です。" & ""

    MsgBox s, 0, "短いパス"

End Sub


Size プロパティ

機能

対象がファイルの場合、指定されたファイルのバイト単位のサイズを返します。対象がフォルダの場合、指定されたフォルダ内のすべてのファイルおよびフォルダの合計サイズをバイト単位で返します。

構文

object.Size

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、Folder オブジェクトでの Size プロパティの使用例です。

Sub ShowFolderSize(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(filespec)

    s = UCase(f.Name) & " は、" & f.size & " バイト使用しています。"

    MsgBox s, 0, "フォルダのサイズ"

End Sub


SubFolders プロパティ

機能

指定されたフォルダ内に置かれているすべてのフォルダの入った Folders コレクションを返します。このコレクションには、隠しファイルやシステム ファイルの属性を持つフォルダも含まれます。

構文

object.SubFolders

object には、Folder オブジェクトの名前を指定します。

解説

次のコードは、SubFolders プロパティの使用例です。

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, s, sf

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set sf = f.SubFolders

    For Each f1 in sf

        s = s & f1.name

        s = s &  vbCrLf

    Next

    MsgBox s

End Sub


TotalSize プロパティ

機能

ドライブまたはネットワーク共有の総容量をバイト単位で返します。

構文

object.TotalSize

object には、Drive オブジェクトの名前を指定します。

解説

次のコードは、TotalSize プロパティの使用例です。

Sub ShowSpaceInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "ドライブ " & d.DriveLetter & ":"

    s = s & vbCrLf

    s = s & "合計サイズ: " & FormatNumber(d.TotalSize/1024, 0) & " KB"

    s = s & vbCrLf

    s = s & "使用可能な容量: " & FormatNumber(d.AvailableSpace/1024, 0) & " KB"

    MsgBox s

End Sub


Type プロパティ

機能

ファイルまたはフォルダの種類に関する情報を返します。たとえば、名前が .TXT で終わるファイルの場合なら、"Text Document" という文字列が返されます。

構文

object.Type

object には、File オブジェクトまたは Folder オブジェクトの名前を指定します。

解説

次のコードは、フォルダの種類を取得するための Type プロパティの使用例です。

Sub ShowFileSize(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(filespec)

    s = UCase(f.Name) & " は " & f.Type & " です。"

    MsgBox s, 0, "フォルダの種類"

End Sub


VolumeName プロパティ

機能

指定されたドライブのボリューム名を設定します。値の取得も可能です。

構文

object.VolumeName [= newname]

VolumeName プロパティの構文は、次の指定項目から構成されます。

指定項目	内容
object	必ず指定します。Drive オブジェクトの名前を指定します。
newname	省略可能です。object に指定したドライブの新しい名前を指定します。
解説

次のコードは、VolumeName プロパティの使用例です。

Sub ShowVolumeInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "ドライブ " & d.DriveLetter & ": - " & d.VolumeName

    MsgBox s

End Sub


選択内容があいまいです。

キーワードが選択されていないか、あるいは統合開発環境 (IDE) のコンポーネントについてのヘルプ トピックを表示しようとしました。キーワードを選択していた場合には、1 つのキーワードのみを指定するように、選択範囲を変更し直してください。IDE についての情報は、以下のトピックを参照してください。

コード ウィンドウまたはモジュール ウィンドウ

イミディエイト ウィンドウ

ローカル ウィンドウ

オブジェクト ブラウザ

ウォッチ ウィンドウ