【Excelマクロ(VBa)】SQLサーバーへのアクセス


 参照設定


Excelマクロを使ってSQLサーバーと通信をする方法はいくつかあるかと思いますが、私がいつも行ってる方法をご紹介します。

1.まず[ツール]-[参照設定]から「参照設定」画面を起動します。



2.「Microsoft ActiveX Data Object x.x Library」にチェックが無ければチェックをし、[OK]ボタンを押します。(x.xはライブラリのバージョンです)





 SQLサーバーへの接続処理


下記のようにコーディングします。

'■ 変数設定
Dim oCon As ADODB.Connection

'■ オブジェクト生成
Set oCon = New ADODB.Connection

'■ SQLサーバーへ接続
oCon.Provider = "SQLOLEDB"
oCon.ConnectionString = "Persist Security Info=False;" & _
            "Data Source=ホスト名 or IPアドレス;" & _
            "Initial Catalog=データベース名;" & _
            "User ID=ユーザID;" & _
            "Password=パスワード"



 SQL文の発行処理


下記のようにコーディングします。(テーブル名:BumonTB をselectする)

'■ 変数設定
Dim oRS As ADODB.Recordset

'■ オブジェクト生成
Set oRS = New ADODB.Recordset

'■ SQL文の発行
oRS.ActiveConnection = oCon
oRS.Source = "select * from BumonTB"
oRS.Open



 値の取得


値を変数に代入する際、値が NULL の場合にエラーとなるため、NULLのチェックをした方が良いです。NULLのチェックをし、値を変数へ代入するには下記のようにコーディングします。

'変数定義
Type Bumon
  Code As String
  Name As String
End Type

Global BumonData(10000) As Bumon
Global MaxBumonCnt As Integer

'カウンターの初期化
MaxBumonCnt = 0
Do Until oRS.EOF
  '値の代入 oRS.Fields("項目名")
  If Not (IsNull(oRS.Fields("BumonCD"))) Then
    BumonData(MaxBumonCnt).Code = oRS.Fields("BumonCD")
  End If

  If Not (IsNull(oRS.Fields("Bumon"))) Then
    BumonData(MaxBumonCnt).Name = oRS.Fields("Bumon")
  End If

  'カウンターの更新
  MaxBumonCnt = MaxBumonCnt + 1

  '次のレコードに移る
  oRS.MoveNext
Loop



 SQLサーバーの切断処理


SQLサーバーの切断方法は下記のようにコーディングします。

'■ SQLサーバーの切断
oRS.Close
oCon.Close

If Not oRS Is Nothing Then Set oRS = Nothing
If Not oCon Is Nothing Then Set oCon = Nothing

管理人 について

趣味:映画鑑賞・音楽鑑賞・ゲーム・旅行 仕事:会社員(IT関連)
カテゴリー: VBa(Excelマクロ), システム開発 パーマリンク

コメントを残す