Hiko.Blog Excel VBA活用術

「Excel VBAで仕事を効率化!初心者でもできる自動化のコツ」

MENU

あいまい検索 Excel経由Access

先生: 今日は、ExcelからOracleのデータベースに接続して、データを検索してExcelに書き出すプログラムの説明をするで。

生徒: それってどうやってするんですか?

先生: まず、このプログラムでは、Excelにある情報を使って、Oracleのデータベースからデータを取ってくるんや。最初に、Excelのシートに書かれている条件を使うねん。例えば、A1、A2、A3に書かれた条件でデータを検索するんやで。

生徒: あ、Excelに条件が書かれてるんですね。それをどうやって使うんですか?

先生: そうやな。Excelのシートに書かれたA1、A2、A3のセルにある値を、それぞれsearchValue1searchValue2searchValue3っていう変数に入れるんや。これを使ってデータベースを検索するんやで。

生徒: その後はどうするんですか?

先生: 次に、プログラムは「Access」を使ってデータベースにアクセスする準備をするんや。CreateObject("Access.Application")を使って、Accessのアプリケーションを開くんや。そして、OpenCurrentDatabaseで、どのデータベースを開くか指定するんや。

生徒: Accessって、データベースを操作するためのものなんですね?

先生: その通り!次に、Oracleのデータベースに接続するために、ADOというものを使って、Oracleのデータベースとつながるんや。接続文字列に、データベースの場所やユーザー名、パスワードなどを設定するんや。

生徒: なるほど!それで、データベースから情報を取ってくるんですね?

先生: そうや!次に、sqlという変数に、データベースからどんなデータを取るかを指定するSQL文を作るんや。今回は、あいまい検索をして、A1、A2、A3の値を使って検索するようにしてるんや。

生徒: SQL文って、データベースにどうやって指示を出すかを書くものですね?

先生: その通り!SQL文ができたら、conn.Execute(sql)でそのSQLを実行して、データを取り出すんや。

生徒: その後、データはどうなるんですか?

先生: 取り出したデータは、配列というものに入れるんや。配列っていうのは、たくさんのデータを一度にまとめておける箱みたいなもんやな。そして、Excelのシートにそのデータを1行1行書き込んでいくんや。

生徒: それで、最後に何かあるんですか?

先生: はい!最後に、データベースとの接続を閉じて、いろいろな作業をきれいに終わらせるんや。rs.Closeでデータの取得を終わらせ、conn.Closeで接続を閉じるんや。最後に、Accessのアプリも閉じて、すべてを終了するんや。

生徒: わかりました!これでExcelOracleのデータを取り込めるんですね!

先生: その通り!これを使えば、ExcelOracleをうまくつなげて、大量のデータを簡単に扱えるようになるんやで!

 
 

Sub ExportDataFromOracleViaAccess()
    Dim accessApp As Object
    Dim conn As Object
    Dim rs As Object
    Dim data As Variant
    Dim i As Integer, j As Integer
    Dim searchValue1 As String
    Dim searchValue2 As String
    Dim searchValue3 As String
    Dim sql As String
    
    ' 検索条件をExcelのセルから取得(例: A1, A2, A3セルの値)
    searchValue1 = ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value ' 1つ目の条件
    searchValue2 = ThisWorkbook.Sheets("Sheet1").Cells(2, 1).Value ' 2つ目の条件
    searchValue3 = ThisWorkbook.Sheets("Sheet1").Cells(3, 1).Value ' 3つ目の条件
    
    ' Accessアプリケーションを作成
    Set accessApp = CreateObject("Access.Application")
    accessApp.OpenCurrentDatabase "C:\path\to\your\database.accdb" ' Accessのデータベースパス

    ' ADO接続を作成
    Set conn = CreateObject("ADODB.Connection")
    
    ' 接続文字列を設定(適切に変更してください)
    conn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=YourDataSource;User Id=YourUsername;Password=YourPassword;"
    
    ' 接続を開く
    conn.Open
    
    ' SQLクエリを作成(あいまい検索)
    sql = "SELECT * FROM YourTableName WHERE " & _
          "YourFieldName1 LIKE '%" & searchValue1 & "%' AND " & _
          "YourFieldName2 LIKE '%" & searchValue2 & "%' AND " & _
          "YourFieldName3 LIKE '%" & searchValue3 & "%'"
    
    ' SQLクエリを実行
    Set rs = conn.Execute(sql)
    
    ' データを配列に格納
    If Not rs.EOF Then
        rs.MoveLast
        rs.MoveFirst
        ReDim data(1 To rs.RecordCount, 1 To rs.Fields.Count)
        
        For i = 1 To rs.RecordCount
            For j = 1 To rs.Fields.Count
                data(i, j) = rs.Fields(j - 1).Value
            Next j
            rs.MoveNext
        Next i
    End If
    
    ' Excelシートにデータを書き込む
    For i = LBound(data, 1) To UBound(data, 1)
        For j = LBound(data, 2) To UBound(data, 2)
            ThisWorkbook.Sheets("Sheet1").Cells(i + 2, j).Value = data(i, j) ' 書き込む行を調整
        Next j
    Next i

    ' 後処理
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
    accessApp.Quit
    Set accessApp = Nothing
End Sub