SQL入門
全テーブル定義とテーブル自動作成VBA

SQLの初心者向け入門解説、VBAからデータベースを扱うためのSQLを解説
公開日:2013年5月以前 最終更新日:2019-12-17

全テーブル定義とテーブル自動作成VBA


データベースの正規化とマスタの作成 で作成した全テーブル定義と、

・データベース正規化とは ・マスタデータとトランザクションデータ ・正規化したテーブル定義 ・非正規化から正規化したテーブルを作成 ・データベース正規化の最後に
テーブル名変更と列追加(ALTER TABLE)とテーブル自動作成 で作成したテーブル自動作成VBAを掲載しておきます。
・テーブル名変更:ALTER TABLE RENAME TO ・カラム(列)追加:ALTER TABLE ADD COLUMN ・SQLの半角空白と改行とセミコロン ・テーブル自動作成 ・テーブル名変更と列追加とテーブル自動作成の最後に

テーブル:m_customer

テーブル名
m_customer
列名 NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE DEFAULT
1 code TEXT
2 name TEXT
2 address TEXT

CREATE TABLE m_customer (
 "code" TEXT NOT NULL
,"name" TEXT NOT NULL
,"address" TEXT
,PRIMARY KEY (code)
);

テーブル:m_item

テーブル名
m_item
列名 NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE DEFAULT
1 item_code TEXT
2 item_name TEXT

CREATE TABLE m_item (
 "item_code" TEXT NOT NULL
,"item_name" TEXT NOT NULL
,PRIMARY KEY (item_code)
);

テーブル:t_sales

テーブル名
t_sales
列名 PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE DEFAULT
1 id INTEGER
2 code TEXT
3 sales_date TEXT
4 item_code TEXT
5 item_price INTEGER
6 item_count INTEGER
7 comment TEXT

CREATE TABLE t_sales (
 "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
,"code" TEXT NOT NULL
,"sales_date" TEXT
,"item_code" TEXT
,"item_price" INTEGER
,"item_count" INTEGER
,"comment" TEXT
);

テーブル自動作成

Sub CreateTableFromSheet()
  Dim clsDB As New clsSQLite
  clsDB.DataBase = "C:\SQLite3\sample.db"
  
  Dim ws As Worksheet
  Dim tblName As String
  Dim sSql As String
  
  Set ws = ActiveSheet
  tblName = ws.Range("B2") 'テーブル名
  
  'テーブル削除
  sSql = "DROP TABLE " & tblName
  Call clsDB.ExecuteNonQuery(sSql)
  
  'テーブル追加
  sSql = CreateSql(ws, tblName)
  If Not clsDB.ExecuteNonQuery(sSql) Then
    MsgBox clsDB.ErrMsg
    Exit Sub
  End If
  
  Set clsDB = Nothing
End Sub

Function CreateSql(ByVal ws As Worksheet, _
          ByVal tblName As String) As String
  Const sRow As Long = 4
  Dim sSql As String
  Dim i As Long, j As Long
  Dim maxRow As Long, maxCol As Long
  Dim pkCol As Long, aiCol As Long, dfCol As Long
  Dim isAutoInc As Boolean, strPk As String
  With ws
    maxRow = .Cells(.Rows.Count, 2).End(xlUp).Row
    maxCol = .Cells(sRow, .Columns.Count).End(xlToLeft).Column
    pkCol = Application.Match("PRIMARY KEY", .Rows(sRow), 0)
    aiCol = Application.Match("AUTOINCREMENT", .Rows(sRow), 0)
    dfCol = Application.Match("DEFAULT", .Rows(sRow), 0)
    sSql = "CREATE TABLE " & tblName & " (" & vbCrLf
    For i = sRow + 1 To maxRow
      sSql = sSql & IIf(i = sRow + 1, " ", ",")
      sSql = sSql & """" & .Cells(i, 2) & """ " & .Cells(i, 3)
      If .Cells(i, aiCol) <> "" Then isAutoInc = True
      For j = 4 To maxCol
        If .Cells(i, j) <> "" Then
          If isAutoInc Or j <> pkCol Then
            sSql = sSql & " " & .Cells(sRow, j)
            If j = dfCol Then
              sSql = sSql & " " & .Cells(i, j)
            End If
          End If
          If Not isAutoInc And j = pkCol Then
            If strPk <> "" Then strPk = strPk & ","
            strPk = strPk & .Cells(i, 2)
          End If
        End If
      Next
      sSql = sSql & vbCrLf
    Next
    If strPk <> "" Then
      sSql = sSql & ",PRIMARY KEY (" & strPk & ")" & vbCrLf
    End If
    sSql = sSql & ");"
  End With
  CreateSql = sSql
End Function



同じテーマ「SQL入門」の記事

SQL関数と演算子
データベースにおけるNULLの扱い方
データベースの正規化とマスタの作成
全テーブル定義とテーブル自動作成VBA
テーブルを結合して取得(INNER JOIN,OUTER JOIN)
複数のSELECT結果を統合(UNION,UNION ALL)
データの更新(UPDATE)
データの削除(DELETE)
他のテーブルのデータで追加/更新/削除
インデックスを作成して高速化(CREATE INDEX)
トランザクション処理


新着記事NEW ・・・新着記事一覧を見る

ハイフン区切り文字列の『最初』と『最後』を抽出・結合|エクセル練習問題(2026-02-23)
AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