参照設定
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=パスワード"
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
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
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
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
oRS.Close
oCon.Close
If Not oRS Is Nothing Then Set oRS = Nothing
If Not oCon Is Nothing Then Set oCon = Nothing