Edited at

復刻その1 アクセスVBA講座 基礎編

■はじめに

 当サイトは、AccessVBAを利用したデータベースの作成に必要な基本事項についてサンプルコードを付けて詳しく説明しています。したがって,アクセスの基本的な操作については解説していません。マクロを利用してデータベースを作成した経験のある方でVBAに興味を持たれた方を対象にしています。AccessのVerは2000以上ですが,ADOとADOX,以外の部分はAccess97でも大体同じです。アクセスの基本についてはMurunsさんのこちらのサイトや、魔法使いの開発工房さんが参考になると思います。office全般についてはofficeの助っ人さんのこちらのサイトがお勧めです。書籍では、エクスメディア社の超図解シリーズAccess2000「基礎編」「クエリー&応用編」がお勧めです。

 

 管理人:cbc

開設日:2004/03/20


HOME>VBA基礎>プロシージャの作成方法(基礎編)


Contents

01 VisualBasicEditor

   ・VisualBasicEditorの起動方法

   ・プロジェクトエクスプローラ

   ・コードウインドウ

   ・プロパティウインドウ

   ・イミディエイトウインドウ

02 プロシージャの記述

   ・イベントプロシージャの作成

   ・ジェネラルプロシージャの作成

   ・読みやすいコードの書き方

   ・コメント文を入れる

   ・大文字/小文字の区別

   ・オブジェクトの名前付け規則

03 プロシージャの実行

04 オブジェクトの参照方法

05 値の代入

06 引数

07 プロシージャの呼び出し

01.VisualBasicEditor

■VisualBasicEditorの起動方法

Accessのメニューバーから[ツール(T)]-[VisualBasicEditor(V)]を選択

ショートカットキー([Alt]+[F11])

データベースウインドウで右クリク-[VisualBasicEditor(V)]を選択

データベースウインドウでモジュールオブジェクトを選択して,[新規作成(N)]または[デザイン(D)]

Accessのメニューバーから[挿入(I)]-[標準モジュール(M)]を選択

データベースウインドウでフォームあるいはレポートをクリックして選択て,Accessのメニューバーから[表示(V)]-[コード(C)]を選択

■プロジェクトエクスプローラ

 VBEでは,作成したモジュール,フォーム,レポートなどをプロジェクトとして管理します。これを管理するのがプロジェクトエクスプローラです。新しくモジュールを挿入したり,フォームやレポートを作成すると自動的にここに追加されます。Microsoft Accessクラスオブジェクト,標準モジュール,クラスモジュールがフォルダーの形で表示されています。

1)Microsoft Accessクラスオブジェクト・・・・フォームやレポートのイベントプロシージャやジェネラルプロシージャを記述。

2)標準モジュール・・・フォームやレポートなどに関連付けられていないSubプロシージャやFunctionプロシージャやプロジェクト全体で使うパブリック変数などを記述。

3)クラスモジュール・・・・フォームやレポートとは独立に存在することもでき,このタイプのクラスモジュールはデータベースウィンドウの[オブジェクト]の[モジュール]に一覧表示されます。[モジュール]に表示されるクラスモジュールを使用して、カスタムオブジェクトの定義を作成できます。

■コードウインドウ

 コードの作成/編集を行うツールです。各モジュ-ルに1個ずつ用意されています。プロジェクトエクスプローラからプロジェクト内容を右クリックして[コードの表示(O)]で表示できます。

■プロパティウインドウ

 オブジェクトのプロパティを管理しているのがプロパティウインドウです。

■イミディエイトウインドウ

 VBEのメニューバーから[表示(V)]-[イミディエイトウインドウ(D)]で表示/非表示の切り替えができます。プロシージャの実行結果や変数の値などを表示できます。使用方法は,直接イミディエイトウインドウに式やプロシージャを記述するか,プロシージャの中で,DebugオブジェクトのPrintメソッドを利用します。


02.プロシージャの記述

イベントプロシージャの作成

 VBEditorを起動しプロジェクトエクスプローラ内にあるフォームをダブルクリックするとそのフォームのモジュールがコードウインドウに表示されます。オブジェクトボックスでオブジェクトを選択し,プロシージャボックスでイベントを選択します。例えばオブジェクトボックスで[Form],プロシージャボックスで[Lordイベント]を選択すると以下のコードが作成されます。

Private Sub Form_Load()

End Sub

 コードはこの「Private Sub Form_Load()」と「En dSub」の間に記述します。イベントプロシージャの名前はオブジェクト名とイベント名を組み合わせて「オブジェクト名_イベント名」という形で自動的に作成されます。

 フォームをデザインモードで開き,下図の赤丸の部分を右クリックして[プロパティ]を選択してイベントタブで[開くとき]をクリックし,プルダウンメニュ-から[イベントプロシージャ]を選択し[・・・]をクリックしても上のコードを作成することもできます。


ジェネラルプロシージャの作成

 標準モジュールあるいはクラスモジュールを表示して「Sub プロシージャ名」を入力してエンターキーを押すと次のコードが作成されます(プロシージャ名は計算)。


Sub 計算()
End Sub


読みやすいコードの書き方

処理のまとまりごとにインデントをつける。

