VBA技術解説
VBAでのSQLの基礎(SQL:Structured Query Language)

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2013-06-04 最終更新日:2021-07-14

VBAでのSQLの基礎(SQL:Structured Query Language)


SQL(Structured Query Language:構造化問い合わせ言語)は、データベースの定義や表の操作を行う言語です。
(正確にはこの略称ではないが、説明の便宜上記載しています。)


データ定義言語であるDDL(data description language)と
データ操作言語であるDML(data manipulation language)に分けられます。

DDLはデータベースの定義を行うためのSQLです。
DMLはデータベースにおけるデータの操作を行うためのSQLで、データの抽出や更新、追加、削除を行います。
ここでは、DMLのSELECTについて主に解説します。


SQL文

  主に以下の命令文があります。
  SELECT    データの抽出(検索)
  UPDATE    データの更新
  INSERT    データの追加
  DELETE    データの削除


SELECT文

SELECT select_expression [ , select_expression … ] 
[ FROM table_name [ , table_name …] ]
[ WHERE where_expression ]
[ GROUP BY group_expression [ , group_expression …]
[ ORDER BY order_expression [ , order_expression …] ]

select_expression
抽出したいテーブルのフィールドを指定します。
[テーブル名.]フィールド名
カンマ(,)で区切って、複数の指定が可能です。
フィールド名が他のテーブルと重複していない場合は、テーブル名を省略できます。
フィールドには別名を付けることができます。
[テーブル名.]フィールド名 AS 別名

table_name
テーブル名を指定します。
カンマ(,)で区切って、複数の指定が可能です。
フィールドには別名を付けることができます。
テーブル名 AS 別名

テーブルの結合
INNER [OUTER] JOIN 内部結合。
結合する両方のテーブルに同一データがある場合のみ対象となります。
LEFT [OUTER] JOIN 左外部結合。
結合する左側のテーブルにデータがある場合は全て対象となります。
RIGHT [OUTER] JOIN 右外部結合。
結合する右側のテーブルにデータがある場合は全て対象となります。
ON 結合条件式を記述します。
AND OR が使用できます。
※[OUTER]は省略可能です。

FROM tableA AS A LEFT JOIN tableB as B ON A.ID = B.ID

SQLでは、半角スペースで区切れる場所で適宜改行することができます。

FROM tableA AS A
LEFT JOIN tableB as B
ON A.ID = B.ID

tableAを別名A、tableBを別名B
AのIDとBのIDで左外部結合(結合しない場合もAがあれば全て)しています。


where_expression
抽出する条件式を記述します。
[テーブル名.]フィールド名 = 値

group_expression
グループ化するフィールドを指定します。
[テーブル名.]フィールド名
カンマ(,)で区切って、複数の指定が可能です。

order_expression

並べ替えするフィールドを指定します。
[テーブル名.]フィールド名 [ ASC | DESC]
カンマ(,)で区切って、複数の指定が可能です。
ASC  昇順
DESC  降順
省略時はASC

使用できる関数

SQLには使用できる関数が多数用意されています。
ただし、関数についてはデータベースごとに結構違いがありますので注意してください。
例えば、文字列を部分抽出する関数は、
SUBSTR
SUBSTRING
このように関数名が違うものもあります。
扱うデータベースによって書き方を変更する必要があることは常に注意しておいてください。

SQLの簡単な例文

SELECT T.cd,M.name
FROM trn AS T
LEFT JOIN mst M
ON T.cd = M.cd
WHERE T.cd >= 100
ORDER BY T.CD

改行せずに、半角スペースで区切って続けて書いても良いです。
ただし、読みやすいように適宜改行したほうが良いでしょう。

trnのcdとmstのnameを出力
テーブルtrnとテーブルmstをcdで左外部結合
trnのcdが100以上のもののみ対象

データベースごとに管理用のソフトがいろいろとあります。
そこでは、GUIエディターで、ドラッグ&ドロップとクリックでSQLが作成できるものが多数あります。

VBA マクロ SQL


SQLの学習について

SQL文は非常に奥が深く、専門書も多く出ています。
ここでは、基本のSELECTのみ掲載しました。
エクセルVBAで使うSQL分は、ほとんどがSELECTになるでしょう。
SELECTだけでも、使い方・書き方は非常に複雑です。
書籍・WEBページで学習してください。

ただし、何事もそうですが、実際に動かしてみないと覚えられないと思います。
練習用のデータベースを用意して、いろいろ試してみることが一番良いでしょう。
無料のデータベースがいくつもありますので、どれでも良いので環境構築してみてください。

SQLは、データベースによって若干の違い(結構違う部分もある)がありますが、基本的な書き方は変わりません。
一つのデータベースである程度覚えてしまえば、他のデータベースを扱う時はその違いだけ意識すれば良いでしょう。

新シリーズ「SQL入門」を開始しました。
・DBとはSQLとは ・SQL入門の目次 ・SQLを使った既存サンプル
データベース(SQLite3)の導入からSQLの基礎そして応用まで、より詳しくSQLについて解説しています。


実践例

以下は、ADODBでSQL文を使っているサンプルを掲載している記事です。

ADOでマスタ付加と集計(SQL)
VBAでADOを使用し、マスターデータよりデータ付加します。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を料略します。自身の他シートから、マスタ情報を付加し、さらに、集計をします。
ADOでマスタ更新(SQL)
VBAでADOを使用し、マスターデータを更新します。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を料略します。自身のブックの、他シートを更新します。シート「顧客マスタ」の、A列が顧客番号、B列が顧客名で、1行目が見出しになっているものとします。
ADOでCSV読み込み(SQL)
・CSVテストデータ ・ADOでCSV読込のVBA ・ADO使用時の注意点 ・ADOレコードセットをCSV出力 ・ADOでTSVの読み込み ・ADOでCSVの読み込みについて ・本サイトにあるCSV関連記事一覧
VBA100本ノック 96本目:Accessデータを取得(マスタ結合&抽出)
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
VBA100本ノック 97本目:Accessデータを取得(グループ集計)
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
ADO(ActiveX Data Objects)の使い方の要点
・データベースの種類 ・SQL(SQL:Structured Query Language) ・ADOを使う準備 ・ADOでのDB接続方法 ・ADODB.Recordsetの取得方法 ・ADODBのレコードセットの扱い方 ・ADODBのトランザクション処理 ・ADODB.Commandの使い方 ・VBA100本ノックでの実践例 ・最後に注意点等




同じテーマ「マクロVBA技術解説」の記事

Dictionary(ディクショナリー)連想配列の使い方について

・Dictionaryを使って重複を除く ・Dictionaryの使い方その2 ・Dictionaryの使い方その3 ・Dictionaryの使い方サンプル ・サイト内のDictionary関連記事
Dictionary(ディクショナリー)のパフォーマンスについて
・Dictionaryの検証に使うシート ・ユニーク化(重複削除)の方法について ・Dictionaryでユニーク化1 ・Dictionaryでユニーク化2 ・Dictionaryでユニーク化3 ・Dictionaryでユニーク化4 ・最初のVBAはなぜ遅かったのか ・Dictionaryを使わない方法 ・サイト内の関連ページ
VBAでのInternetExplorer自動操作
・VBEの参照設定 ・InternetExplorerの開始と終了 ・HTMLオブジェクトの操作 ・VBAでのInternetExplorer操作例 ・WEBクローリング&スクレイピングのサイト内参考ページ
VBAでのSQLの基礎(SQL:Structured Query Language)
VBAで正規表現を利用する(RegExp)
・メタ文字 ・正規表現 ・正規表現RegExpの使い方 ・RegExpオブジェクト ・RegExpの使用例 ・RegExp関連のオブジェクト ・Execute(Matches,Match,SubMatches)の使用例 ・Replaceの使用例 ・先読み:肯定先読み、否定先読み ・正規表現の実践例
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
・バインディング方法 ・CDOを使ったメール送信のサンプルVBA ・CDOのプロパティ ・CDOのメソッド ・CDO.Configuration.Fields.Item ・CDO.Fields.Item ・ConstantやEnumについて
VBAでのOutlook自動操作
・Outlookインスタンスの生成と、ログオン、全て送受信 ・Outlookを起動して指定フォルダーを表示 ・フォルダーの取得 ・メールの一覧を取得 ・メールを送信 ・メールを返信 ・最後に
ADO(ActiveX Data Objects)の使い方の要点
・データベースの種類 ・SQL(SQL:Structured Query Language) ・ADOを使う準備 ・ADOでのDB接続方法 ・ADODB.Recordsetの取得方法 ・ADODBのレコードセットの扱い方 ・ADODBのトランザクション処理 ・ADODB.Commandの使い方 ・VBA100本ノックでの実践例 ・最後に注意点等
特殊フォルダの取得(WScript.Shell,SpecialFolders)
・WScript.Shell ・SpecialFolders プロパティ ・WshShellのSpecialFoldersのマクロVBA使用例
参照設定、CreateObject、オブジェクト式の一覧
VBAでエクセル外のオブジェクトを使うときには、事前バインディングと遅延バインディング(実行時バインディング)の2通りがあります、この時それぞれ何を指定したらよいのか、指定する文字列が長いので結構探してしまうことが度々あります。そこで、自身の覚え書きとしての意味も含めて、参照設定、CreateObjectのclas…
VBAのスクレイピングを簡単楽にしてくれるSelenium
・SeleniumBasicのインストール ・VBEでの参照設定 ・WEBサイトを表示してみましょう ・Seleniumの基本的な使い方(株価情報を取得してみる) ・色々なパターンでのseleniumの使い方 ・色々組み合わせて目的の画面にたどり着きます ・elementをコレクションで取得する ・新規ページが開かれる場合 ・上手くいかない特殊な場合の対処方法 ・Seleniumの実践例例 ・最後に


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

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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