絶え間ない
何度も繰り返される定数値を含むコードがよく見られます。また、コードに明確な意味のない覚えにくい数字が使用されている場合もあります。
このような場合、定数を使用すると、コードの可読性と保守性が大幅に向上します。定数は、決して変化しない数値や文字列を置き換える意味のある名前です。定数は変数に似ていますが、変数のように変更したり、新しい値を割り当てたりすることはできません。定数は 2 つのソースから取得されます。
1. 内部定数またはシステム定義の定数は、アプリケーションおよび制御によって提供されます。 Visual Basic 定数は、「オブジェクト ブラウザ」の Visual Basic (VB) および Visual Basic for Applications (VBA) オブジェクト ライブラリにリストされています。 Microsoft Excel や Microsoft P Project など、オブジェクト ライブラリを提供する他のアプリケーションでも、アプリケーションのオブジェクト、メソッド、プロパティで使用できる定数のリストが提供されます。定数は、各 ActiveX コントロールのオブジェクト ライブラリでも定義されます。オブジェクト ブラウザの使用方法の詳細については、第 9 章「オブジェクトを使用したプログラミング」を参照してください。
2. シンボリック定数またはユーザー定義定数は、Const ステートメントを使用して宣言されます。ユーザー定義定数については、次のセクション「独自の定数の作成」で説明します。
Visual Basic では、定数名は大文字と小文字が混合された形式であり、そのプレフィックスは定数が定義されているオブジェクト ライブラリの名前を示します。 Visual Basic および Visual Basic for Applications オブジェクト ライブラリの定数は、vbTilehorizontal など、vb で始まります。
プレフィックスを設計するときは、同じ名前で異なる値を持つ定数が存在しないように最善を尽くしてください。プレフィックスが使用されている場合でも、2 つのオブジェクト ライブラリには、異なる値を表す同じ定数が含まれている可能性があります。この場合、どの定数が参照されるかは、どのオブジェクトライブラリが優先されるかによって決まります。オブジェクト ライブラリの優先順位の変更については、「[参照]ダイアログ ボックス」を参照してください。
定数名の競合が発生しないようにするには、次の構文を使用して定数への参照を修飾できます。
[libname.][modulename.]constname
Libname は通常、コントロールまたはライブラリのクラス名です。 Modulename は、定数が定義されているモジュールの名前です。 Constname は定数名です。各要素はオブジェクト ライブラリで定義されており、オブジェクト ブラウザで表示できます。
独自の定数を作成する
定数を宣言するための構文は次のとおりです。
[パブリック|プライベート]定数定名[Astype]=式
パラメータ constantname は有効なシンボリック名であり (規則は変数名を確立する規則と同じです)、expression は数値定数または文字列定数と演算子で構成されますが、expression では関数呼び出しを使用できません。
Const ステートメントは数量、日付、時刻を表すことができます。
ConstconPi=3.14159265358979
PublicConstconMaxPlanetsAsInteger=9
ConstconReleaseDate=#1/1/95#
文字列定数は、Const ステートメントを使用して定義することもできます。
PublicConstconVersion=07.10.A
ConstconCodeName=エニグマ
カンマで区切れば、複数の定数宣言を 1 行に配置できます。
PublicConstconPi=3.14,conMaxPlanets=9,_
conWorldPop=6E 09
等号 (=) の右側の式は、多くの場合、数値またはリテラル文字列ですが、結果が数値または文字列になる式にすることもできます (ただし、式に関数呼び出しを含めることはできません)。以前に定義した定数を使用して新しい定数を定義することもできます。
ConstconPi2=conPi*2 定数を定義したら、それをコードに配置してコードを読みやすくすることができます。例えば:
StaticSolarSystem(1ToconMaxPlanets)
IfnumPeople>conWorldPopThenExitSub
ユーザー定義定数の範囲を設定する
変数宣言と同様に、Const ステートメントにはスコープがあり、同じルールが使用されます。
プロシージャ内にのみ存在する定数を作成するには、プロシージャ内で定数を宣言します。
モジュール内のすべてのプロシージャには有効だが、モジュール外のコードには無効な定数を作成するには、モジュールの宣言セクションで定数を宣言します。
アプリケーション全体で有効な定数を作成するには、標準モジュールの宣言セクションで宣言し、Const の前に Public キーワードを置きます。パブリック定数は、フォーム モジュールまたはクラス モジュール内で宣言できません。
スコープの詳細については、この章の前半の「変数のスコープについて」セクションを参照してください。
循環参照を避ける
定数は他の定数に関して定義できるため、3 つ以上の定数間で循環または循環参照が作成されないように注意する必要があります。プログラム内に 3 つ以上のパブリック定数があり、各パブリック定数が別の定数によって定義されている場合、ループが発生します。例えば:
'モジュール 1 で:
PublicConstconA=conB*2 'アプリケーション全体
' は ' で有効です。
'モジュール2:
PublicConstconB=conA/2 'アプリケーション全体
' は ' で有効です。
ループが発生すると、Visual Basic はアプリケーションを実行しようとするとエラー メッセージを生成します。循環参照を解決しないとプログラムを実行できません。循環を避けるために、パブリック定数を単一のモジュール、または最大でも数個のモジュールに制限することができます。
データ型
変数は値を保存するために使用される場所であり、名前とデータ型があります。変数のデータ型によって、それらの値を表すビットがコンピューターのメモリにどのように格納されるかが決まります。変数を宣言するときに、変数のデータ型を指定することもできます。すべての変数には、保存できるデータの種類を決定するデータ型があります。
デフォルトでは、宣言でデータ型が指定されていない場合、変数のデータ型は Variant です。 Variant データ型はカメレオンのようなもので、さまざまな場合に異なるデータ型を表すことができます。指定された変数がバリアント型変数の場合、データ型間の変換は必要ありません。Visual Basic は、必要なさまざまな変換を自動的に実行します。
ただし、変数には常に特定の型のデータが格納されることがわかっていて、その特定の型の変数を宣言すると、Visual Basic はこのデータをより効率的に処理します。たとえば、名前は常に文字で構成されるため、人の名前を格納する変数は String データ型として表すのが最適です。
変数に加えて、データ型は他の状況でも使用されます。プロパティに値を割り当てる場合、その値にはデータ型があり、関数のパラメータにもデータ型があります。実際、Visual Basic では、データに関連するものはすべてデータ型に関連しています。
任意のプリミティブ型の配列を宣言することもできます。
詳細詳細については、この章で後述する「配列」セクションを参照してください。第 15 章「パフォーマンスと互換性を考慮した設計」では、データ型の選択によるアプリケーションのパフォーマンスの向上についても説明します。
データ型を使用して変数を宣言する
非 Variant 変数を使用する前に、Private、Public、Dim、または Static ステートメントを使用して変数を Astype として宣言する必要があります。たとえば、次のステートメントは、それぞれ Integer、Double、String、および Currency 型の変数を宣言します。
PrivateIAsInteger
DimAmtAsDouble
StaticYourNameAsString
公共請求書支払い通貨
宣言ステートメントは複数の宣言を組み合わせることができます。次のステートメントを参照してください。
PrivateIAsInteger、AmtAsDouble
PrivateYourNameAsString、BillsPaidAsCurrency
プライベートテスト、量、JAsInteger
データ型が指定されていない場合、指定された変数はデフォルトの型であることに注意してください。上の例では、変数 Test と Amount は Variant データ型です。他のプログラミング言語を使用した経験から、同じ宣言ステートメント内のすべての変数が同じ指定されたデータ型 (この場合は整数) を持つと信じている場合、ここでの結果は新鮮かもしれません。
数値データ型
VisualBasic は、Integer (整数)、Long (長整数)、Single (単精度浮動小数点)、Double (倍精度浮動小数点)、および Currency (通貨) のいくつかの数値データ型をサポートします。一般に、数値型はバリアント型よりも占有する記憶領域が少なくなります。
変数が小数点付きの数値 (3.57 など) ではなく、常に整数 (12 など) を格納することがわかっている場合は、その変数を Integer 型または Long 型として宣言する必要があります。整数は他のデータ型よりも演算を高速に実行し、使用するメモリが少なくなります。整数型は、For...Next ループ内でカウンター変数として使用する場合に特に便利です。
制御構造の詳細については、この章で後述する「制御構造の概要」を参照してください。変数に小数が含まれる場合は、Single、Double、または Currency 変数として宣言できます。 Currency データ型は、小数点の右側に 4 桁、および小数点の左側に 15 桁をサポートしており、通貨の計算に適した正確な固定小数点データ型です。浮動小数点 (単精度および倍精度) 数値は通貨よりもはるかに広い有効範囲を持ちますが、小さなキャリー エラーが発生する可能性があります。
浮動小数点値は mmmEeee または mmmDeee として表すことができることに注意してください。ここで、mmm は仮数、eee は指数 (基数 10 の累乗) です。 Single データ型の正の最大値は 3.402823E 38、つまり 10 の 38 乗の 3.4 倍、Double データ型の正の最大値は 1.79769313486232D 308、つまり 10 の 308 乗の 1.8 倍です。 D を使用して数値リテラルの仮数部と指数部を区切ると、値は Double データ型として扱われます。同様に、このように E を使用すると、値は Single データ型として扱われます。
バイトデータ型
変数に 2 進数が含まれる場合は、バイト データ型の配列として宣言します (配列については、この章の後半の「配列」で説明します)。バイト変数にバイナリ データを格納すると、形式変換中にデータが保持されます。文字列変数が ANSI 形式と Unicode 形式の間で変換されると、変数内のバイナリ データはすべて破棄されます。 Visual Basic は、次のいずれかの状況で ANSI と Unicode の間で自動的に変換します。
ファイルを読み取るとき
ファイルを書き込むとき
DLLを呼び出す場合
オブジェクトのメソッドやプロパティを呼び出すとき
単項減算を除き、整数を操作できるすべての演算子はバイト データ型を操作できます。 Byte は 0 ~ 255 の符号なし型であるため、負の数を表すことはできません。したがって、単項減算を行う場合、VisualBasic はまず Byte を符号付き整数に変換します。
すべての数値変数は相互に割り当てたり、バリアント型変数に割り当てたりできます。浮動小数点数を整数に割り当てる前に、Visual Basic は浮動小数点数の小数部分を削除せずに四捨五入します。
詳細 Unicode と ANSI 変換の詳細については、第 16 章「国際化」を参照してください。
文字列データ型
変数に常に文字列が含まれ、数値が含まれない場合は、それを String 型として宣言できます。
プライベートSAsString
その後、この変数に文字列を代入し、文字列関数を使用して操作できます。
S=データベース
S=左(S,4)
デフォルトでは、文字列変数またはパラメータは可変長文字列です。新しいデータが文字列に割り当てられると、その長さは増減する可能性があります。文字列を固定長として宣言することもできます。固定長文字列は、次の構文で宣言できます。
文字列*サイズ
たとえば、50 文字の文字列を宣言するには、次のステートメントを使用します。
DimEmpNameAsString*50
文字列に 50 文字未満が割り当てられている場合、EmpName の欠落部分はスペースで埋められます。文字列に割り当てられた長さが長すぎて固定長文字列にできない場合、Visual Basic は余分な文字を直接切り捨てます。
固定長文字列の余分なスペースの末尾はスペースで埋められるため、スペースを削除する Trim 関数と RTrim 関数は、固定長文字列を扱うときに非常に便利です。 標準モジュール内の固定長文字列は、パブリックまたはプライベートとして宣言できます。フォームおよびクラス モジュールでは、固定長文字列をプライベートとして宣言する必要があります。
詳細については、 『Visual Basic 6.0 言語リファレンス マニュアル』の「Ltrim、RTrim、および Trim 関数」を参照してください。
文字列と数値を交換する
文字列が数値を表す場合、その文字列を数値変数に割り当てることができます。数値を文字列変数に代入することもできます。たとえば、コマンド ボタン、テキスト ボックス、リスト ボックスをフォーム上に配置します。コマンド ボタンの Click イベントに次のコードを入力します。アプリケーションを実行し、コマンド ボタンをクリックします。
PrivateSubCommand1_Click()
DimintXAsInteger
DimstrYAsString
strY=100.23
intX=strY '文字列を数値変数に渡します。
List1.AddItemCos(strY) '文字列内の値のコサイン値を加算します。
'リストボックスに追加します。
strY=Cos(strY) 'コサイン値を文字列変数に転送します。
Text1.Text=strY 'テキストボックスに文字列を表示します。
EndSub
Visual Basic は、変数を自動的に適切なデータ型に強制します。文字列と数値を変換するときは注意してください。渡された文字列の値が数値でない場合、実行時にエラーが発生します。
ブールデータ型
変数の値が「true/false」、「yes/no」、「on/off」の情報だけであれば、ブール型として宣言できます。ブール値のデフォルト値は False です。以下の例では、blnRunning は単純な Yes/No 設定を保存するブール変数です。
ディンブルン実行中ブール値
「テープが回転しているかどうかを確認してください。」
IfRecorder.Direction=1Then
bln実行中=True
エンディフ
日付データ型
日付と時刻の値は、特定の日付データ型またはバリアント変数に含めることができます。一般的な日付プロパティは両方のタイプに適用されます。
詳細については、オンライン マニュアルの「変数の高度なトピック」の「バリアント変数への日付/時刻値の保存」セクションを参照してください。
他の数値データ型が日付に変換される場合、小数点の左側の値は日付情報を表し、小数点の右側の値は時間を表します。午前0時は0、正午は0.5です。負の数値は、西暦 1899 年 12 月 31 日より前の日付を表します。
->