SeaGate HomePage 別館
本館 別館 ブログ
 
トップページ
第01回
第02回
第03回
第04回
第05回
第06回
第07回
第08回
第09回
第10回
第11回
第12回
第13回
第14回
おまけ
VBAではじめるAutoCADカスタマイズ VBAではじめるAutoCADカスタマイズ
第4回 変数と定数

■ はじめに

コンピュータの5大機能と呼ばれるものに、入力機能、記憶機能、演算機能、制御機能、出力機能があります。これらは主にコンピュータのハードウエアが持つ機能を表わしたものですが、ハードウエアの上で動作するプログラムにも当然これらの機能を使用するための仕組みが備わっています。今回はプログラミングを行なう上で最も基本的な概念である変数について説明します。

■ 変数

プログラムを作成していると、計算の途中経過や図形の座標値などを保存しておいて後で利用したい時など、一時的にデータを保存する必要がある場合が出てきます。そのような時に使用するのが変数で、変数とは数値や文字列などのデータを一時的に記憶しておくために使われる「値の入れ物」と考えることができます。

変数のイメージ
変数のイメージ

変数は、使用する前に名前とその中に保存するデータの型を宣言する必要があり、次のように記述します。変数を宣言すると保存するデータの型に応じた「値の入れ物」が用意され、宣言した変数の名前を用いて数値や文字列などのデータの書き込みや読み取り、演算などの操作を行うことができるようになります。

変数宣言の書式
書式:  Dim [変数名] As [データ型]

変数宣言の使用例
> プログラムコードを別ウィンドウで表示 ※ 行番号を入力する必要はありません

変数名

変数名は半角255文字以内でかつ先頭の文字はアルファベットでなければなりません。また、スペース、"."、"!"、"@"、"&"、"$"、"#"などの記号を使用することはできません。変数名に日本語を使用することはできますが、できるだけ半角英数字とすることをお勧めします。なお、VBAでは変数の名前などに含まれる大文字と小文字を区別しません。

■ データ型

データ型とは、変数に保存することができるデータの種類や値の範囲のことです。変数には宣言した型とは異なる種類のデータや決められた範囲以外の値を保存することはできません。また、扱うことができる値の範囲が大きい型の変数ほど使用するメモリの量も大きくなるため、利用目的に応じて適切なデータ型を選択する必要があります。VBAには多数のデータ型が用意されており、よく使用されるものとして下表のようなものがあります。

データ型 値の範囲 概要
ブール型(Boolean) 真(True)または偽(False) 真か偽かを表わす
整数型(Integer) -32,768〜32,767 整数値
長整数型(Long) -2,147,483,648〜2,147,483,647 整数型よりも桁数の多い整数値
単精度浮動小数点型(Single) -3.402823×1038〜-1.401298×10-45(負の値)1.401298×10-45〜3.402823×1038(正の値) 実数値(小数点付きの数値)
倍精度浮動小数点型(Double) -1.79769313486231×10308〜-4.94065645841247×10-324(負の値)4.94065645841247×10-324〜1.79769313486232×10308(正の値) 単精度浮動小数点型より桁数の多い実数値
文字列型(String)   文字列
日付型(Date) 西暦100年1月1日〜西暦9999年12月31日 西暦で表わされた日付、時刻
バリアント型(Variant)   あらゆる種類のデータを格納できる特殊なデータ型

■ オブジェクト型

変数には、AutoCADが公開するオブジェクトを保存することもできます。変数にオブジェクトを保存するには、変数を保存するオブジェクトに対応した型として宣言し、"Set"キーワードを使用して保存します。

変数を宣言する時にどのようなオブジェクト型とするかは、[開発者用ヘルプ}の[ActiveX/VBAリファレンス]-[オブジェクト]の各オブジェクトのページに記載されている「VBAクラス名」か、オブジェクトブラウザの「クラス」名で調べることができます。例えば、円を表わすCircleオブジェクトはAcadCircle型の変数として宣言します。

オブジェクト型として宣言した変数(オブジェクト変数)は、内部に保存されたある特定のオブジェクトを操作する窓のように働き、オブジェクト変数という窓を通してオブジェクトの持つメソッドやプロパティを実行することができます。

