
Excel VBAプログラム関連<基礎>
VB(ビジュアルベーシック)って、一般的なイメージでは「Windowsの中では一番優しく入門者に最適!」という感じがしていると思う。
確かにWindowsプログラミングでは一番優しいな言語かもしれないけど「入門者に最適!」かどうかと聞かれると、私は「違う」と答えたい。
本当に簡単にプログラミングするならば、「qqbasic」などの素晴らしい昔のBASIC(ベーシック)を勧めたい。
(初めにBASICを覚えてしまうと、変なクセが付く・・とツッコム人が必ずいますが、一般の人は業務で自動計算を行う為に
即効性が必要でありコツコツ複雑な言語を覚えている時間は無く、簡単にプログラミング出来る環境でなければならないため
昔のBASICは大いに有効であると思います)
昔のベーシックは、数種類の命令さえ理解していれば業務でちょちょいと計算を行うプログラムを作成出来た。
だがVBは違う。オブジェクト指向やイベントがどうだこうだ・・など本格的なアプリケーションが作成可能な為に非常に複雑になっている。
でも、現在ここまでVBが浸透しているのは、VBA(Visual
Basic for Applications・Microsoft社Office製品に組み込まれているVB)
の存在が大きいと思う。
VBAはVBに比べて機能が若干削除されているものの、各アプリケーション特有の機能を盛り込んでおり、
VBAを使いこなす事によって、処理の自動化など市販ソフト顔負けの"アプリケーション"を作る事が出来るからだ。
ExcelはクソWordと違って素直だし、業務でも使用頻度が非常に高い。使いやすいので敷居が低いExcelの
VBAを使う事によって、
Excelに新たな命を吹き込む事が出来るのではないだろうか・・・・・とカッコイイ事を言ってみるのテスト!(爆)
| VisualBasicプログラミングのいろは・・・手抜き解説(しかも未完成 ^^;) |
●「オブジェクト」について
とにかく最近の言語は「オブジェクト指向」プログラミングが主流らしいです。
構成要素を「部品」として考えて、それらを組み合わせて使うみたいな考え方です。
私もあまり理解していないので分からんなぁ。(汗
つまり「フォーム」というオブジェクトがあって、その中に「コマンドボタン」というオブジェクトを配置して、
「コマンドボタン」というオブジェクトの中には「フォント」をいう文字修飾を行うオブジェクトがある。
実は「フォーム」や「プリンター」等の色々なオブジェクトの中にも「フォント」オブジェクトが存在するけれど、
「フォント」オブジェクト自身の扱いはみな同じ(「フォント」と言う部品をくっつけてるだけだから)。
これだとオブジェクトが、どのオブジェクトで構成されてるか分かれば、プログラムが容易に組めそうですよね。
でも実際には"オブジェクト"と呼ばれるものは沢山あり、その他にも「プロパティ」「メソッド」「ステートメント」「関数」など
訳の分からない要素などが続出で沢山・・混乱する事必死です。
(う〜む、どうも説明がイマイチだなぁ。その辺は大手サイトを見てください
^^;)
●プログラムの組み方
VBは「イベント駆動式」でプログラム(=コード)が実行される為に、各イベントに対してプログラムを記述します。
ボタンを押すまでの動作はVBがやってくれてボタンを押してからどうするかの動作を
ユーザーがプログラムで指示する訳なんです。もちろんイベントには様々な種類があります。
「ウィンドウがアクティブになったら」「セルの内容を変更した時」
「チェックボックスをマークした時」等々、数え切れないくらいあります・・。
もちろんその中には「マウスの右ボタンが押されたか」などの細かい動作のイベントも用意されています。
イベント駆動式でプログラミングする場合は、イベントの連鎖発生に注意してください。
例えば、あるプログラムでワークシートのセルの内容を変更したとすると、
自動的にWorksheetのchangeイベント(ワークシートを変更した時)が発生します。
このような連鎖反応を意識しないと永久ループに陥る可能性があります。
Excel VBAでコードを組む時には主に以下の種類があります。
![]() |
(1) ワークシートオブジェクト ワークシートに対する動作を指示したい場合はここにプログラムします。 「そのシートがアクティブになった時」「セルの内容が変わった時」など |
| (2) ワークブックオブジェクト ブック(ワークブック)に対する動作を指示する場所です。 「ブックが開いた時」「ブック内のシートを切り替えた時」など |
|
| (3) フォームモジュール 処理で使用するダイアログ(画面)を作りたい場合に使用します。 もちろんダイアログに対する操作もこの中でプログラムします。 |
|
| (4) 標準モジュール 主に、コードしか書けませんが、(1)(2)(3)と違い この中に書いたコードは他のモジュールやオブジェクトから呼び出し出来ます(public宣言)。 共通ルーチンをこの中に書くと良いでしょう。また標準モジュール内で無いと駄目な命令などもあります。 |
●コードのひとかたまり
VBではイベント毎にプログラムしますが、決まった区切り内でプログラムを行います。
| sub ●●● 〜 End sub |
このように「sub」〜「End sub」中でプログラムを行います。
例えば、ワークシート内のセルが変更された時の動作をプログラムする場合は
| Sub Worksheet_SelectionChange(ByVal Target
As Range) 〜 End Sub |
この中にコードを書くわけです。
イベントの種類はわざわざ打ち込まなくても、コードウィンドウで選択出来ます。

とりあえず、subの前の「private」と「public」はとりあえず気にしなくて結構です。(オイオイ
そしてこのコードのひとかたまりを「プロシージャ」と言います。
ちなみにプロシージャはイベントだけでなく、自分で関数(functionプロシージャ)や
subプロシージャを作る事が出来ます(後述)。
●コードの書き方
VBでコードを書く際には命令を1文ずつ改行して書きます。
例:
| Dim A As String A = "1" Msgbox A END |
ラベルを付ける事によって、リストを分かりやすくしたり、処理のジャンプ先として設定する事が出来ます。
ラベル名に半角のコロン(:)を付ける事によって、それがラベル名して認識されます。
例:
| BAKA: ←"BAKA"というラベルを設定 Goto BAKA2 ←"BAKA2"というラベルにジャンプする |
同じプロシージャ内に同じラベルを書くとエラーになりますので注意してください。
●変数
変数は値(あたい)を入れる箱です(うわぁ、昔のBASIC解説書みたいやなぁ)。
変数に値を代入するには、
| 変数名 = 値 (例:BAKA = "JUN") |
とします。変数名は半角英文字で行います。変数名には日本語も使えますが、
変数名で日本語が使える言語は少ないので、英文字のした方が良いでしょう。
しかし、変数に値を設定するにはまずデータに合わせて、いろいろな「型」の変数を
宣言する必要があります。
これはデータを入れる為の器を作る作業です。
わかりやすく言うと、コーヒーにはコーヒーカップを、ビールならジョッキを、
ワインならワイングラスを用意するようなものです。(変な例えだなぁ^^;)
主に使用する変数の型は以下の通りです。
(詳しくはMicrosoft Visual Basicヘルプの「目次」→「ランゲージリファレンス」
→「データ型」を参照してください。すいません。説明の手抜きです。^^;)
| 文字変数:string型 |
| 数値変数:boolean型、Interger型、Single型、Long型、Variant型等があります。 |
各変数の型の詳細は以下の通りです
| 文字変数に文字を代入する時はダブルクォーテーション(")で囲みます。例:A
= "" 文字変数に"010"を入れても「ゼロイチゼロ」です。単なる文字列として扱うので計算はしません。 数値変数の場合は010を代入しても、数値の「10」(じゅう)になります。 文字変数は文字の結合などの操作が出来ます。 |
| 数値変数は数値を計算する時に使います。 数値変数に数値を入れる時は数値をそのまま書きます。例:B = 50 よくありがちなのですが文字変数に数値を入れて、数値変数を混ぜて計算しようとするとエラーになりますので注意しましょう。 例) A = 10 B = "20" C = A * B ←エラー!! |
| Boolean型は特別でTrue(真:-1)/False(偽:0)しか有効ではありません。 |
| Variant型はなんでも屋さんで、状況に応じてString型になったり、Interger型になったりします。 ただメモリを沢山(って言っても微々たるものですが)使うので 必要時以外は効率面を考えて、それぞれの型の変数を使うのが良いでしょう。 |
関数(値を返す命令みたいなもの)によっては決まった型を返す場合がありますので、
関数の返すデータを入れる変数を指定の型で定義する必要があります。
変数の定義の仕方にも色々ありますが、主に下記のように行います。
Dim 変数名 As 変数の形
例:
| Dim BAKA As string |