お手軽が一番、ExcelをOracleクライアントに

http://www.atmarkit.co.jp/fdb/rensai/excel2oracle02/excel2oracle02_1.html
Excel連携で、Oracle環境を快適に。

Oracleを使う際は、自前でExcelOracleに接続するマクロなんかを作ることが多いのでしょうね。

連携パターン メリット デメリット
ADO+ODBC ・汎用的なADOのAPIを使用して開発できる Oracleデータベース固有のデータ型やパラメータなどが使用できない

ODBCデータソースの設定が必要

ODBCブリッジを介すため、ADO+OLE DBよりパフォーマンスが劣る

ADO+OLE DB ・汎用的なADOのAPIを使用して開発できる Oracleデータベース固有のデータ型やパラメータなどが使用できない

・oo4oよりはパフォーマンスが劣る
oo4o ・追加的に必要なミドルウェアがないため、バージョン間での整合性などを意識する必要がない

Oracleで実装されているすべての機能を利用可能

PL/SQLを記述可能

・DAOに類似したインターフェイスを利用し、プロパティ、メソッドを用いることでプログラミングが容易

・oo4oのパラメータを変更することで、oo4o自体のチューニングが可能、高パフォーマンス
Oracle以外のRDBMSには接続できない

・コーディングに使用するメソッドなどはoo4o固有
表2 VBAのマクロで使用するミドルウェアごとの違い

Oracleならば最も扱いやすいのがOracle Objects for OLE(oo4o)。
ここにあるのが完全なサンプルです。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9803/excel/

Private Sub Workbook_Open()
    Dim objSess         As Object
    Dim objDb           As Object
    Dim objDs           As Object
    Dim objCol          As Object
    Dim strError        As String
    Dim ilngLoop        As Long
    Dim strRange        As String
  
    On Error GoTo errOpen:
    
'1. ActiveXDLLであるoo4oを起動します。
    Set objSess = CreateObject("OracleInProcServer.XOraSession")
'2. SQL*Net接続文字列を指定して、Oracleと接続します。
    Set objDb = objSess.OpenDatabase("PCDN", "scott/tiger", 0&)
'3. SQL文を指定してレコードを取得します。
    Set objDs = objDb.DbCreateDynaset("select * from emp", 12&)
 
    Set objCol = objDs.Fields
    For ilngLoop = 1 To objCol.Count
        Worksheets("データシート").Cells(1, ilngLoop).Value = objCol(ilngLoop - 1).Name
    Next
     
'4. CopyToClipboardを使って、クリップボードに全レコードを転記します。
    objDs.CopyToClipboard -1
'5. クリップボードからデータシートに転記します。
    Sheets("データシート").Select
    Range("A2").Select
    ActiveSheet.Paste
    Sheets("UIシート").Select
'6. レコードセットを開放します。
    Set objDs = Nothing
'7. Oracleとの接続を開放します。
    Set objDb = Nothing
'8. oo4oとの接続を開放します。
    Set objSess = Nothing
  
    With Worksheets("UIシート")
        .Range("5:6").Copy
        For ilngLoop = 7 To 27 Step 2
            strRange = CStr(ilngLoop) & ":" & CStr(ilngLoop + 1)
            .Range(strRange).Select
            ActiveSheet.Paste
        Next
    End With

exitOpen:
    On Error Resume Next
    Set objDs = Nothing
    Set objDb = Nothing
    Set objSess = Nothing
    Exit Sub
    
errOpen:
    MsgBox "WorkBook_Open:" & Error$, vbOKOnly & vbExclamation
    Resume exitOpen:
End Sub

一番いいのは、oo4oはネイティブドライバなのでクリップボード制御が可能な点。クリップボードに収まるなら、コピー&ペーストの2ステップで極めて高速に取り出せる(結果セットをループで回してセルに展開しなくていい)ので、クライアント側に持ってきてからの性能はダントツ。