分かりやすく、使いやすく。

SELECT文を実行して抽出結果をシートに出力する方法

スポンサーリンク

Excel VBA から SQL Server 上で SELECT 文を実行してデータを抽出し、抽出件数をシートに表示するサンプルコードです。

関連:INSERTUPDATEDELETE

  1. SQL Server での事前準備
  2. VBA のサンプルコード


SQL Server での事前準備

VBA のサンプルコードを実行する前に、 TEST データベースを作成して、以下のSQLを実行してください。 TEST_TABLE というテーブルを作成し、データを 5 件登録します。

sql(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE [dbo].[TEST_TABLE]
(
    [ID] [INT] NULL,
    [MEMO] [VARCHAR](10) NULL
);
 
INSERT INTO TEST.dbo.TEST_TABLE VALUES
(1, 'いち')
,(2, 'に')
,(3, 'さん')
,(4, 'よん')
,(5, 'ご'); 

VBA のサンプルコード

SELECT 文を実行して、取得した内容をシートに出力サンプルコードです。

このコードを実行するには、事前にADODBへの参照設定が必要です。

(参考)ExcelでADODBの参照設定を行う方法

VBA(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Option Explicit
 
Sub test()
    '■接続先情報を設定
    'この例では、ローカルのインスタンス「SQLEXPRESS」にWindows認証で接続する。
    Dim connectionString As String
    
    Dim dataSourceName As String
    Dim databaseName As String
    
    '「.」はローカルを表す。他のサーバに接続する場合はホスト名を指定。
    dataSourceName = ".\SQLEXPRESS" '
    
     'TESTデータベースに接続する。
    databaseName = "TEST"
    
    'ODBC接続の接続文字列を作成する。
    connectionString = ""
    connectionString = connectionString & "PROVIDER=MSDASQL;"
    connectionString = connectionString & "DRIVER={SQL Server};"
    connectionString = connectionString & "SERVER=" & dataSourceName & ";"
    connectionString = connectionString & "INITIAL CATALOG=" & databaseName & ";"
    connectionString = connectionString & "Trusted_connection=yes; "
    
    '■接続
    Dim objConnection As ADODB.Connection
    Set objConnection = New ADODB.Connection
 
    objConnection.CursorLocation = adUseClient
    objConnection.Open connectionString
    
    '■実行するSQLを設定
    Dim objRecordset As ADODB.Recordset
    Dim sql As String
    
    sql = ""
    sql = sql & " SELECT"
    sql = sql & "     ID"
    sql = sql & "   , MEMO"
    sql = sql & " FROM"
    sql = sql & "     TEST.dbo.TEST_TABLE"
    sql = sql & " WHERE"
    sql = sql & "     ID <= 4;"
    
    Set objRecordset = New ADODB.Recordset
    
    objRecordset.ActiveConnection = objConnection
    objRecordset.Source = sql
    
    '■SQLを実行してデータベースから抽出した内容を表示
    Dim rowCounter As Long
    Dim fieldCounter As Long
    Dim outputSheet As Worksheet
    
    objRecordset.Open
    
    rowCounter = 0
    
    '抽出した内容を「Sheet1」シートに出力。
    Set outputSheet = ThisWorkbook.Worksheets("Sheet1")
    
    Do Until objRecordset.EOF
        rowCounter = rowCounter + 1
        
        For fieldCounter = 1 To objRecordset.Fields.Count
            If rowCounter = 1 Then
                '最初のみ見出しを出力する。
                outputSheet.Cells(rowCounter, fieldCounter).Value = _
                    objRecordset.Fields(fieldCounter - 1).Name
            End If
            
            '見出し行を出力しているので、rowCounter に +1 する。
            outputSheet.Cells(rowCounter + 1, fieldCounter).Value = _
                objRecordset(fieldCounter - 1).Value
        Next fieldCounter
        
        objRecordset.MoveNext
    Loop
    
    '■終了処理
    Set objRecordset = Nothing
    Set objConnection = Nothing
End Sub 

上記を実行すると、テーブルから 4 件のデータが抽出され、「Sheet1」シートに内容が出力されます。

スポンサーリンク
スポンサーリンク