処理のまとまりごとに空白行を入れる。

1行には1命令文を記述する。ただし1行に複数の命令文を記述するときは,命令文と命令文の間にコロン(:)を入れて記述します。

長い命令文は複数行に分けて記述する。この場合は,行継続文字(_)を使って,次のように記述します。

ただし,改行位置と行継続文字の間には,1文字分の空白が必要です。 

  SQL="SELECT cbolist.data, cbolist.ck FROM cbolist _ 

"
ORDERBY cbolist.data DESC;"


コメント文を入れる

 シングルクオーテーション(’)の後ろに記述した文字列は,実行時には無視されます。コメント文はプログラム中どこでも記述できますが,行継続文字を使って改行した行の後ろには記述できません。


大文字/小文字の区別

 コードを記述するとき,大文字と小文字を区別する必要はありません。「msgbox」のように小文字で入力してもかまいません。正しく構文を記述すると,[Enter]キーを押したときに,自動的に「MsgBox」のように表示されます。構文に誤りがある場合は,入力したままの状態で表示されるので,コードが正しく記述できたかどうかの判断に利用すると便利です。


オブジェクトの名前付け規則

 プログラムからフォームやレポート上のコントロールを参照するときは,[名前]プロパティで設定した値を利用します。コントロールの名前をつけるときは,次の規則にしたがって名前を付けておくとコードが読みやすくなります。


  • 名前の先頭には,オブジェクトの種類がわかるようなプレフィックスを記述する。

  • プレフィックスの後ろに,オブジェクトの意味がわかるような名前を付ける。

  • テーブルに連結したコントロールはフィールド名をそのまま利用する。

オブジェクト
プレフィックス

コマンドボタン
cmd
cmd実行

テキストボックス
txt
txt検索キー

ラベル
lbl
lbl状態

フレーム
fra
fra条件

コンボボックス
cbo
cbo地域

リストボックス
lst
lst項目

(★)オブジェクトの名前にはカタカナ(全角/半角)も使用できますが、たとえば「コード」「クラス」などのカタカナは使用しないことをお勧めします。以前、Access97で作成したシステムをAccess2000に変換したところ、エラーなく変換されたのですが、イベントプロシジャ名のオブジェクト名の半角カタカナが全角に変換され、イベントが認識されないというトラブルが発生しました。オブジェクト名変更で回避できますが、チェックと修正でかなり面倒な作業を強いられます。


03.プロシージャの実行

 作成したプロシージャは,VBAメニューバーの[実行(R)]-[Sub/ユーザーフォームの実行]を選択します。標準モジュールに記述したジェネラルプロシージャは,実行したいプロシジャの中にカーソルを移動させて[F5]キーで実行できます。


04.オブジェクトの参照方法


フォームまたはレポート

【書式】 Forms!フォーム名

【書式】 Reports!レポート名

 コレクション名とフォーム名の間は感嘆符(!)でつなぎます。フォーム名やレポート名に空白やハイホン(-)などの記号が含まれている場合は,名前を角カッコ([ ])で囲まなければなりません。


コントロール

【書式】 Forms!フォーム名!コントロール名

【書式】 Reports!レポート名!コントロール名

 フォーム名とコントロール名を>半角の感嘆符(!)でつなぎます。コントロール名に空白やハイホン(-)などの記号が含まれている場合は,名前を半角の角カッコ([ ])で囲まなければなりません。


プロパティ

【書式】 Forms!フォーム名.プロパティ名

【書式】 Forms!フォーム名!コントロール名.プロパティ名

【書式】 Reports!レポート名.プロパティ名

 オブジェクトとプロパティの間をドット演算子(.)でつなぎます。


サブフォーム・サブレポート

【書式】 Forms!フォーム名!サブフォームコントロール名.Form

【書式】 Reports!レポート名!サブレポートコントロール名.Report

 サブフォーム上のコントロールを参照する場合は,Formプロパティとコントロール名の間を感嘆符(!)でつなぎます。

【サンプルコード】フォーム「入力」のサブフォーム「高校コード抽出」上の「高校コード」を参照する

  Forms!入力!高校コード抽出.Form!高校コード

Meプロパティ

 フォームまたはレポートのクラスモジュールから同じオブジェクトに含まれるコントロールを参照する場合は,Meプロパティを利用できます。

【サンプルコード】フォーム「入力」の「高校コード」を参照する

   Forms!入力!高校コード

   Me!高校コード


05.値の代入

変数Aに変数Bの値を代入するには等号(=)を用いて「A=B」と記述します。

数値の代入

A=9999 のように数値をそのまま記述します。  

文字列の代入

