Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

VBAからOracleに接続する方法(Oracle Provider for OLE DB接続)

      2020/06/01

VBAから業務システムなどに使用しているデータベースに接続し、データを抽出することができます。

定期的に作成する資料などは、VBAでデータ取得処理を自動化し、ボタン一つで最新情報に更新することが可能になるため、資料作成にかかる時間を大幅に短縮することが期待できます。

この記事ではExcel VBAからOracleに接続してデータを取得する方法を記載します。

参照設定

ADO(ActiveX Data Objects)を使用することで、エクセルなどのOfficeソフトからOracleに接続することができます。

最初にADOを使用するための参照設定をExcelファイルに設定しましょう。

VBEを起動して[ツール]-[参照設定]の順でクリックします。

参照可能なライブラリファイルから「Microsoft ActiveX Data Objects X.X Library」を選択します。

※ADOのバージョンはOSなどの環境によって異なりますので、ご使用の環境に合わせて読みかえてください。

Oracle Clientのインストール

ADOからOracleへ接続するインターフェースとしてOLE DBやODBCなどがあります。

この記事ではOracle Provider for OLE DBを使用したOracle接続方法を記載していきます。

Oracle Provider for OLE DBはOracle Clientをインストールすることで使用可能になります。

※Oracle ClientとOfficeソフトのビット数(32ビット or 64ビット)が一致したバージョンをインストールしてください。

Oracle Database 12c Release 2 (12.2.0.1.0)
https://www.oracle.com/database/technologies/oracle12c-windows-downloads.html

Oracle Database 11g Release 2 (11.2.0.1.0) 64bit
https://www.oracle.com/database/technologies/112010-win64soft.html

Oracle Database 11g Release 2 (11.2.0.1.0) 32bit
https://www.oracle.com/database/technologies/112010-win32soft.html

Oracleデータベースへの接続文字列

Oracleへの接続情報の設定は、tnsnames.oraの設定情報を参照する方法とソースコード内に直接記載するの2種類があります。

'Oracle社 OLE DB接続
'tnsnames.oraを使用する場合
"Provider=OraOLEDB.Oracle;Data Source=ネットサービス名;User ID=ユーザID;Password=パスワード"

'Oracle社 OLE DB接続
'接続情報を直接記載する場合
"Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=サーバ名)(PORT=ポート番号))(CONNECT_DATA=(SERVICE_NAME=サービス名)));User ID=ユーザID;Password=パスワード"

サンプルプログラム

Oracleに接続してデータを取得、切断をするサンプルプログラムを記載します。

Option Explicit
 
'TNSサービス名で接続する場合(tnsnames.ora)
Private Const PROVIDER As String	= "OraOLEDB.Oracle"
Private Const DATA_SOURCE As String	= "orcl"		'ネットサービス名
 
'TNSサービス名を使用せず直接接続する場合
Private Const HOST_NAME As String	= "localhost"	'データベースのホスト名orIPアドレス 
Private Const PORT_NO	As String	= "1521"		'データベースのポート
Private Const SERVICE_NAME As String = "orcl"		'サービス名
 
'データベースのアカウント情報
Private Const USER_ID As String		= "user"		'データベースのユーザID
Private Const PASSWORD As String	= "password"	'データベースのパスワード

Sub sample()
    On Error GoTo ERR_HANDLER
    Dim strSQL As String
    Dim i As Long

	'--------------------------------
	' データベース接続				
	'--------------------------------
	Dim cn As New ADODB.Connection
 
	'TNSサービス名で接続する場合
	cn.ConnectionString	= "Provider=" & PROVIDER _
						& ";Data Source=" & DATA_SOURCE _
						& ";User ID=" & USER_ID _
						& ";PASSWORD=" & PASSWORD
	cn.Open
 
