SELECT文を実行して抽出結果をシートに出力する方法
スポンサーリンク
Excel VBA から SQL Server 上で SELECT 文を実行してデータを抽出し、抽出件数をシートに表示するサンプルコードです。
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への参照設定が必要です。
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」シートに内容が出力されます。
スポンサーリンク