こんにちは! 健史です。
Excel-VBAにて、ORACLEデータをExcelデータに出力するプログラムを作成しました。
プログラム
Sub TEST1()
'変数定義
Dim ix2, iy2 As Long
'Oracleアクセス用変数定義
Dim USER_ID, PASSWORD As String
Dim PROVIDER, DATA_SOURCE As String
Dim STR_SQL As String
'設定シートからセット
USER_ID = Sheets(1).Cells(2, 2)
PASSWORD = Sheets(1).Cells(3, 2)
PROVIDER = Sheets(1).Cells(4, 2)
DATA_SOURCE = Sheets(1).Cells(5, 2)
STR_SQL = Sheets(1).Cells(10, 2)
'インスタンス生成 データベース接続
Dim conn As New ADODB.Connection
'Oracleの場合
conn.ConnectionString = _
"PROVIDER=" & PROVIDER & ";" & _
"Data Source=" & DATA_SOURCE & ";" & _
"USER ID=" & USER_ID & ";" & _
"PASSWORD=" & PASSWORD & ";"
'DBオープン
conn.Open
'インスタンス生成 データアクセス
Dim recset As New ADODB.Recordset
'Excel 出力するシートのクリアと全てのセルを文字列設定
Sheets(2).Cells.Clear
Sheets(2).Cells.NumberFormatLocal = "@"
'Excel 全てのセルを文字列設定 複数設定する場合はこちら
'---With Sheets(2).Cells
'--------.Font.Name = "MS Pゴシック"
'--------.Font.Size = 12
'--------.NumberFormatLocal = "@"
'---End With
'Excelに出力する添え字 初期値設定
ix2 = 1
'DB 読み込み
recset.Source = STR_SQL
recset.ActiveConnection = conn
'接続開始
recset.Open
'列名をDBからExcelにセット
For iy2 = 0 To recset.Fields.Count - 1
Sheets(2).Cells(1, iy2 + 1) = recset(iy2).Name
Next
'データをDBからExcelにセット
Do Until recset.EOF
For iy2 = 0 To recset.Fields.Count - 1
Sheets(2).Cells(ix2 + 1, iy2 + 1) = recset(iy2)
Next
recset.MoveNext
ix2 = ix2 + 1
Loop
'接続終了
recset.Close
'DBクローズ
conn.Close
Set recset = Nothing
Set conn = Nothing
'終了処理 抽出したデータをセーブする場合はコメントを外す
'---ThisWorkbook.Save
MsgBox "処理終了!"
End Sub
補足
準備
Oracle Clientのインストールが必要です。
そして、オラクルから抽出したデータを格納するシート2を作成しておきます。
シート1に環境情報を設定
Excelシート1の設定シートを環境に合わせて修正すれば、動くと思います。

設定内容は以下です。
1).USER_ID
2).PASSWORD
3).PROVIDER
4).DATA_SOURCE
5).SQL
10行目に記載しているSQLに、[;]は不要で、設定するとエラーになります。
まぁ、これには苦労しました。
その他
テーブル情報およびデータサンプルは以下です。



あとは、コメントを参照いただければと思います。
最後に
上記を手作業で行おうとすると
・Excelを新規作成で起動し、セル全体を選択して、文字列に設定する
・SQLDeveloperであればツールを起動し、[列]を選択してコピーし、Excelの1行目に貼り付ける
・[データ]を選択してコピーし、Excelの2行目以降に貼り付ける
ですかね。
忙しいときには「面倒くさい!」「煩わしい!」って思う作業です。


コメント