`A="アクセスVBA" のように文字列をダブルクオーテーション(")で囲みます。   

日付を代入

A=#04/04/19# のようにシャープ記号(#)で囲みます。これを日付リテラルといいます。#月/日/年 時:分:秒#


06.引数(ひきすう)

 プロシージャを実行するとき,値を渡すことが出来ます。この値を引数(ひきすう)といいます。引数をとるプロシージャを作成する場合は,引数のデータ型を宣言する必要があります。また,引数の名前は、呼び出し元のプロシージャと受け取る側で同じにする必要はありませんが,データ型は同じでなければなりません。また,複数の引数を使うときは記述する順番に注意が必要です。

【書式】 Sub プロシージャ名 ( 変数1 AS データ型,変数2 AS データ型,・・・・)

          コード

     End Sub

【書式】 Function 関数名 ( 変数1 AS データ型,変数2 AS データ型,・・・・)

          コード

     End Function

【サンプルコード】(実行すると「aaaaabbbb]と表示されます。)

   Sub Exsample()

Dim a As String
Dim b As String
a="aaaaa" : b="bbbb"
     MsgBox Ketugou(a,b)
  End Sub

  Function Ketugou(x As String,y As String)
    Ketugou= x & y
  End Function

07.プロシージャの呼び出し

 プロシージャは他のプロシージャから呼び出すことができます。複数のプロシージャに共通する処理の部分を,1つのSubプロシージャに記述し,このSubプロシージャを呼び出して使えばプログラムが読みやすくなるだけでなく,メンテナンスも容易になります。

【サンプルコード】

  Private Sub cmd実行_Click()

    ~コード~
     Call 操作
    ~コード~
  End Sub

Sub操作()

■Contents

01 Event一覧

02 Eventの発生する順序

  ・フォームとコントロールの扱い

  ・データの扱い

  ・レコードの扱い

01.Event一覧

イベントを認識できるのは「フォーム」「レポート」「フォーム上のコントロール」で,オブジェクトごとに認識できるイベントは決まっています。

分類
イベント
イベントプロパティ
イベントの発生するタイミング

マウス
Click
クリック時
マウスの左ボタンをクリックしたとき

Dbclick
ダブルクリック時
マウスの左ボタンをダブルクリックしたとき

MouseDown
マウスボタンクリック時
マウスボタンを押したとき

MouseMove
マウスボタン移動時
マウスを移動したとき

MouseUp
マウスボタン開放時
マウスボタンを離したとき

ウインドウ
Close
閉じる時
フォームまたはレポートを閉じて画面から消えるとき

Load
読み込み時
フォームを開いた後レコードが表示されるとき

Open
開く時
フォームを開いて最初のレコードが表示される前,またはレポートを開いて印刷される前

Resize
サイズ変更時
フォームのサイズが変更されたとき

Unload
読み込み開放時
フォームを閉じるとき画面から消える前<

フォーカス
Activate
アクティブ時
フォームまたはレポートがアクティブになったとき

Deactive
非アクティブ時
他のAccessウインドウがアクティブになったとき

Enter
フォーカス取得時
コントロールがフォーカスを受け取るとき

Exit
フォーカス喪失時
他のコントロールにフォーカスが移動する直前

データ
AfterDelConfirm
削除後確認
削除確認後実際にレコードが削除された後,または削除がキャンセルされた後

AfterInsert
挿入後処理
新規レコードが追加された後

AfterUpdate
更新後処理
変更されたデータが更新された後

BeforeDelConfirm
削除前確認
レコードを削除した後で削除確認のダイアログボックスが表示される前

BeforeInsert
挿入前処理
新規レコードで最初の文字を入力したとき

BeforeUpdate
更新前処理
変更されたデータが更新される前

Change
変更時
テキストボックスの値が変化したとき,またはタブコントロール内でページを移動したとき

Current
レコード移動時
フォーカスが他のレコードに移動し,そのレコードがカレントレコードになったとき

Delete
レコード削除時
削除確認後に実際にレコードが削除される前

Dirty
ダーティ時
フォームまたはコンボボックスのテキスト部分が変更されたとき

NotinList
リスト外入力時
コンボボックスのリストに存在しない値を入力したとき

Update
更新時
OLEオブジェクトのデータが変更されたとき

キーボード
KeyDown
キークリック時
キーボードを押したとき

KeyPress
キー入力時
キーボードを押して離したとき

KeyUp
キー開放時
キーボードを離したとき

エラー
Error
エラー時
フォームまたはレポートで実行エラーが発生したとき

タイミング
Timer
タイマー時
タイマー間隔プロパティに指定した時間が経過したとき

フィルタ
ApplyFilter
フィルタ実行時
フィルタを実行したとき

Filter
フィルタ設定時
フォームフィルタを実行したとき

印刷
Format
フォーマット時
レポートセクションに表示されるデータが決定したとき

NoData
空データ時
データのないレポートがフォーマットされた後で印刷される前

Page
ページフォーマット時
フォーマット後でページが印刷される前

Print
印刷時
フォーマット後でセクションが印刷される前

Retreat
戻り時
フォーマット中に前にフォーマットしたレポートセクションに戻ったとき


02.Eventの発生する順序


1.フォームとコントロールの扱い


フォーカスを取得できるコントロールを含むフォームを開いて閉じるとき

Open→Load→Resize→Activate→Current→Unload→Deactivate→Close


コントロールのフォーカス

Enter→GotFocus→Exit→LostFocus


2.データの扱い


テキストボックス・コンボボックスのテキストの変更

KeyDown→KeyPress→Change→KeyUp

 Changeイベントはコントロールの内容が変更されるたびに発生します。テキストボックスに文字を入力していくと,キーストロークごとに上のイベントが同じ順序で発生します。


テキストボックス・コンボボックスのテキストの更新

 データを変更した後,同じフォームに配置されている別のコントロールに移動すると,コントロールのデータが更新され,このときBeforeUpdateイベントとAfterUpdateイベントが発生します。BeforeUpdateイベントは,データが更新される直前に発生し,AfterUpdateイベントはデータが更新された直後に発生します。


【例】テキストボックス(Txt1)の文字を削除して別のテキストボックス(Txt2)をクリックしてTxt1のデータを更新すると

KeyDow→KeyPress→Change→KeyUp→BeforeUpdate→

AfterUpdate→Exit(Txt1)→LostFocus(Txt1)→Enter(Txt2)→GotFocus(Txt2)


レコードの挿入

 フォームを使って新規レコードにデータを入力する場合,そのレコードに最初のデータが入力されたときにBeforeInsertイベントが発生し,そのレコードが保存されたときにAfterInsertイベントが発生します。


例】フォームに新規レコードを表示してテキストボックス(Txt1)に文字を入力すると

KeyDow(Txt1)→KeyPress(Txt1)→BeforeInsert(Txt1)→Change(Txt1)→KeyUp(Txt1)


同じフォームの別のテキストボックス(Txt2)をクリックし,文字を入力すると

BeforeUpdate(Txt1)→AfterUpdate(Txt1)→Exit(Txt1)→LostFocus(Txt1)→Enter(Txt2)→

GotFocus(Txt2)→MouseDown(Txt2)→MouseUp(Txt2)→Click(Txt2)→KeyDown(Txt2)→

KeyPress(Txt2)→Change(Txt2)→KeyUp(Txt2)

http://www.geocities.jp/cbc_vbnet/kisuhen/hensuu.html


HOME>VBA基礎>このページ変数・定数(基礎編)


Contents

01 変数とは

02 変数のデータ型

03 変数の宣言方法

04 変数の名前付け規則

05 データ型の変換

06 変数の適用範囲

07 配列変数

  ・1次元配列

  ・2次元配列

  ・多次元配列

08 OptionExplicitステートメント

09 Accessで使用できる定数


01.変数とは

 変数は,プログラムの実行中に変化する値を格納するための物です。たとえば

     A=100+4

のように記述すると,100+4の計算結果の104を「A」に入れておくことができます。このAが変数です。さらに

     B=A*2

と記述すると変数Bには104*2の計算結果が代入されます。


02.変数のデータ型

*サイズはバイト数

|データ型|サイズ|範囲|

|:----:|-----:|:---|

|バイト型 Byte |1 |0~255|

|ブール型 Bool|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.7976931348623E308~-4.94065645841247E-324(負の数)4.94065645841247E-324~1.79769313486232E308(正の数)|

|通貨型 Currency |8 |-922,337,203,685,477.5808~922,337,203,685,477.5807|

|日付型 Date |8 |西暦100年1月1日~西暦9999年12月31日|

|オブジェクト型 Object |4 |オブジェクトを参照するデータ型|

|文字列型 String 現在はMEMO型、もしくは長いテキスト型という|10+文字列の長さ |~0~2GB~最大 1 GB (ただし、長いテキストを表示するコントロールは最初の 64,000 文字までに制限される)|

|短いテキスト (旧テキスト型) Text , Char|| 最大 255 文字|

|バリアント型 Variant |16 |すべてのデータを扱えるデータ型で0~2GB|

|オートナンバー Counter|4 バイト (ReplicationID の場合は 16 バイト)|

|OLE オブジェクト型|最大2GB|別の Windows ベースのアプリケーションからの画像やグラフなどの ActiveX オブジェクトに使います。|

|ハイパーリンク|最大 8,192 文字 (ハイパーリンク データ型の各部分に 2048 文字までを含められる)|インターネット、イントラネット、ローカル エリア ネットワーク (LAN)、ローカル コンピューター上のドキュメントまたはファイルへのリンク アドレスに使います。|

|添付|最大 2 GB|画像、文書、スプレッドシート、グラフなどのファイルを添付できます。添付ファイル フィールドに含めることができるレコードあたりの添付ファイルは無制限ですが、データベースのサイズのストレージ上限までとなります。添付ファイル データ型は MDB ファイル形式では利用できません。|

変数の型はここと変わっているので、詳細は、Access デスクトップ データベースのデータ型 なお、VBAの変数の型とは異なっている。たとえばオートナンバーはVBAでは存在せずその実態は自動で付される長整数型に近い型である。またハイパーリンクもSQLでは宣言できず、MEMO型(LongChar)として表記される。

次にOLE DBとSQLで同じデータ型でもIntegerをShortと表記する場合があり、初心者は注意されたい。


03.変数の宣言方法

 変数を宣言するには,Dimステートメント、Staticステートメント、Privateステートメント、Publicステートメントを利用します。

【書式】Dim 変数名 [Astype]  (type:データの種類)

【書式】Static 変数名 [Astype](type:データの種類)

【書式】Private 変数名 [Astype](type:データの種類)

【書式】Public 変数名 [Astype](type:データの種類)

 複数の変数を宣言する場合は,カンマ「,」で区切って指定します。Astype節は各変数に記述する必要があります。Astype節を省略して宣言した変数はバリアント型の変数になります。

【使用例】整数型の変数A,Bを宣言する。

    Dim A As Integer,B As Integer

   これを

    Dim A,B As Integer

   と宣言すると変数Aはバリアント型の変数として宣言されます。

Dim A As Variant, B As Integerと同じ。Aは型を省略したものと判断し、Variant型になる。


04.変数の名前付け規則

変数名は次の規則にしたがって付ける必要があります。


  • 使用できる文字は、英字、ひらがな、全角カタカナ、漢字、数字、アンダースコア(_)です。

  • 変数名の先頭は数字または記号以外の文字。

  • 変数名にはスペース,ピリオド(.),感嘆符(!),その他の記号(@,%,&,$,#など)を含めることはできません(VBで使用されています)。

  • 変数名は半角255文字(全角127文字)以内。

  • VBの予約語(関数,ステートメント,メソッド)と同じ文字列を変数にすることはできません。

  • 同一の適用範囲内で同じ名前の変数を宣言することはできません。


05.データ型の変換

関数 内容

CBool ブール型に変換

CByte バイト型に変換

CCur 通貨型に変換

CDate 日付型に変換

CSng 単精度浮動小数点数型に変換

CDbl 倍精度浮動小数点数型に変換

CInt 整数型に変換

CLng 長整数型に変換

CStr 文字列型に変換

CVar バリアント型に変換

CLngLng -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807小数部分は丸められます64bitのみ

CLngPtr LongPtr は、32 ビットシステム環境では Long 型、64 ビットシステム環境では LongLong 型に変換され、システムの双方で小数部分は丸められます

Cdec 10進数型、ただしVariantである


06.変数の適用範囲

変数を宣言する場所や宣言に使うステートメントによって,変数の適用範囲が異なります。


プロシージャ内で使う変数

?DimまたはStatic ステートメントを使って宣言します。

?Dimステートメントを使って宣言した変数は,そのプロシージャの中だけで有効です。他のプロシージャから参照す

 ることはできません。また、プロシージャが終了すると値は破棄されます。

?Staticステートメントを使って宣言した変数は,そのプロシージャの中だけで有効です。他のプロシージャから参照

 することはできません。ただし,プロシージャが終了しても,プログラム実行中は値が保持されます。


モジュールレベルの変数

 モジュールの宣言セクションでDimステートメントやPrivateステートメントを使って宣言した変数はそのモジュール全体で使用できます。また代入した値は,プログラムを実行している間保持されます。


パブリック変数


  • 標準モジュールの宣言セクションでPublicステートメントを使って宣言した変数は,データベースに含まれるすべてのモジュールから参照することができます。データベースの実行中は値が保持されます。

  • フォームやレポートのクラスモジュールの宣言セクションでPublicステートメントを使って宣言した変数は,そのフォームやレポートが開いている間は他のモジュールから参照することができます。
    たとえば、フォーム「登録」の宣言セクションで
     
    Public strTemp As String

のように宣言された変数「strTemp」を参照するには

Forms!登録.strTemp

のように、フォームやレポートへの参照を含める必要があります。

 


07.配列変数


1)1次元配列

 変数名の後ろに()を付けると配列変数を宣言することができます。配列変数は同じデータ型の変数の集まりです。配列変数のメリットは容易にループ構造をつくれることです。

【書式】Dim 変数名(lower To upper) [Astype]

lower:配列のインデックス番号の最小値

Upper:配列のインデックス番号の最大値

type:データの種類

【使用例】

ステートメント 宣言される変数

 Dim AA sInteger A

 Dim A(1To4) As Integer A(1),A(2),A(3),A(4)

 配列の各要素にアクセスするには,インデックス番号を使います。たとえは,3番目の要素A(3)に7を代入するには

    A(3)=7

と記述します。


2)2次元配列

【書式】Dim 変数名(lowerToupper,lowerToupper)[Astype]

lower:配列のインデックス番号の最小値

Upper:配列のインデックス番号の最大値

type:データの種類

【サンプルコード】

   Sub Sample()

   Dim i As Integer, jAs Integer
   Dim A(9,9) As Integer
   For i=0 To 9
   Forj= 0 To 9
   A(i,j)=i*j
   Next j
   Next i

   MsgBox A(2,3)
   End Sub


3)多次元配列

 3次元以上の配列も同様に定義できます。VisualBasicでは,最大60次元までの配列を宣言できますが,配列の次元が大きくなると,必要なメモリも増大するので,多次元配列を使うときは注意が必要です。例えば,

  Dim A(9,9,9) As string

の宣言では,要素の数は,10*10*10=1000となります。


08.OptionExplicitステートメント

 ViBは,プログラムの中に新しい変数名を見つけると,自動的にバリアント型の変数として処理を行い、宣言してない変数を使用してもエラーにはなりません。したがって、変数名を入力ミスしてもエラーは出ません。このような入力ミスを防ぐために「OptionExplicitステートメント」が利用できます。

【書式】OptionExplicit

 ?モジュールの宣言セクションにOptionExplicitステートメントを記述しておくと,宣言してない変数は使用できなく

  なります。

 ?OptionExplicitステートメントは,追加したモジュールだけで有効です。

 ?ViBEditorの「オプション」ダイアログボックスで「変数の宣言を強制する」をオンにすると,新たに作成した

  モジュールには,OptionExplicitステートメントが自動的に追加されるようになります。


09.Accessで使用できる定数

組み込み定数(システム定義の定数)

 アプリケーションやコントロールで定義されている定数です。オブジェクト,メソッド,プロパティで使用できます。オブジェクトプラウザで各オブジェクトライブラリによって提供されている定数の一覧を表示できます。

記号定数またはユーザ-定義の定数

「Const」はリテラル値(すでに決められている定数)の代わりに使う定数を宣言します。定数を宣言するにはConstステートメントと使います。宣言方法はDimステートメントと同様です。

【書式】Const変数名 [Astype]=文字列 または 数値  (type:データの種類)

http://www.geocities.jp/cbc_vbnet/kisuhen/enzanshi.html


演算子(基礎編)

■Contents

01 代入演算子

02 算術演算子
03 比較演算子
04 文字列連結演算子
05 論理演算子
06 演算子の優先順位

演算子は算術演算,文字列・変数・関数の操作を行います。演算子によって結びつけられた一つのまとまりを式と言います。


01.代入演算子(変数またはプロパティに値を代入する演算子)

演算子   意味

= 変数またはプロパティに値を代入する


02.算術演算子(算術演算を行うときに使用する演算子

<table>

<tr>
<th>演算子</th>
<th>意味</th>
</tr>
<tr>
<td>^</td>
<td>数値のべき乗を求める</td>
</tr>
<tr>
<td>*</td>
<td>2つの数値の積を求める</td>
</tr>
<tr>
<td>/</td>
<td>2つの数値の除算を行い,結果を不動少数点数で返す</td>
</tr>
<tr>
<td>\</td>
<td>2つの数値の除算を行いし,その商を返す</td>
</tr>
<tr>
<td>Mod</td>
<td>2つの数値の除算を行いし,その剰余を返す</td>
</tr>
<tr>
<td>+</td>
<td>2つの数値の和を求める</td>
</tr>
<tr>
<td>-</td>
<td>2つの数値の差を求める,または数値の符号を反転した値を指定する</td>
</tr>
</table>

A=Bは変数Bの値を変数Aに代入することを意味します。同様に,A=A+1はAに1を加えたものをAに代入,つまりAを1増加させることを意味します

【例】2~3=8,7/2=3.5,7\2=3,(-7)\2=-3,7 mod 2=1,(-7) mod 2=-1

整数aと自然数bに対して,a=bq+r (0≦r≦b-1)となる整数q,rがただ1組決まります。数学では,このときaをbで割った商がq,余りがrであるといいます。

-7=(-4)*2+1から-7を2で割った商は-4余りは1です。したがって「\」や「mod」を負の整数に用いるときは注意が必要です。


03.比較演算子(比較を行うときに使用する演算子)

(省略)

Like演算子は,対象となる文字列が指定の文字パターンに一致するときはTrue(-1),一致しないときはFalse(0)を返します。

【書式】 文字列 Like 文字パターン

文字パターンにはワイルドカード,文字リスト,文字範囲などの文字列を指定します。



文字パターン
意味

Trueになる値の例


*
任意の複数文字
Like "ヤマ*"
ヤマダ,ヤマカワ,ヤマニシなど



任意の1文字
Like "ヤマ?"
ヤマダ,ヤマノ,ヤマサなど



任意の数字(0~9)
Like "A#01"
A101,A201,A301など


[charlist]
charlist内の1文字
Like "[chp]at"
cat,hat,patなど


[!charlist]
charlist以外の1文字
Like "[!chp]at"
bat,eatなど


[  -  ]
範囲指定
Like "[あ-お]*"
先頭が「あ」から「お」で始まる文字列


04.文字列連結演算子(文字列の連結を行うときに使用する演算子)

演算子   意味

& 2つの式に対して文字列連結を行う
+

【例】 A="123",B="45" のとき,A+BやA&Bはともに"12345"となります。


05.論理演算子(論理演算を行うときに使用する演算子)


演算子
意味

True になる条件


And
2つの式の論理積を求める
P And Q
P,Q がともにTrue


Eqv
2つの式の論理等価演算を行う
P Eqv Q
Not(P Xor Q) と同じ


Imp
2つの式の論理包含演算を行う
P Imp Q
(Not P) Or Q と同じ


Not
式の論理否定を求める
Not P
P がFalse


Or
2つの式の論理和を求める
P Or Q
P,Q の少なくとも一方がTrue


Xor
2つの式の排他的論理和を求める
P Xor Q
(P がTrueかつQ がFalse)または(P がFalseかつQ がTrue)


06.演算子の優先順位

算術演算子 

べき乗演算(^)→マイナス記号(-)→乗算と除算(*,/)→整数除算(¥)→剰余演算(Mod)→加法と減法(+,-)→文字列連結(&)

論理演算子

Not→And→Or→Xor→Eqv→Imp

http://www.geocities.jp/cbc_vbnet/kisuhen/bunki.html

条件分岐(基礎編 )

01 IF 文

省略


02 Select Case 文

省略

Select Caseステートメント 

Select Caseステートメントは複数の条件がある場合,条件式にしたがって各ステートメントブロックに処理を分岐します。Case節はいくつでも記述できます。

vb

Case 条件1

  条件式と条件1が一致するときに実行する処理

Case 条件2

  条件式と条件2が一致するときに実行する処理

Case 条件3

  条件式と条件3が一致するときに実行する処理

Case Else

  値が上記のどの条件にも当てはまらないとき実行する処理

End Select

Case節の書き方

値が1,2,3のいずれかである場合             →Case 1,2,3

値が1から5までの範囲のどれかである場合        →Case 1 To 5
値が1,2か5から10までの範囲のどれかである場合  →Case 1,2,5 To 10
値が10以上の場合                       →Case Is>=10
値が a  ~ z                           →Case "a" to "z"

(略)elect Case文は上から条件を調べていき,最初に条件が満たされたときの処理のみを実行して終了します。後の条件が無視されていることに注意して下さい。

http://www.geocities.jp/cbc_vbnet/kisuhen/loop.html

繰り返し処理(基礎編) ※内容は省略

01 While文

02 Do文

  ・Do・・・Loop

  ・Do Until・・・Loop

  ・Do While・・・Loop

  ・Do・・・Loop While

  ・Do・・・Loop Until

03 For文

  ・For・・・Next

  ・For Each・・・Next

 Sub テーブルリスト表示()

    Dim myobuje As AccessObject

    For Each myobuje In CurrentData.AllTables

      Debug.Print myobuje.Name & " ";

    Next

  End Sub

http://www.geocities.jp/cbc_vbnet/kisuhen/VBEditor.html

■Contents

01 Visual Basic Editor

  ・Visual Basic Editorの起動方法

  ・プロジェクトエクスプローラ

  ・コードウインドウ

  ・プロパティウインドウ

  ・イミディエイトウインドウ

02 プロシージャの記述

  ・イベントプロシージャの作成

  ・ジェネラルプロシージャの作成

   ・イベントプロシージャの作成

   ・ジェネラルプロシージャの作成

   ・読みやすいコードの書き方

   ・コメント文を入れる

   ・大文字/小文字の区別

   ・オブジェクトの名前付け規則<<

03 プロシージャの実行

04 オブジェクトの参照方法

05 値の代入

06 引数

07 プロシージャの呼び出し


オブジェクトの名前付け規則

プログラムからフォームやレポート上のコントロールを参照するときは,[名前]プロパティで設定した値を利用します。コントロールの名前をつけるときは,次の規則にしたがって名前を付けておくとコードが読みやすくなります。

<li>名前の先頭には,オブジェクトの種類がわかるようなプレフィックスを記述する。

</li><li>プレフィックスの後ろに,オブジェクトの意味がわかるような名前を付ける。
</li><li>テーブルに連結したコントロールはフィールド名をそのまま利用する。












オブジェクト


プレフィックス











コマンドボタン


cmd


cmd実行








テキストボックス


txt


txt検索キー








ラベル


lbl


lbl状態








フレーム


fra


fra条件








コンボボックス


cbo


cbo地域








リストボックス


lst


lst項目






 


04.オブジェクトの参照方法


フォームまたはレポート

【書式】 Forms!フォーム名

【書式】 Reports!レポート名

コレクション名とフォーム名の間は感嘆符(!)でつなぎます。フォーム名やレポート名に空白やハイホン(-)などの記号が含まれている場合は,名前を角カッコ([ ])で囲まなければなりません。


コントロール

【書式】 Forms!フォーム名!コントロール名

【書式】 Reports!レポート名!コントロール名

フォーム名とコントロール名を感嘆符(!)でつなぎます。コントロール名に空白やハイホン(-)などの記号が含まれている場合は,名前を角カッコ([ ])で囲まなければなりません。


プロパティ

【書式】 Forms!フォーム名.プロパティ名

【書式】 Forms!フォーム名!コントロール名.プロパティ名

【書式】 Reports!レポート名.プロパティ名

オブジェクトとプロパティの間をドット演算子(.)でつなぎます。


サブフォーム・サブレポート

【書式】 Forms!フォーム名!サブフォームコントロール名.Form

【書式】 Reports!レポート名!サブレポートコントロール名.Report

サブフォーム上のコントロールを参照する場合は,Formプロパティとコントロール名の間を感嘆符(!)でつなぎます。

【サンプルコード】フォーム「入力」のサブフォーム「高校コード抽出」上の「高校コード」を参照する

 Forms!入力!高校コード抽出.Form!高校コード


Meプロパティ

フォームまたはレポートのクラスモジュールから同じオブジェクトに含まれるコントロールを参照する場合は,Meプロパティを利用できます。

【サンプルコード】フォーム「入力」の「高校コード」を参照する

  Forms!入力!高校コード

  Me!高校コード

  


05.値の代入

数値の代入 

A=9999 のように数値をそのまま記述します。  

文字列の代入

A="アクセスVBA" のように文字列をダブルクオーテーション(")で囲みます。   

日付を代入

A=#04/04/19# のようにシャープ記号(#)で囲みます。


06.引数

プロシージャを実行するとき,値を渡すことが出来ます。この値を引数(ひきすう)といいます。引数をとるプロシージャを作成する場合は,引数のデータ型を宣言する必要があります。また,引数の名前は、呼び出し元のプロシージャと受け取る側で同じにする必要はありませんが,データ型は同じでなければなりません。また,複数の引数を使うときは記述する順番に注意が必要です。

【書式】

        Sub プロシージャ名 ( 変数1 AS データ型,変数2 AS データ型,・・・・)`

 コード