'	'TNSサービス名を使用せず直接接続する場合
'	cn.ConnectionString	= "Provider=" & PROVIDER _
'						& ";Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" _
'						& "(HOST=" & HOST_NAME & ")" _
'						& "(PORT=" & PORT_NO & "))" _
'						& "(CONNECT_DATA=" _
'						& "(SERVICE_NAME=" & SERVICE_NAME & ")))" _
'						& ";User ID=" & USER_ID _
'						& ";PASSWORD=" & PASSWORD
'	cn.Open

	'--------------------------------
	' SQLの実行
	'--------------------------------
    Dim rs As New ADODB.Recordset
    strSQL = "select * from dual"
    rs.Open strSQL, cn
 
    '取得データをセルに一括出力
    rs.MoveFirst
    ActiveSheet.Range("A1").CopyFromRecordset rs

	'--------------------------------
	' データベース切断
	'--------------------------------
	If Not rs Is Nothing Then
    	If rs.State = adStateOpen Then rs.Close
		Set rs = Nothing
  	End If 
	If Not cn Is Nothing Then
		If cn.State = adStateOpen Then cn.Close
		Set cn = Nothing
	End If 

Exit Sub

ERR_HANDLER:

	'エラーメッセージ
	Debug.Print Err.Number & ")" & Err.Description
 
	'--------------------------------
	' データベース切断
	'--------------------------------
	If Not rs Is Nothing Then
    	If rs.State = adStateOpen Then rs.Close
		Set rs = Nothing
  	End If 
	If Not cn Is Nothing Then
		If cn.State = adStateOpen Then cn.Close
		Set cn = Nothing
	End If
    
End Sub

Google AdSense PC

Google AdSense PC

Message

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

  関連記事

microsoft
[Windows]Windows 7 リモートデスクトップの有効化

Windows 7にリモートデスクトップ接続する 「コントロールパネル」ー「システムとセキュリティ」をクリック 「システム」をクリック   「リモート …

microsoft
Outlookでメール送信中になったまま送受信が終了しない場合

開封確認のメールが正常に送信されず、送信中のまま送受信が終了しない場合があります。 原因となる開封確認メールは送信トレイに存在しないため、削除することができませ …

microsoft
[Windows]WSUSサーバの構築手順 5/6

Windows 2008 R2サーバにWSUSサーバを構築する WSUS(Windows Server Update Service)の設定 [スタート]-[す …

microsoft
WEB会議・WEB面接を快適にするおすすめ機器の紹介

新型コロナウイルスの流行拡大に伴い、WEB会議・WEB面接を導入する企業が増えてきました。 この記事では、これからWEB会議・WEB面接を導入する予定の企業や実 …

microsoft
VBAからOracleのストアドプロシージャを実行する方法

VBAからOracleのストアドプロシージャを実行する方法について記載します。 VBAからOracleに接続する方法は以前の記事を参考にしてください。 ストアド …

microsoft
[Windows]Windows Server 2008 R2 IISインストール手順

Windows Server 2008 R2にIISをインストールする 環境 OS:Windows Server 2008 R2 IIS:ver7.5 インスト …

microsoft
[Windows]IISセッション管理(状態サーバ)

IISのセッションをアウトプロセスで管理する方法 IISのセッションはインプロセスが既定設定となっておりワーカープロセスが再起動されるたびにセッション情報が破棄 …

microsoft
Excel VBAでOracleのデータを参照するマスター検索機能を作成する

エクセルのVBAでOracleに保存されているマスタを検索する機能を作成する機会がありましたので、サンプルプログラムを記載します。 Oracleへの接続設定 V …

microsoft
[Windows]指定サイズのファイルを作成する

ネットワークの通信速度などを調査する場合にサイズの大きなファイルを作成する必要があります。 この記事では「fsutil」コマンドを使用したダミーファイルの作成方 …

VBAからSQL Serverに接続する方法(Microsoft OLE DB Provider for SQL Server)

VBAから業務システムなどに使用しているデータベースに接続し、データを抽出することができます。 定期的に作成する資料などは、VBAでデータ取得処理を自動化し、ボ …