ExcelVBAへの道
 
3.コード

VBAのコードはマクロが標準モジュールのModuleに書かれるのに対して、主にフォームのコードウィンドウ書かれます。また、フォームウィンドウとコードウィンドウは同じ右側表示部分に切り替わり表示されます。
  1. ユーザーフォーム(UserForm
  2. 標準モジュール(Module
  3. クラスモジュール(Class
  4. 各Sheet(Microsoft Excel Object モジュール)
  5. This Workbook(Microsoft Excel Object モジュール)
フォームモジュール
ユーザーフォームにボタンなどのオブジェクトを配置して、ダブルクリックするとコードウィンドウが表示されコードの始めと終わりのコードが自動的に作成されます。
この中間に実行コードを書きます。フォームから何か実行さす時に使います。(クラスモジュールに属します)
標準モジュール
標準モジュールには、他のコードから呼び出して使うようなコードと変数・定数を書きます。
コードウィンドウの最上部の宣言セクション部分に変数・定数を書きます。
例)
 Public MyCount As Integer(変数)
 Public Const TAX = 0.05(定数)

クラスモジュール
クラスが定義されたモジュール。定義するオブジェクトのプロパティおよびメソッドのコードが記述されています。
通常は意識して使うことはありません。すでにVBAで定義されているからです。
新たに自分独自のクラスを定義するときにしか使いません。オブジェクトが持つメソッドやプロパティを定義するためのモジュール

Microsoft Excel Object モジュール
シートには、各シート上にボタンなどのオブジェクトを設置して何か実行させるときにここにコードを書きます。
This Workbookにはブックオープン時に実行さすコードを書きます。

第4章
コード(VBAプログラミング)

コードをどこに書くのか

コードはVBEの右側のウィンドウコードウィンドウに書くのですが、コードウィンドウは1個だけではなく、4タイプの各Moduleごとにそれぞれコードウィンドウを持っています。だから、実際には非常にたくさんのコードウィンドウが作成されるようになるのです。また、同じプログラムコードでも、違うコードウィンドウに書いてはコードを実行さすことはできません。用途に応じた正しいModuleのコードウィンドウにコードを書かなければ目的の処理動作をさすことができません。

コードウィンドウ画面

コードウィンドウには上部左側にオブジェクトボックスと上部右側にプロシージャボックスがあり、左下隅にプロシージャ表示ボタンとモジュール全体表示ボタンがある。

  1. オブジェクトボックス
  2. プロシージャボックス
  3. プロシージャ表示ボタン
  4. モジュール全体を連続表示ボタン
  5. 分割バー
  6. 余白インジケータバー
コード切り替え
フォームの上に設置したコントロールをダブルクリックすると自動的にコードウィンドウ内に始まりと終わりのコードが作成される。では、コントロールが無い場合にはどうするか。オブジェクトボックスの右下三角ボタン▼をクリックする。そうするとオブジェクトのリスト一覧がドロップダウンリストとして表示される。 ここにあるリスト名は
(General)必ずあります。
    UserForm
フォーム上の各オブジェクト名 
例 
CheckBox1
ComboBox1
CommandButton1
CommandButton2
Image1
Label1
ListBox1
MultiPage1
OptionButton1
RefEdit1など
これらはフォーム上に配置されたコントロールの名前です。つまり、オブジェクトボックスにはコントロールの名前一覧が表示されます。では、もし、フォームはあるがコントロールを配置していない場合には
(General)
    Form
の2つだけしかありません。しかし、Formはフォームを作成したのでForm名があるのは理解できるが、(General)とは何ですか。Generalは英語での意味は「一般の、一般的な、概略の、全体的な、全般的な」という意味です。つまり、コードのペースと思ってください。
    (General)名をクリックして選択してください。
右側のプロシージャボックスに(Declarations)名が表示されます。Declarationは英語で「申し立て、宣言(書)、申告(書)、通知、供述書」という意味があります。
VBAではここに変数・定数などの宣言をします。ここで宣言をするとどのコードウィンドウ内でも変数・定数を使用することができるようになります。
次にオブジェクトボックスのUserForm名をクリックしてください。プロシージャボックスの右下▼ボタンをクリックするとUserFormで選択できるイベント動作名の一覧がドロップダウンメニューに表示されます。つまり、プロシージャボックスはオブジェクトボックスにあるコントロールのイベント動作名が表示されるのです。
Activate
AddControl
BeforeDragOver
BeforeDropOrPaste
Click
DblClick
Deactivate
Error
Initialize
KeyDown
KeyPress
KeyUp
Layout
MouseDown
MouseMove
ouseUp
QueryClose
RemoveControl
Resize
Scroll
Terminate
Zoom

プログラムの書き方
コード名は日本語を使えますが、それ以外は全て英語です。通常小文字で書いていきます。正しいスペルだったら自動的に先頭文字が大文字に変換されますので、もし、自動的に大文字にならなければスペルミスかも知れませんので、要チェックです。

Sub 名前()

   宣言コード部分  (変数・定数を使いたい場合にはここで宣言します。使わない場合はありません。)

   実行コード部分

End Sub

宣言と変数と定数
プログラムコードを書く上で必ず使うものに、変数・定数・データ型があります。
これを覚えないと実際に使えるソフトを作成することはできません。
宣言コード部分に宣言して使います。


Dim A As Integer

Dim はこのコードブロックのみで利用可能であるという意味の文字です。その他Public,Private,staticがあり、目的により使い分けます。
A は変数名です。任意の文字列を使用できます。日本語も使えます。よく使われる例はMyCount,Countなど第三者が見てもわかるような変数名にしておくことです。
As はお決まりの文句です。
Interger が変数のデータ型です。
つまり、Aという変数は整数のデータ型でこのブロックでしか有効ではありませんという意味です。

Publicモジュールで宣言
Publicで変数を宣言すると宣言したコードウィンドウ以外の部分のコードウィンドウからでも変数を使用することができます。

Privateモジュールで宣言
プライベートモジュールレベルで宣言すると宣言したコードウィンドウでしか変数を利用することはできません。通常はPrivateが使われます。

プロシージャレベルで宣言
Sub 名前()  End Subの間でのみ有効です。通常はDimが使われます。

変数のデータ型
種類 サイズ 範囲
バイト型 1バイト 0-255
ブール型 2バイト True False
整数型 2バイト 32,767
長整数型 4バイト 2,147,483,647 約21億
単精度浮動小数点型 4バイト
倍精度浮動小数点型 8バイト
通貨型 8バイト 922,337,203,685,477.00
10進型 12バイト 79,228,162,154,264,300,000,000,000,000
日付型 8バイト 西暦100年1月1日から西暦9999年12月31日
オブジェクト型 4バイト
文字列型(可変長) 10バイト+文字列の長さ 2GB
文字列型(固定長) 文字列の長さ
バリアント型(数値) 16バイト 2GB
バリアント型(文字列) 22バイト+文字列の長さ あらゆる種類の値を保存できる。
ユーザー定義型 要素による 要素による

オブジェクト変数
Dim myBook1 As Workbook<=================変数にオブジェクトを設定
Dim mySheet1 As Worksheet
Dim myCell1 As Object<================Objestとして総称して設定することができる。

Set myBook1 = Workbooks("XXXX.xls")<=======Setでオブジェクトへの参照を設定
Set mySheet1 = Worksheets("Sheet1")


変数の宣言の強制と解除
変数の宣言を強制する場合には宣言部分に Option Explicit のコードを入れる。
メニューのツール>オプション>編集タブ>変数の宣言を強制するにチェックを入れる。