End Sub

【書式】

 Function 関数名 ( 変数1 AS データ型,変数2 AS データ型,・・・・)

         コード
    End Function

【サンプルコード】 (実行すると「aaaaabbbb]と表示されます。)

  Sub Exsample()

    Dim a As String
    Dim b As String
    a = "aaaaa": b = "bbbb"
    MsgBox Ketugou(a, b)
 End Sub

 Function Ketugou(x As String, y As String)
    Ketugou = x & y
 End Function


07.プロシージャの呼び出し

プロシージャは他のプロシージャから呼び出すことができます。複数のプロシージャに共通する処理の部分を,1つのSubプロシージャに記述し,このSubプロシージャを呼び出して使えばプログラムが読みやすくなるだけでなく,メンテナンスも容易になります。

【サンプルコード】

 Private Sub cmd実行_Click()

   ~コード~
    Call 操作
   ~コード~
 End Sub

http://www.geocities.jp/cbc_vbnet/kisuhen/era_syori.html


エラー処理(基礎編)


■Contents

01 エラーの種類

02 On Errorステートメント
03 エラー番号
04 On Error Resume Next
05 エラー処理ルーチンを無効にする


01 エラーの種類

コンパイルエラー

  ステートメントの構文が間違っているときに発生するエラーです。これを回避するには、VBエディタを起動し、

  [ツール]メニューの[オプション]をクリックして[オプション]ダイアログボックスを表示し、次に[編集]タブをクリック

  し、[自動構文チェック]チェックボックスをオンにします。これによって、間違った構文を入力したときは、エラー

  メッセージが表示されるようになります。


