スポンサーリンク

050-VBA

EXCELのVBAを使ってDB【Oracle】に接続してSQLを叩く方法!

へっぽこヘタレシステム管理者の管理人です。

さて・・・

長年、【Oracle】等のDBに接続してSQLを叩く場合は・・・

EXCELでのやり方が分からず・・・

ず~っとMS-ACCESSを使っていました。

とくにこれまで、不便を感じたこともなく・・・

MS-ACCESSで十分だと思っていたのですが・・・

昨年ごろから、AI-OCRやRPAを職場でも使いだすようになると・・・

現場の職員に操作してもらう場面も結構出てきます。

場合によっては、DBからデータを抽出してもらう作業も出てくるのですが・・・

そういった場合に、ライセンスの関係でMS-ACCESSが無く、全てのPCに標準でインストールされているEXCELを使わざるをえない場合が出てきました。

そこで、一念発起して10年以上諦めていた、EXCELから【Oracle】に接続して、SQLを叩く方法がようやく分かったので忘備録として掲載します。

Visual Basicのコード

コードは次のとおりです。

マクロ1に設定した場合です。

なお【Oracle】の場合は、クライアントにOracleのクライアントがインストールされている必要がありますので注意してください。

また、エクセルの【Visual Basic Editor】の【ツール】・【参照設定】で・・・

【Microsoft ActiveX Data Object 2.8 Library】を追加しておく必要があります。

Sub Macro1()
'
' Macro1 Macro
'
    Dim SQL As String
    Dim i As Long
    Dim row As Long

    Const Provider = "OraOLEDB.Oracle" 'Provider
    Const DATA_SOURCE = "DBのソース名"           'Data Source
    Const USER_ID = "ユーザーID"               'userid
    Const Password = "パスワード"              'password

    SQL = SQL & " " & "select * from syainTB" 'SQL文
    
    Dim conn As New ADODB.Connection
        
    conn.ConnectionString = _
                    "Provider=" & Provider & ";" & _
                    "Data Source=" & DATA_SOURCE & ";" & _
                    "USER ID=" & USER_ID & ";" & _
                    "Password=" & Password & ";"
    conn.Open
    
    Dim rs As New ADODB.Recordset

    rs.Source = SQL
    rs.ActiveConnection = conn
    rs.Open
    
    With Worksheets("sheet1")
        .Cells.Clear
        
        '列名の表示
        For i = 0 To rs.Fields.Count - 1
            .Cells(1, i + 1) = rs(i).Name
        Next i

        '値の表示
        row = 1
        Do Until rs.EOF
            For i = 0 To rs.Fields.Count - 1
                .Cells(row + 1, i + 1) = rs(i).Value
            Next i
            rs.MoveNext
            row = row + 1
        Loop
    End With
    
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
    
    Application.Calculate
    
End Sub

スポンサーリンク

エクセルのシートからSQLに設定する値を参照できる

コード内のSQLに設定する値をシートから参照することもできます。

コードの書き方は次のとおりです。

    SQL = SQL & " " & "select * from syainTB" 'SQL文
    SQL = SQL & " " & "where"
    SQL = SQL & " " & "syainTB.カラム名 = '" & Worksheets!シート名.Cells(*,*) & "'" '条件設定

ブログランキングにご協力ください!
ブログランキング・にほんブログ村へ

エクセルの表から選択してデータ抽出も可能

エクセルの表を使って任意の行のデータを抽出することも可能です。

コードの書き方は次のとおりです。

    SQL = SQL & " " & "select * from syainTB" 'SQL文
    SQL = SQL & " " & "where"

    Dim rowcounta As Long '繰り返し回数の変数設定
    rowcounta = 2 '2行目から開始

    Do While rowcounta < 502
 '何回繰り返すか(行が空白であれば問題ない)
    
    SQL = SQL & " " & Worksheets!シート名.Cells(rowcounta, 列番号) 'シートに条件式を設定しておく
    rowcounta = rowcounta + 1 'カウントアップ
    
    Loop

なお・・・

参照するエクルの行には、SQL文に設定する文字列を関数を使って設定しておく。

二行目以降は先頭に【OR】を設定する。

エクセルの設定例
1行目     = "syainTB.name = '" & 【セル名】 & "'"
2行目以降  = "or syainTB.name = '" & 【セル名】 & "'"

以上です。

ブログ開設に必要なドメイン取得、サーバーレンタル、ASPの登録等は、こちらのサイトから!

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

-050-VBA

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

board-pic1

RPA【WinActor】VSパンチャー!どっちの入力が早いか? PDF化AI-OCRによる電子化に要する時間を含めてもRPAの勝ち!

さて、特別定額給付金【10万円】の支給事務で、日々サビ残に明け暮れる管理人です。 サビ残も130時間越え・・・ 過労死ラインを軽く超えています。 毎日RPA【WinActor】を動かして、申請書をひた …

EXCELのVBAを使ってCSVファイルを開く!エンコードの指定も!

へっぽこヘタレシステム管理者の管理人です。 さて、昨日に引き続き・・・ ある部署からエクセルのマクロの作成を依頼され・・・ その過程で、いくつか部品を作ったので忘備録として掲載します。 スポンサーリン …

RPA・WinActorでGmail操作!ブラウザとの相性は悪い気がする?

絶賛底辺中の地方公務員の管理人です。 さて、今日もWinActorネタです。 本日は、WinActorでのブラウザ操作となります。 職場のグループウエアは、IE11で動くものですが・・・ 仕事の関係で …

EXCELのVBAを使って任意のファイルのフルパスを取得する!

へっぽこヘタレシステム管理者の管理人です。 さて、ある部署からエクセルのマクロの作成を依頼され・・・ その過程で、いくつか部品を作ったので忘備録として掲載します。 スポンサーリンク ブログランキングに …

管理人的EXCELのショートカット忘備録!沢山あって覚えられないので最低限で・・・!

なにやら最近【EXCEL】関連の本が売れている様です。 管理人も日々エクセルは使っています。 職場にいって、【WORD】と【EXCEL】を立ち上げない日は無いと言っても過言ではりません。 しかし、これ …

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