Excel プログラミングを使用するとき、多くの場合、データベースを使用する必要があります。
では、データベースに接続してデータベースからデータを読み取るにはどうすればよいでしょうか?
VBA は SQL SERVER データベース インスタンスに接続します。
Dim strConn As String、strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dimcol As Integer 'データベースに接続する文字列 strConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[ユーザー ];パスワード=[パスワード];初期カタログ=[データベース];データ ソース=[データベース IP アドレスまたはデータベース サーバー名];接続Timeout=720; " 'SQL ステートメントが非常に長い場合は、strSQL=strSQL+ を使用して、複数の段落に分割されたステートメントを接続できます。ステートメントが非常に短い場合は、1 行にしか記述できません。 strSQL = "select * from Hy_KPI_Shop_Dept_WeekRpt " strSQL = strSQL+"where sdate='2014-01-01' order by sdate,shopid " Set conn = New ADODB.Connection Set ds = New ADODB.Recordset 'データベース接続 conn.Open strConn 'この文とデータベース接続文字列で接続しますTimeout=720 は、ステートメントが長時間実行されると、これらの 2 つの文が VBA の待機時間を延長する可能性があることを意味します。これらの 2 つの文がないと、VBA はクエリ タイムアウトを報告することがよくあります。 conn.CommandTimeout = 720 With ds 'クエリ文に従ってデータを取得します。 strSQL を開き、conn 'すべての列ヘッダーの追加を自動的に制御します For Col = 0 To ds.Fields.Count - 1 'Offset( のパラメータに注意してください) 0,col) である必要があります。正しくは、この文はセル A1 から始まる最初の行にタイトルが書き込まれることを意味します。タイトル行を書きたくない場合は、次の文をコメントアウトできます。 Worksheets("ストア内の各クラスの KPI 週次レポート").Range("A1").Offset(0,col).Value = ds.Fields(col).Name Next 'データのすべての行を追加します。この文は意味します。クエリ結果が書き込まれることを確認します。 1行目はセルA1から始まりますが、1行目にタイトル行が書かれているため、実際にはタイトルの下の行から書き込まれます。 Worksheets("sheet1").Range("A1").Offset(1, 0).CopyFromRecordset ds End With 'データベース接続を閉じ、リソースをクリア Set ds = Nothing conn.Close Set conn = Nothing