02.On Errorステートメント


エラー処理ルーチンを有効にする

エラー処理を有効にするには,On Errorステートメントを利用します。これにより,プログラム実行中にエラーが発生した場合は指定した位置 

にプログラムの制御を移すことができます。

【書式】 On Error GoTo Line 

Line:エラーが発生したときに制御を移す位置    

Lineには,エラー処理ルーチンに付けた名前を記述します。これを行ラベルと言います。行ラベルの名前は,次の規則に従って付けることが出来ます。


  1. 先頭は文字(英字,漢字,ひらがな,カタカナ)であること。

  2. 終わりにはコロン(:)を付けること。

  3. 長さは半角40文字以内であること。

  4. 同一モジュール内で重複する行ラベルは使用できない。

  5. 大文字/小文字は区別されない。

  6. コードウインドウの行頭から記述すること。  


エラー処理ルーチン

エラーが発生したときに実行する処理です。通常はサブルーティンと同様、プロシージャの一番最後に記述します。Resumeステートメントを利用すると,エラー処理を行った後にプログラムを再開する位置を指定できます。

ステートメント
内容

Resume[0]
エラーが発生したコードに戻る

Resume Next
エラーが発生した次のコードに戻る

Resume Line
指定した行ラベルに戻る


プロシージャで実行する処理

