未分類

Excel-VBA ORACLE連携 SELECT

未分類

こんにちは! 健史です。

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行目以降に貼り付ける
ですかね。

忙しいときには「面倒くさい!」「煩わしい!」って思う作業です。

未分類
スポンサーリンク
- 面白かったらシェアお願いします! -
健史をフォローする
自分で改善

コメント