オブジェクト変数にはオブジェクトそのものが保存されるわけではなく、実際にはそのオブジェクトへの参照情報が保存されるだけです。ですから、オブジェクト変数に同じ型の別のオブジェクトを上書きしても、オブジェクトそのものが削除されるわけではありません。

■ 配列変数

配列変数とは、同じ型の複数の変数を1つの名前で扱う仕組みのことです。配列内の各要素にはインデックスまたは添え字と呼ばれる通し番号が割り振られ、この番号を指定して個々の要素を識別します。配列変数は通常の変数と同様、使用する前に宣言する必要があり、要素の数を指定して次のように記述します。

配列変数宣言の書式
書式:  Dim [変数名(要素数)] As [データ型]

オブジェクト変数、配列変数の使用例
> プログラムコードを別ウィンドウで表示 ※ 行番号を入力する必要はありません

要素数の指定は、キーワード"To"を使用してインデックスの範囲を明示する方法と、インデックスの最大値を指定する方法があります。例えば"Dim a(2) As Double"と宣言した場合、既定ではインデックス0から始まる要素数3(a(0)〜a(2))の配列変数となります。また、要素数をカンマで区切って並べることにより、下図のような2次元、3次元の配列を宣言することもできます。なお、VBAでは最大60次元までの配列変数を宣言することが可能です。

1次元配列 2次元配列 3次元配列
1次元配列 2次元配列 3次元配列

配列変数には静的配列と動的配列の2種類があります。先ほど説明したのは静的配列で、静的配列は宣言時に指定した要素数や次元数を変更できません。一方、動的配列は要素数や次元数を指定せずに宣言し、プログラム実行中に"ReDim"ステートメントなどを使用して要素数や次元数を変更することができます。

通常、AutoCADのオブジェクトに対して3次元座標を指定する時、要素数3の倍精度浮動小数点型の1次元配列にX, Y, Zの各座標値を保存した静的配列変数を使用します。それとは逆に、オブジェクトから3次元座標を受け取る時は、倍精度浮動小数点型として宣言した動的配列に要素数3の1次元配列として保存されます。

動的配列の使用例
> プログラムコードを別ウィンドウで表示 ※ 行番号を入力する必要はありません

■ 定数

定数とは、プログラム中で値の変わらないデータに名前を付けて参照できるようにしたもので、変数と同様、使用する前に宣言する必要があります。具体的な数値や文字列などの代わりに定数名を使用すると、プログラムコードが読みやすくなりタイプミスを防止できるなどのメリットがあります。また、定数にはVBAやAutoCADのオブジェクトなどが定義している定数(組み込み定数)などもあります。

定数宣言の書式
書式:  Const [定数名] As [データ型] = [値]

バリアント型

実はVBAでは宣言なしに変数を使用することができます。変数を宣言しなかった場合や宣言しても型を指定しなかった場合、変数はバリアント型(Variant)であるものと見なされます。バリアント型はすべての型のデータを格納できる便利なデータ型ですが、データの種類や値の範囲があいまいになり、思わぬバグを招く危険性もあります。

バリアント型の変数は、AutoCADのオブジェクトとデータの受け渡しする際にどうしても必要となる場合がありますが、そのような時以外は使用せず、明示的に変数とデータの型を宣言するようにしてください。

VBAの初期設定では宣言なしに変数を使用することができます。変数を必ず宣言するようにするには、VBAエディタの[ツール]メニューで[オプション]を選択し、[オプション]ダイアログの[編集]タブにある[変数の宣言を強制する]をチェックします。そうすると、それ以後に開いたコードウィンドウの先頭にはすべて"Option Explicit"文が自動的に追加され、宣言なしに変数を使用するとエラーが発生するようになります。

オプションダイアログ
オプションダイアログ

■ 最後に

電卓にもメモリー機能があるように、データを記憶して利用する変数はプログラミングの基本中の基本です。AutoCAD VBAでは、変数は単にデータを記憶するだけでなく、オブジェクトを取り扱うための手段として頻繁に利用されます。サンプルプログラムなどを少しずつ改造しながら、是非使い方をマスターしてください。
SeaGate
コレクション



inserted by FC2 system