”プログラミング”というものへの苦手意識を払拭するために、まずは簡単なAccessVBAプログラムを作ってみましょう。
1.MDBファイルの作成
Accessを起動し、”空のデータベース”でMDBファイルを作成してください。
名前は任意ですが、ここでは「メッセージの表示.mdb」としましょう。
保存場所はどこでも良いです。
2.テーブルの作成
テーブルを”デザインビューでテーブルを作成する”で作成します。
3.レコードを作成する
このプログラムではデータは利用しません。
しかし、MDBファイルには一つ以上のテーブルは必須です。
1行目に氏名と入力し、データ型をテキスト型としてください。
4.テーブルの保存
テーブルを保存します。名前は「テーブル1」としてください。
主キーの設定を促すダイアログが出るので、”はい”と入力してください。
テーブルのウィンドウを閉じてください。
5.フォームを作成する
データベースウィンドウの左側、”フォームと書かれたところを選択してください。
フォームを”デザインビューでフォームを作成する”で作成します。
6.フォームにボタンを配置する
メニューバーの[表示] → [ツールボックス]がアクティブになっていることを確認します。
以下作成中
SelectObject | DoCmdオブジェクト一覧
【機能】
指定したデータベースオブジェクトを選択し、アクティブにします。
【構文】
DoCmd.SelectObject オブジェクトの種類 ,オブジェクト名 ,ナビゲーションでの選択
【引数】
【例文】
指定したデータベースオブジェクトを選択し、アクティブにします。
【構文】
DoCmd.SelectObject オブジェクトの種類 ,オブジェクト名 ,ナビゲーションでの選択
【引数】
| 引数 | 定数 | 説明 |
|---|---|---|
| オブジェクトの種類 | acTable | 対象のオブジェクトをテーブルにする |
| acQuer | 対象のオブジェクトをクエリにする | |
| acForm | 対象のオブジェクトをフォームにする | |
| acReport | 対象のレポートをレポートにする | |
| オブジェクト名 | ― | 対象のオブジェクト名を指定する |
| データベースウィンドウでの選択 (省略可) | True | データベースウィンドウ上で選択する |
| False (既定) | 開いているオブジェクトのみ選択する |
【例文】
OpenReport | DoCmdオブジェクト
【機能】
レポートを開く
【構文】
DoCmd.OpenReport レポート名 ビュー, フィルタ名 フィルタ条件式 ,ウィンドウモード OpenArgs
【引数】
【例文】
レポートを開く
【構文】
DoCmd.OpenReport レポート名 ビュー, フィルタ名 フィルタ条件式 ,ウィンドウモード OpenArgs
【引数】
| 引数 | 定数 | 説明 |
|---|---|---|
| レポート名 | ― | 開くレポート名 |
| ビュー (省略可) | acViewNormal (規定) | レポートを印刷する |
| acViewDesign | デザインビューで開く | |
| acViewPreview | 印刷プレビューで開く | |
| acViewReport | レポートビューで開く | |
| acViewLayout | レイアウトビューで開く | |
| フィルタ名 (省略可) | ― | クエリ名を指定する |
| フィルタ条件式 (省略可) | ― | SQL文を指定する |
| ウィンドウモード (省略可) | acWindowNormal (規定) | 通常の状態で開く |
| acHidden | 非表示状態で開く | |
| acIcon | 最小化状態で開く | |
| OpenArgs (省略可) | ― | 文字列を渡す |
【例文】
OpenForm | DoCmdオブジェクト
【機能】
フォームを開く。
【構文】
DoCmd.OpenForm フォーム名, ビュー, フィルタ名, フィルタ条件式 データモード, ウィンドウモード ,OpenArgs
【引数】
【例文】
フォームを開く。
【構文】
DoCmd.OpenForm フォーム名, ビュー, フィルタ名, フィルタ条件式 データモード, ウィンドウモード ,OpenArgs
【引数】
| 引数 | 定数 | 説明 |
|---|---|---|
| フォーム名 | ― | 開くフォーム名 |
| ビュー (省略可) | acNormal (規定) | フォームビューで開く |
| acDesign | デザインビューで開く | |
| acPreview | 印刷プレビューで開く | |
| acFormsDS | データシートで開く | |
| acLayout | レイアウトビューで開く | |
| フィルタ名 (省略可) | ― | クエリ名を指定する |
| フィルタ条件式 (省略可) | ― | SQL文を指定する |
| データモード (省略可) | acFormPropertySettings (規定) | フォームのプロパティ |
| acFormAdd | 追加モードで開く | |
| acFormEdit | 編集モードで開く | |
| acFormReadOnly | 読み取り専用モードで開く | |
| ウィンドウモード (省略可) | acWindowNormal (規定) | 通常の状態で開く |
| acHidden | 非表示状態で開く | |
| acIcon | 最小化状態で開く | |
| OpenArgs (省略可) | ― | フォームに渡す文字列 |
【例文】
OpenQuery | DoCmdオブジェクト一覧
【機能】
クエリを開く。
【構文】
DoCmd.OpenQuery クエリ名,ビュー,データモード
【引数】
【例文】
クエリを開く。
【構文】
DoCmd.OpenQuery クエリ名,ビュー,データモード
【引数】
| 引数 | 定数 | 説明 |
|---|---|---|
| テーブル名 | ― | 開くクエリ名 |
| ビュー (省略可) | acViewNormal (規定) | データシートビューで開く |
| acViewDesign | デザインビューで開く | |
| acViewPreview | 印刷プレビューで開く | |
| データモード (省略可) | acAdd | 追加モードで開く |
| acEdit (省略可) | 編集モードで開く | |
| acReadOnly | 読み取り専用モードで開く |
【例文】
OpenTable | DoCmdオブジェクト
【機能】
指定したテーブルを開きます。
【構文】
DoCmd.OpenTable テーブル名,ビューの種類,データモード
【引数】
指定したテーブルを開きます。
【構文】
DoCmd.OpenTable テーブル名,ビューの種類,データモード
【引数】
| 引数 | 定数 | 説明 |
|---|---|---|
| テーブル名 | ― | 対象のテーブル名 |
| ビューの種類 (省略可) | acViewNormal | データシートビューで開く |
| acViewDesign | デザインビューで開く | |
| acViewPreview | 印刷プレビューで開く | |
| データモード (省略可) | acEdit (規定) | 編集モード |
| acAdd | 追加モード | |
| acReadOnly | 読み取り専用モード |
データベースオブジェクト
Accessでデータベースを作るということは、
テーブル、クエリ、フォーム、レポート、マクロ、モジュール
などを作成することを意味します。
これはExcelファイルを作ることがシートやオートシェイプや時にはマクロを作ることと同じであることと似ています。
それらの異なる機能を持つ部品のかたまりがAccessデータベースなのです。
この「部品」のことをデータベースオブジェクトと呼びます。
<まとめ>
データをインプットするオブジェクトです。
データをアウトプットするオブジェクトです。
データをインプットするための画面(主としてユーザのため)です。
データをアウトプットするための画面(主としてプリンタのため)です
データをプログラミングするためのオブジェクトです。
データをある程度自動化するためのオブジェクトです(プログラミングには劣ります)。
テーブル、クエリ、フォーム、レポート、マクロ、モジュール
などを作成することを意味します。
これはExcelファイルを作ることがシートやオートシェイプや時にはマクロを作ることと同じであることと似ています。
それらの異なる機能を持つ部品のかたまりがAccessデータベースなのです。
この「部品」のことをデータベースオブジェクトと呼びます。
- テーブル
- すべてのデータはこのテーブルに格納されます。テーブルは、ちょうどエクセルのシートとほぼ同じ外観をしています。新しいテーブルを作成するときには、フィールドの定義をしなければなりません。フィールドとは、Excelシートでいうと”A列”のことです。 同じテーブルのフィールドの値は、重なってはいけません。また、フィールドには必ずデータ型を指定する必要があります。データ型とは、その行(レコード)に、日付とか数値とか文字列とか、どんな種類の値が入るのか?ということです。Excelで、電話番号を入力したいセルの書式設定を”文字列”にしておかないと、先頭の0が省略されてしまいますね?あれと同じく、適切なデータ型を指定しておかないと、処理がおかしくなってしまうのです。 フィールドの定義が適切に終わると、もうデータを入力していくことができます。 一つのAccessデータベースファイルには、複数のテーブルを作成することができます。
- クエリ
- クエリとは、テーブルに格納されたデータを抽出、加工する機能です。データベースがデータベースであるゆえん、といっても良い重要なオブジェクトです。 Excelの機能でいうと、オートフィルタに似ています。たとえば、社員録のシートで所属部署が”総務部”でフィルタをかけると、総務部とある列だけが表示されますね?あれと似ています。 クエリを使用するにはこのように条件を指定する必要があります。 抽出だけでなく、複数のテーブルをひとつの条件で指定して表示したものを新しいテーブルとして作成することもできます。
- フォーム
- テーブルに格納されたデータの表示と追加・修正をするための専用画面です。社員の細かいデータまで含めたテーブルがあるとして、それの名前と年齢だけが分かればよい、というときには、その条件のクエリを作り、次に専用のフォームを作って表示させます。 Accessに本格的なGUI(グラフィカルユーザインタフェース)をもたらします。よくみるボタンやリストボックスやタブなどを使用することができます。
- レポート
- フォームがユーザがデータベースに値をインプットさせるためのオブジェクトだとすると、レポートはアウトプットするためのオブジェクトです。特に帳票などに紙に印刷することを主なターゲットとしています。よって、特に紙に印刷する必要性のないデータベースなら、使う機会は無いかもしれません。
- マクロ
- 簡単な機能の自動化のためにあります。マクロはExcelにもあるので理解はしやすいでしょう。しかし、Excelと違い”マクロの記録”機能はないです。あらかじめ用意されてアクションを選んでフォーム上のボタンなどに紐付けるということをします。この方法はAccessのライバルであるFileMakerのそれと似ています。
- モジュール
- VBAによるプログラミングを書いて保存しておく場所です。マクロで可能なことはすべてVBAで作成することができます。ただし、マクロのように”やりたいこと”(アクション)が分かり易く表示はされません。自分でVBAコードを書く必要があります。 とはいえ、その分高機能、多機能です。マクロには細かい条件による処理分けやエラー時の処理などが規定できます。実際、Acceessの作成者は、最初はマクロから始めても、じきに物足りなく、VBAの勉強を始めるのが一般です。 逆に言うと、それほどの多機能、高機能を求めないのであれば、使う機会がないままデータベースを運用していくことも不可能ではありません。
- ページ
- ウェブブラウザからデータベースに接続させる仕組みです。ただ、あまり出来がよろしくなく、2007からはなくなりました。本サイトでも紹介することはあまりないでしょう。
<まとめ>
データをインプットするオブジェクトです。
データをアウトプットするオブジェクトです。
データをインプットするための画面(主としてユーザのため)です。
データをアウトプットするための画面(主としてプリンタのため)です
データをプログラミングするためのオブジェクトです。
データをある程度自動化するためのオブジェクトです(プログラミングには劣ります)。
Tips: IMEの辞書にステートメントを登録してしまう
最初のころはIf文とかSelect Case文などを覚えるのは面倒です。
また、VBEditorは専門家が使う専用のエディタと比べ、機能が貧弱です。
それを補うために、ややこしいステートメントはIMEの辞書に登録してしまいましょう。
また、VBEditorは専門家が使う専用のエディタと比べ、機能が貧弱です。
それを補うために、ややこしいステートメントはIMEの辞書に登録してしまいましょう。
- せれけー → 「Select Case 値 Case 条件式 処理 Case Else デフォルトの処理 End Select」
- いふえる → 「If 条件式 Then 処理 ElseIf 条件式 Then 処理 Else デフォルト処理 End If」
- すくあぷ → 「ScreenUpdating」
Accessとは?
Accessとは、マイクロソフト社製のデータベースソフトです。
データベースソフトにもいろいろありますが、Accessは比較的小規模向けのものです。
データベースは、身近なものだと、例えば、会社の社員録などで使われていたりします。
「それならエクセルでも作れるじゃないか」と思われるかもしれませんが、エクセルだと
実際、Accessが購入されるのは小規模な会社や大きな会社の一部門などで、エクセルで運用していたものが、データが大きくなるなどして実用上の問題が起きたときなどがよくあります。
また、上記に加えてAccessの長所としては
さらに、最近ではかなり値段が安くなり、昔のような敷居の高さがだいぶ軽減されています。
国民のITリテラシーが上がり、HTMLやエクセル程度は専門家でなくても高度にこなせる人が増えました。
他の人と差をつけるためにも、Accessを使いこなせるようにするのはお薦めです。
データベースソフトにもいろいろありますが、Accessは比較的小規模向けのものです。
データベースは、身近なものだと、例えば、会社の社員録などで使われていたりします。
「それならエクセルでも作れるじゃないか」と思われるかもしれませんが、エクセルだと
- すぐに重くなる。
- 検索や抽出がAccessほど柔軟ではない。
- 扱えるデータがAccessより小さい。
実際、Accessが購入されるのは小規模な会社や大きな会社の一部門などで、エクセルで運用していたものが、データが大きくなるなどして実用上の問題が起きたときなどがよくあります。
また、上記に加えてAccessの長所としては
- エクセルに比べ、プログラミングを使用した利用法にスムーズに移行できる
- 印刷機能が充実している。エクセルだとデータを入力するシートは、そのまま印刷するイメージでもありますが、Accessであればデータは「テーブル」というデータの格納専用のところに保存され、印刷後のイメージとは分離しているので、同じデータを使用して、複数の印刷イメージを作ることができます。帳票作成時などに大変便利です。
- エクセルでいう「オートフィルタ」や「VLOOKUP関数」のような機能を、もっと高度に柔軟に利用できる。
- 同時に複数のユーザの利用が可能。データの追加、削除ができる。
- 中規模、大規模なデータベースへの移行も可能。同じマイクロソフト社製のプロ向けのデータベースサーバがあります。これにより、会社や部門が拡大したり、業務のデータベースへの依存度が 高まっても対応が可能です。
さらに、最近ではかなり値段が安くなり、昔のような敷居の高さがだいぶ軽減されています。
国民のITリテラシーが上がり、HTMLやエクセル程度は専門家でなくても高度にこなせる人が増えました。
他の人と差をつけるためにも、Accessを使いこなせるようにするのはお薦めです。
AccessVBA 基礎最速マスター
流行りの基礎文法最速マスターのAccessVBA版です。デザインとかはまだ全然です。見づらいと思いますが、しばらく我慢して読んでください。。。
今月末めどに完成予定させます!!
《用意するもの》
Access単体
または
MS-OfficeProfessional
《コーディングの準備》
付属するVBE(VisualBasicEditor)で記述する。
《データベースオブジェクト》
ウェブデータベースだと、プログラム言語にPHP、見た目はHTMLやCSS、データベースはMySQL
などと異なった技術を組み合わせて使用する。
Accessではそんなことはない。すべてAccessで行う。
Accessは以下の部品で構成されている。
VBEditorの起動 → Alt+F11
ヘルプの表示 → (調べたいステートメントを選択して)F1
《文法チェック》
Msgbox "Hello!!"
《コメント》
' コメント
【変数】
《変数の宣言》
Dim 変数名 As データ型
※データ型は省略するとVariant型になる。
例)Dim strUserName As String
《変数に代入》
変数名 = 代入する値
※左辺に右辺の値が代入される。
例)strUserName = "山田太郎"
《変数の取得》
オブジェクト名.プロパティ名 = 変数名
※プロパティの値に、変数の値が挿入される
例)tbxMemo.Value = strAnswer
変数名1 = 変数名2
※変数名1に変数名2の値が代入される。
intNew = intOld
【定数】
Const 定数名 As データ型 = 値
※変数と違い、宣言と同時に値を代入する。
例)Const TAX As Double = 0.05
【配列】
《配列の宣言》
Dim 配列名(インデックス番号) As データ型
※要素数は0からカウントするので「必要な数 - 1」となる。
例)Dim aryBaseballPlayers(8) As String
Dim 配列名( インデックス番号 1, インデックス番号 2) As データ型
※二次元配列。
Dim 配列名() As データ型
Redim 配列名(インデックス番号)
※すでに格納されていた要素は初期化される。
Dim 配列名() As データ型
Redim Preserve 配列名(インデックス番号)
※すでに格納されていた要素は保持される。
Dim 配列名 As Variant
配列名 = Array(要素1,要素2,要素3)
※バリアント型の変数を作成して、Array関数で挿入。
《配列に代入》
配列名(インデックス番号) = 値
※インデックス番号とは要素数の何番目かの数字。
例)aryBaseballPlayers(0) = "イチロー"
《配列の取得》
オブジェクト名.プロパティ = 配列(インデックス番号)
※プロパティの値に、配列のインデックス番号で指定した値が挿入される
例)tbxPlayerName.Value = aryBaseballPlayers(0)
配列名(インデックス番号) = 変数名
※変数の値が、インデックス番号で指定した配列の値に代入される。
aryBaseballPlayers(1) = strCaptain
【データ型】
※変数・定数・配列には、代入されるデータの種類に応じたデータ型があります。
指定されたデータ型により、その変数の値の処理や扱い方が異なってきます。、
エクセルのセルの書式設定で「文字列」とか「数値」などを指定することができますが、あれと似たようなことです。
条件分岐のステートメントとは、「ある条件を指定して、その条件が満たされる/満たされないことで、行う処理を変える」ことを言います。
例えば、あるレコードの”配偶者”というフィールドが「有」なら自動的に「結婚手当」フィールドを「要」に変え、そうじゃないなら「否」と挿入する、などの使い方ができます。
条件を満たすことを『True』とか『真(しん)』といいます。
逆に条件を満たさないことを『False』とか『偽(ぎ)』といいます。
※Select Case文の条件式
Case 1,2,3
『1または2または3』の意
Case = 1
『1』の意
Case 1 To 10
『1~10』の意
Case Is >=1
『1以上(比較演算子を使うときは、「Case Is」となる)』の意
Case Is <= 1
『1以下』の意
Case "東京都"
『東京都(文字列の時はダブルクォーテーションで囲む)』の意
【繰り返し処理】
指定した処理を繰り返したい場合に使用するステートメントです。ループ処理ともいいます。
繰り返す回数が決まっている場合に用いるステートメントと、回数が決まっておらず、指定した条件を満たすまでは何度でも繰り返すステートメントの2種類あります。
《あらかじめ回数が決まっている場合》
これはレコードの数だけ繰り返す場合などが当てはまります。
※カウンタ変数とは、普通の変数です(データ型は数値)。ただ、ループ処理では、繰り返す回数を入れる変数が必要になるので、その回数を入れる変数を慣例上カウンタ変数と呼んでいます。
※「(Step 加算値)」は省略できます。デフォルトでは加算されるのは1です。そうでない場合だけ、Stepで指定します。
→ 1,2,3,・・・と10回メッセージボックスに表示されます。
《要素の数だけ繰り返す》
繰り返し処理を、配列や同じオブジェクトのコレクションの各要素に対して行いたいときに使用します。
※要素変数とは配列を一時的に格納する変数です。各要素が順番に格納されることで要素の数だけ処理が繰り返されます。よって、Forステートメントと違い、回数を具体的に指定しなくて済むわけです。
※要素変数のデータ型は配列のときはVariant型、コレクションのときはVariant型またはオブジェクト型です。
→ Forステートメントで、配列arrHairetuの各要素に0~9までの数字を格納します。次のFor Each文で、配列arrHairetuの各要素が自動的にYousoHensuに格納され、一回一回処理されます。
《条件を満たしている間だけ繰り返す》
繰り返す処理を回数で指定するのでなく、条件を指定して、その条件が満たされている間、ずっと繰り返したいときに使用します。
《条件を満たすまで繰り返す》
繰り返す処理を回数で指定するのでなく、条件を指定して、その条件が満たされるまで、ずっと繰り返したいときに使用します。
Forms("フォーム名")
Forms!フォーム名
Forms![フォーム名]
Forms.フォーム名
《レポートの参照》
Report("レポート名")
Report !レポート名
Report ![レポート名]
Report .レポート名
(作成中)
今月末めどに完成予定させます!!
オリエンテーション
- AccessはテーブルとGUIとSQLとDBエンジンが一体になっている。
- 複数で共有できるが同時に10人程度が限度。
- 共有のDBファイルを使用するにもローカルPCにAccessは必要。
- Accessは単体で買っても昔と違ってけっこう安い。
- DBとしてはExcel以上SQLServer以下。
- 拡張子はMDBファイル。作成する時は、まず名前をつけて保存をする必要がある。
- プログラミング(VBA)をしないでもある程度は使える。
- Excelではファイルが重くなってしまった場合や共有を行いたい場合に使用される事が多い。
《用意するもの》
Access単体
または
MS-OfficeProfessional
《コーディングの準備》
付属するVBE(VisualBasicEditor)で記述する。
- Alt+F11
- コントロール(ボタンなどの部品)を右クリック → イベントのビルド → コードビルダを選択
《データベースオブジェクト》
ウェブデータベースだと、プログラム言語にPHP、見た目はHTMLやCSS、データベースはMySQL
などと異なった技術を組み合わせて使用する。
Accessではそんなことはない。すべてAccessで行う。
Accessは以下の部品で構成されている。
- テーブル : データを保存する場所
- フォーム : ボタンやテキストボックスのある登録/閲覧用のウィンドウ
- レポート : 印刷されたときの見た目
- クエリ : 指定した条件でデータを抽出したもの。
- モジュール : VBAのプログラミングコード
- マクロ : 用意された動作を指定したもの。ほとんど使われない。
- ページ : ウェブブラウザで使用できるようにしたもの。ほとんど使われない。
基礎
《ショートカットキー》VBEditorの起動 → Alt+F11
ヘルプの表示 → (調べたいステートメントを選択して)F1
《文法チェック》
Option Compare Databaseデフォルトで自動挿入される。テキストの比較順序を規定しています。
Option ExplicitVBEで設定する。変数の宣言を強制する。
[ツール] → [オプション] → ”編集”タブ → 「変数の宣言を強制する」
Msgbox "Hello!!"
《コメント》
' コメント
変数・定数・配列
【変数】
《変数の宣言》
Dim 変数名 As データ型
※データ型は省略するとVariant型になる。
例)Dim strUserName As String
《変数に代入》
変数名 = 代入する値
※左辺に右辺の値が代入される。
例)strUserName = "山田太郎"
《変数の取得》
オブジェクト名.プロパティ名 = 変数名
※プロパティの値に、変数の値が挿入される
例)tbxMemo.Value = strAnswer
変数名1 = 変数名2
※変数名1に変数名2の値が代入される。
intNew = intOld
【定数】
Const 定数名 As データ型 = 値
※変数と違い、宣言と同時に値を代入する。
例)Const TAX As Double = 0.05
【配列】
《配列の宣言》
Dim 配列名(インデックス番号) As データ型
※要素数は0からカウントするので「必要な数 - 1」となる。
例)Dim aryBaseballPlayers(8) As String
Dim 配列名( インデックス番号 1, インデックス番号 2) As データ型
※二次元配列。
Dim 配列名() As データ型
Redim 配列名(インデックス番号)
※すでに格納されていた要素は初期化される。
Dim 配列名() As データ型
Redim Preserve 配列名(インデックス番号)
※すでに格納されていた要素は保持される。
Dim 配列名 As Variant
配列名 = Array(要素1,要素2,要素3)
※バリアント型の変数を作成して、Array関数で挿入。
《配列に代入》
配列名(インデックス番号) = 値
※インデックス番号とは要素数の何番目かの数字。
例)aryBaseballPlayers(0) = "イチロー"
《配列の取得》
オブジェクト名.プロパティ = 配列(インデックス番号)
※プロパティの値に、配列のインデックス番号で指定した値が挿入される
例)tbxPlayerName.Value = aryBaseballPlayers(0)
配列名(インデックス番号) = 変数名
※変数の値が、インデックス番号で指定した配列の値に代入される。
aryBaseballPlayers(1) = strCaptain
【データ型】
※変数・定数・配列には、代入されるデータの種類に応じたデータ型があります。
指定されたデータ型により、その変数の値の処理や扱い方が異なってきます。、
エクセルのセルの書式設定で「文字列」とか「数値」などを指定することができますが、あれと似たようなことです。
| 型名 | 型指定文字 | 格納データの詳細 | 格納データ概要 |
|---|---|---|---|
| ブール型 | Boolean | True(真)またはFalse(偽)のどちらかを格納できる | 論理値 |
| バイト型 | Byte | 0~255までの整数を格納できる | 数値データ ※扱うデータの大きさで使い分ける |
| 整数型 | Integer | -32768~32767までの整数を格納できる | |
| 長整数型 | Long | -2,147,483,648~2,147,483,647までの整数を格納できる | |
| 通貨型 | Currency | -922,337,203,685,477.5808~922,337,203,685,477.5807 の固定小数点を格納できる | |
| 単精度浮動小数点型 | Single | -3.402823E38 ~ -1.401298E-45 (負の値) 1.401298E-45 ~ 3.402823E38 (正の値) | |
| 倍精度浮動小数点型 | Double | (負の値) -1.79769313486231E308 ~ -4.94065645841247E-324 (正の値) 4.94065645841247E-324 ~ 1.79769313486232E308 | |
| 日付型 | Date | 西暦100年1月1日00:00:00~西暦9999年12月31日23:59:59 の間の日付と時刻が格納できる | 日付・時刻 |
| 文字列型 | String | 任意の長さ(約2GB分)の文字列が格納できる | 文字列 |
| オブジェクト型 | Object | 何らかのオブジェクトへの参照を格納できる | オブジェクト |
| バリアント型 | Variant | あらゆる種類のデータを格納できる | すべて |
制御文
【条件分岐】条件分岐のステートメントとは、「ある条件を指定して、その条件が満たされる/満たされないことで、行う処理を変える」ことを言います。
例えば、あるレコードの”配偶者”というフィールドが「有」なら自動的に「結婚手当」フィールドを「要」に変え、そうじゃないなら「否」と挿入する、などの使い方ができます。
条件を満たすことを『True』とか『真(しん)』といいます。
逆に条件を満たさないことを『False』とか『偽(ぎ)』といいます。
If 条件式 Then
処理
End If
If 条件式 Then
条件が成立した時の処理
Else
条件が成立しなかった時の処理
End If
If 条件式① Then
条件式①が成立した時の処理
ElseIf 条件式② Then
条件式②が成立した時の処理
Else
すべての条件が成立しなかった時の処理(デフォルト)
End If
Select Case 条件判断の対象
Case 条件式①
条件式①を満たすときの処理
Case
条件式②を満たすときの処理
Case Else
すべての条件を満たさないときの処理(デフォルト)
End Select
※Select Case文の条件式
Case 1,2,3
『1または2または3』の意
Case = 1
『1』の意
Case 1 To 10
『1~10』の意
Case Is >=1
『1以上(比較演算子を使うときは、「Case Is」となる)』の意
Case Is <= 1
『1以下』の意
Case "東京都"
『東京都(文字列の時はダブルクォーテーションで囲む)』の意
【繰り返し処理】
指定した処理を繰り返したい場合に使用するステートメントです。ループ処理ともいいます。
繰り返す回数が決まっている場合に用いるステートメントと、回数が決まっておらず、指定した条件を満たすまでは何度でも繰り返すステートメントの2種類あります。
《あらかじめ回数が決まっている場合》
これはレコードの数だけ繰り返す場合などが当てはまります。
For カウンタ変数 = 初期値 To 終値 (Step 加算値)
繰り返す処理
Next
※カウンタ変数とは、普通の変数です(データ型は数値)。ただ、ループ処理では、繰り返す回数を入れる変数が必要になるので、その回数を入れる変数を慣例上カウンタ変数と呼んでいます。
※「(Step 加算値)」は省略できます。デフォルトでは加算されるのは1です。そうでない場合だけ、Stepで指定します。
Dim i as Long
For i = 1 to 10
MsgBox i
Next
→ 1,2,3,・・・と10回メッセージボックスに表示されます。
《要素の数だけ繰り返す》
繰り返し処理を、配列や同じオブジェクトのコレクションの各要素に対して行いたいときに使用します。
For Each 要素変数 In 配列orコレクション
繰り返す処理
Next
※要素変数とは配列を一時的に格納する変数です。各要素が順番に格納されることで要素の数だけ処理が繰り返されます。よって、Forステートメントと違い、回数を具体的に指定しなくて済むわけです。
※要素変数のデータ型は配列のときはVariant型、コレクションのときはVariant型またはオブジェクト型です。
Dim arrHairetu(9) As String
Dim YousoHensu As Variant
Dim i As Long
For i = 0 To 9
arrHairetu(i) = i
Next
For Each YousoHensu In arrHairetu
MsgBox YousoHensu
Next
→ Forステートメントで、配列arrHairetuの各要素に0~9までの数字を格納します。次のFor Each文で、配列arrHairetuの各要素が自動的にYousoHensuに格納され、一回一回処理されます。
《条件を満たしている間だけ繰り返す》
繰り返す処理を回数で指定するのでなく、条件を指定して、その条件が満たされている間、ずっと繰り返したいときに使用します。
Do While 条件式
繰り返す処理
Loop
《条件を満たすまで繰り返す》
繰り返す処理を回数で指定するのでなく、条件を指定して、その条件が満たされるまで、ずっと繰り返したいときに使用します。
Do Until 条件式
繰り返す処理
Loop
フォーム/レポートの参照
《フォームの参照》Forms("フォーム名")
Forms!フォーム名
Forms![フォーム名]
Forms.フォーム名
《レポートの参照》
Report("レポート名")
Report !レポート名
Report ![レポート名]
Report .レポート名
(作成中)
配列 ~スタンダード~
配列とは「複数の値を一つの変数に格納すること」と言います。
1.概略
たとえば野球チームの選手を通常の変数に格納するとすればこのようになります。
Dim player01 As String
Dim player02 As String
Dim player03 As String
・・・
player01 = "イチロー"
player02 = "松坂"
player03 = "長嶋"
・・・
これだと野球選手の数だけ変数を用意する必要があり、不便です。
配列ではこうします。
Dim player(8) As String
player(0) = "イチロー"
player(1) = "松坂"
player(2) = "長嶋"
一行目の
Dim player(8) As String
とは、配列 playerを要素数(配列の数)を指定して、宣言しています。
野球選手は9人なので9個あれば良いのですが、「8」としているのは、配列の要素数(インデックス番号とか添え字ともいいます)は「0」から始まるからです。
監督まで含めて10人分欲しい、というなら、「player(9)」と指定すればよいわけです。
2.多次元配列
選手の名前だけでなく、ポジションまで含めて配列で管理したいとします。
その場合は、インデックス番号を2つ用意します。
Dim player(8,1) As String
player(0,0) = "イチロー"
player(0,1) = "ライト"
player(1,0) = "松坂"
player(1,1) = "ピッチャー"
player(2,0) = "長嶋"
player(2,1) = "サード"
これはとても便利ですが、いまいちイメージがわかないと思います。
これは表にすると分かり易いです。
二次元配列の構文は下記のようになります。
Dim 変数名(行数 - 1, 項目数 - 1) As データ型
「Dim 配列名(8,2) As String」とした場合下記のようになります。
1.概略
たとえば野球チームの選手を通常の変数に格納するとすればこのようになります。
Dim player01 As String
Dim player02 As String
Dim player03 As String
・・・
player01 = "イチロー"
player02 = "松坂"
player03 = "長嶋"
・・・
これだと野球選手の数だけ変数を用意する必要があり、不便です。
配列ではこうします。
Dim player(8) As String
player(0) = "イチロー"
player(1) = "松坂"
player(2) = "長嶋"
一行目の
Dim player(8) As String
とは、配列 playerを要素数(配列の数)を指定して、宣言しています。
野球選手は9人なので9個あれば良いのですが、「8」としているのは、配列の要素数(インデックス番号とか添え字ともいいます)は「0」から始まるからです。
監督まで含めて10人分欲しい、というなら、「player(9)」と指定すればよいわけです。
2.多次元配列
選手の名前だけでなく、ポジションまで含めて配列で管理したいとします。
その場合は、インデックス番号を2つ用意します。
Dim player(8,1) As String
player(0,0) = "イチロー"
player(0,1) = "ライト"
player(1,0) = "松坂"
player(1,1) = "ピッチャー"
player(2,0) = "長嶋"
player(2,1) = "サード"
これはとても便利ですが、いまいちイメージがわかないと思います。
これは表にすると分かり易いです。
| イチロー | ライト |
| 松坂 | ピッチャー |
| 長嶋 | サード |
| 名前 | ポジション4 |
| 名前 | ポジション5 |
| 名前 | ポジション6 |
| 名前 | ポジション7 |
| 名前 | ポジション8 |
| 名前 | ポジション9 |
二次元配列の構文は下記のようになります。
Dim 変数名(行数 - 1, 項目数 - 1) As データ型
「Dim 配列名(8,2) As String」とした場合下記のようになります。
| 0,0 | 0,1 |
| 1,0 | 1,1 |
| 2,0 | 2,1 |
| 3,0 | 3,1 |
| 4,0 | 4,1 |
| 5,0 | 5,1 |
| 6,0 | 6,1 |
| 7,0 | 7,1 |
| 8,0 | 8,1 |
DoCmdオブジェクトの使い方
DoCmdオブジェクトを用いると、VBAでAccessの機能を実行するコードを書くことができます。
たとえば、DoCmdオブジェクトのOpenFormメソッドは”フォームを開く”機能を持ちますし、Hourglassメソッドはマウスポインタを砂時計に変更したりできます。
そういったことがプログラミングできるのです。
さて、ほとんどのDoCmdオブジェクトは”引数”を指定します。
引数というのは耳慣れない言葉かも知れませんが、エクセルのワークシート関数で用いられるのと同じ意味です。エクセルではセルの中で「=SUM(A1:A10)」とすると、セルA1からA10までのセルの値を合計しました。このときの”A1:A10”が引数です。SUMという<動詞>に与えられた<目的語>のようなものです。
引数には必須なものとオプションのものがあります。
オプションの引数を省略すれば、そのメソッドのデフォルト値が適用されます。
たとえば、OpenFormメソッドは7つの引数を持ちますが、一番目の引数であるFormNameをのぞいてすべてオプションです。
さて、実際にコードの例を見てみましょう。
以下のようにすると、住所フィールドが”東京都”のレコードだけを抜き出して、フォーム「F_顧客リスト」を表示します。
DoCmd.OpenForm "F_顧客リスト", , , "[住所] = '東京都'"
また、以下のようにすると、「F_顧客リスト」を新しいレコードを追加できる状態で表示します。
Sub AddNewRecord()
DoCmd.OpenForm "F_顧客リスト", acNormal
DoCmd.GoToRecord , , acNewRec
End Sub
このコードをボタンなどのイベントとして紐づけると、そのボタンをクリックすればDoCmdオブジェクトの便利な機能をしようできるわけです。
たとえば、DoCmdオブジェクトのOpenFormメソッドは”フォームを開く”機能を持ちますし、Hourglassメソッドはマウスポインタを砂時計に変更したりできます。
そういったことがプログラミングできるのです。
さて、ほとんどのDoCmdオブジェクトは”引数”を指定します。
引数というのは耳慣れない言葉かも知れませんが、エクセルのワークシート関数で用いられるのと同じ意味です。エクセルではセルの中で「=SUM(A1:A10)」とすると、セルA1からA10までのセルの値を合計しました。このときの”A1:A10”が引数です。SUMという<動詞>に与えられた<目的語>のようなものです。
引数には必須なものとオプションのものがあります。
オプションの引数を省略すれば、そのメソッドのデフォルト値が適用されます。
たとえば、OpenFormメソッドは7つの引数を持ちますが、一番目の引数であるFormNameをのぞいてすべてオプションです。
さて、実際にコードの例を見てみましょう。
以下のようにすると、住所フィールドが”東京都”のレコードだけを抜き出して、フォーム「F_顧客リスト」を表示します。
DoCmd.OpenForm "F_顧客リスト", , , "[住所] = '東京都'"
また、以下のようにすると、「F_顧客リスト」を新しいレコードを追加できる状態で表示します。
Sub AddNewRecord()
DoCmd.OpenForm "F_顧客リスト", acNormal
DoCmd.GoToRecord , , acNewRec
End Sub
このコードをボタンなどのイベントとして紐づけると、そのボタンをクリックすればDoCmdオブジェクトの便利な機能をしようできるわけです。
登録:
投稿 (Atom)