小さい会社の1人SEの開発記というか奮戦記

  1. Excel
  2. 4421 view

VBAでAccessにSQL文を発行してデータをExcelに挿入する

エクセルのVBAからアクセスの Northwind データーベースに接続し、SQL文を発行して条件の合うデータをエクセルのワークシートに取り込みます。

条件整理

Accessファイル D:¥db¥NorthWind.accdb
インポート元 テーブル「Employees」
インポート先 Excelシート名「Sheet1」セルA5
処理 First Name が Nancy と合致するもの

ExcelからAccessに接続するには準備が必要です。事前に「ExcelからVBAでデーターベースを使う準備」を参照しておいて下さい。

VBAでのデータ取り込み手順

一連の手順をまとめると以下となります。

  1. 変数の宣言
  2. データベースに接続
  3. 取得したデータをワークシートに挿入する
  4. データベースの接続を解除する

変数の宣言

Dim strfn As String ‘アクセスファイル名
Dim adocn As Object ‘ADOコネクションオブジェクト
Dim adors As Object ‘ADOレコードセットオブジェクト
Dim strsq As String ‘SQL文

データベース接続

‘  アクセスファイル名
strfn = “D:¥db¥NorthWind.accdb”

‘  ADOコネクションオブジェクトを作成
Set adocn = CreateObject(“ADODB.Connection”) 

‘  Accessファイルに接続(アクセスに接続する場合の決まり文句だと思って下さい)
adocn.Open “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” & strfn & “;”

‘  ADOレコードセットオブジェクトを作成
Set adors = CreateObject(“ADODB.Recordset”)

データをワークシートに挿入

‘  検索のためのSQL文、ダブルクオート(“)をSQL文に入れたい時は2つ連続して書きます。
strsq = “SELECT * FROM Employees WHERE [First Name] = “”Nancy”””

‘  作成したSQL文でRecordSetを作成
adors.Open strsq, adocn 

‘  セルA5にRecordSetのデータを挿入
Range(“A5”).CopyFromRecordset adors

データベース接続解除

‘  レコードセットのクローズ
adors.Close

‘  コネクションのクローズ
adocn.Close

‘  オブジェクトの破棄
Set adors = Nothing
Set adocn = Nothing

まとめ

[ ボタン 1 ]をクリックするとセルA5にデータが挿入されます。

 

作成したVBAは以下の通りです。

Sub ボタン1_Click()

'   変数宣言
Dim strfn As String '  アクセスファイル名
Dim adocn As Object '  ADOコネクションオブジェクト
Dim adors As Object '  ADOレコードセットオブジェクト
Dim strsq As String '  SQL文

'   アクセスファイル名
strfn = "D:\db\NorthWind.accdb"
 
'  データベース接続 
Set adocn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成
adocn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strfn & ";" 'Accessファイルに接続
Set adors = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成
 
strsq = "SELECT * FROM Employees WHERE [First Name] = ""Nancy"""
adors.Open strsq, adocn 'SQLを実行して対象をRecordSetへ
Range("A5").CopyFromRecordset adors 'レコードセットのデータをセルA5に挿入

'  データベース接続解除 
adors.Close 'レコードセットのクローズ
adocn.Close 'コネクションのクローズ
 
Set adors = Nothing  'オブジェクトの破棄
Set adocn = Nothing
     
End Sub

 

SQL文をそのままVBAに埋め込んでしまうと、汎用性に欠けてしまいます。

次回はワークシートに入力した値を検索条件にSQL文を発行するサンプルを作成します。

関連記事 →「ExcelからVBAでデーターベースを使う準備
関連記事 →「VBAでAccessのテーブルの内容を全てExcelに挿入する

Excelの最近記事

  1. 日本語をエンコードする【Excel VBA】

  2. 商品コードなど長い数値だけの文字列を指数表示させない【Excel VBA】

  3. VBAで改行を指定する【Excel】

  4. 入力規則のプルダウン連携【Excel】

  5. 最短手順で計算式を保護する【Excel】

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


お薦め書籍

最近の記事

  1. Access

    Accessの数値型ではまる・・・。
  2. Excel

    日本語をエンコードする【Excel VBA】
  3. Access

    クエリで日付から曜日を算出する。【Access】
  4. PCパーツ

    ASUS AMD Ryzen 4000 シリーズ搭載小型ベア…
  5. Microsoft365

    コンデジをTeamsのWebカメラに使う
  6. SQL Server

    SQL文で今日から7日前までを指定する