ACCESS VBA テーブルを作成する方法

ACCESS VBA テーブルを作成する方法

ACCESSのデータ格納の基本単位はテーブルです。
ACCESSの画面操作でテーブルを作成するのは簡単ですが、VBAのプログラム内で新規テーブルを作成したい場合はどうすればよいでしょうか。
ACCESS VBAの基本機能ではテーブルを作成する機能がありません。

しかし、SQLを使用することでVBAから新規のテーブル作成が可能です。

今回は、SQLを使ってテーブルを作成する方法についてご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

VBAでのテーブル操作

VBAを使いこなしてくると、DLookup関数やDsum関数でVBA側からテーブルの値を取得することも多くなるでしょう。
そうなると逆にVBAからテーブルを新しく作成するというケースも出てきます。

しかし、VBAに標準で用意された関数では、テーブルから値を取得したり、クエリやフォームの操作はできるものの、テーブルを作成できる関数がありません、

VBAから直接テーブルを操作するためには、SQLというデータベース言語の利用が必要になります。

SQLを使うと、レコードの新規作成、更新、抽出、削除、グループ化など様々な操作ができます。

Microsoft SQL ServerやOracleなど、多くのデータベースソフトウェアでもサポートされており、グローバルで一般的なデータベース操作言語と言えます。
今回はADOとSQLを使ってテーブル作成をします。

SQLを使った新規テーブル作成プログラム

では実際に、SQLを使ってテーブルを作成するプログラムを見てみましょう。


DoCmd.RunSQL "CREATE TABLE T_create1 (ID LONG PRIMARY KEY,日付 DATE);"

ACCESSでSQLを使用する場合は、DoCmd.RunSQLメソッドを利用します。

DoCmd.RunSQLのあとの””で囲われた部分が実行されるSQL文です。

テーブルを作成する際には、CREATE TABLEという構文を使用します。
上記の例では、「T_create1」というテーブル名で、フィールドにIDと日付があるテーブルを作成する、という命令をしています。

ID、日付の後にある、LONGやDATEはデータ型を指定しています。
LONGは数値型(長整数型)、DATEは日付/時刻型を指定します。

また、PRIMARY KEYは主キー設定の指定になります。

上記のプロシージャを実行すると、下記のテーブルが作成されます。

デザインビューで見ると下記の設定で、指定通りのデータ型になっていることがわかります。

なお、SQL文には他にも以下のような種類の構文があります。

SELECT ・・・ FROM ・・・レコードの抽出
UPDATE ・・・ SET ・・・ レコードの更新
INSERT ・・・ INTO ・・・レコードの追加
DELETE ・・・ from ・・・ レコードの削除

既存のテーブルから新しいテーブルを作成するプログラム

上記で説明したのは、最も基礎的なテーブル作成の方法ですが、ACCESSを使用していてVBAでテーブルを作成する際は、この方法はあまり使用しません。
ACCESS自体がデータベースソフトウェアなので、既存のテーブルやクエリを基に新しいテーブルを作成するケースのほうが多いのです。

そこで、既存のテーブルを基に新しいテーブルを複製する方法もご説明します。


DoCmd.RunSQL "SELECT * INTO T_create2 FROM TRN_売上;"

こちらも同様に DoCmd.RunSQL を使用します。

SQL文の内容は、TRN_売上テーブルから( FROM TRN_売上 )、すべてのフィールドを選択し( SELECT * )、T_create2テーブルを作成する( INTO T_create2 )というものです。

この命令を実行するとテーブルが複製されます。
もし、テーブルのフィールドフォーマットのみを使用したいので、レコードは不要という場合には、上記の後に


DoCmd.RunSQL "DELETE* from T_create2;"

と、DELETEでレコードを削除する命令を実行すれば問題ありません。

なお、こうしたレコード操作を行うと、実行時にACCESSの画面上では下記のような確認メッセージが表示されます。

VBAで自動実行している際は、ユーザーにこうした画面を見せたくないというケースも多いでしょう。

そんな時はDoCmd.SetWarningsを使用することでメッセージの表示を回避できます。

ここまでの一連の流れをまとめてコードで記載すると下記のようになります。


DoCmd.SetWarnings False

DoCmd.RunSQL "SELECT * INTO T_create2 FROM TRN_売上;"
DoCmd.RunSQL "DELETE* from T_create2;"

DoCmd.SetWarnings True

最初の「 DoCmd.SetWarnings False 」でメッセージ表示をしないようにしたうえで、SQLによるテーブル操作を行い、最後に「 DoCmd.SetWarnings True 」でメッセージ表示を元に戻しています。

以上、テーブルを作成する方法について紹介しました。

ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。

前の記事

ACCESS VBAとは

次の記事

ACCESS マクロの使い方