プロシージャで実行する処理は,On Errorステートメントと正常終了処理の間に記述します。

【サンプルコード】

Private Sub コマンド0_Click()   

On Error GoTo Err_コマンド0_Click ←エラー処理ルーチンを有効にする

DoCmd.GoToRecord , , acNext   ←実行する処理
      

Exit_コマンド0_Click:      ←正常終了処理 
Exit Sub

Err_コマンド0_Click:       ←エラー処理ルーチン   
MsgBox Err.Description
Resume Exit_コマンド0_Click
End Sub


03.エラー番号

ErrorオブジェクトのNumberプロパティとDescriptionプロパティを参照すると,エラーの番号と内容を調べることができます。

【書式】 Err.Number

【書式】 Err.Description


04.On Error Resume Next

【書式】On Error Resume Next

実行時エラーが発生してもプログラムを中断せず、エラーが発生したステートメントの次のステートメントから実行を継続します。十分なテストをしなかったり、どういうエラーかを確認せず、安易にこのステートメントを実行するとプログラムミスを見逃すことがあります。注意が必要です。

実行時エラーが発生してもプログラムを中断せず、エラーが発生したステートメントの次のステートメントから実行を継続します。十分なテストをしなかったり、どういうエラーかを確認せず、安易にこのステートメントを実行するとプログラムミスを見逃すことがあります。注意が必要です。


05.エラー処理ルーチンを無効にする

【書式】On Error GoTo 0

エラー処理ルーチンを無効にします。

  • HOME>VBA基礎>このページ変数・定数(基礎編)
  • 演算子(基礎編)
  • 04.オブジェクトの参照方法
  • 07.プロシージャの呼び出し
  • エラー処理(基礎編)