Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

マイクロソフトの表計算ソフトExcel(エクセル)から、SQLを扱う方法についてまとめています。

SQLをエクセルから発行する方法

エクセルからSQLを実行する方法は3つあります。

Microsoft AccessやMicrosoft SQL Server、Azure SQL DatabaseにSQLを発行

エクセルと同じMicrosoft系のプロダクトにSQLを発行します。同じ会社の製品なので、親和性も抜群。Excelの機能に、データベース接続用の機能が組み込まれています。

Excel を使用した接続 – Azure SQL Database & SQL Managed Instance | Microsoft Docs

データ接続には、Office2007以降の「外部データ接続」か、「Power Query」(アドイン)を使用します。Excel 2016以降では「Get & Transform」という機能が本体に組み込まれ、リボンメニューから高度なSQLを実行するクエリエディタが利用できるようになってます。

参考)外部データ ソースからデータをインポートする (Power Query) – Excel

SQL Server Expressを使えば、無償でエクセルとSQL Serverの連携環境が構築できます。

【関連記事】
SQL Server Expressは無料で使えるけど、大きなデメリットはないの?

また、Microsoft AccessをOracleなどのリレーショナルデータベースと連携させ、AccessをフロントエンドとしてExcelからAccessを経由してOracleにSQLを発行することも可能です。

関連)データベースサーバのフロントエンドとしてAccessを利用する:Tech TIPS – @IT

ODBCを経由して、その他の形式のデータベースにSQLを発行

OracleやMySQLなどにODBCを経由してExcelからアクセスすることが可能です。

Microsoft Queryを使うと、ExcelからデータべースへのSQL発行が容易になります。

Access、ODBC for ORACLE、SQL Server、各種データベースのODBCへの接続が可能になります。

関連)WindowsでExcelと外部データベースとを連携させる:Tech TIPS – @IT

接続先のデータベースの更新状況を気にせずにSQLを発行できるんですね。Microsoft Queryのデメリットとしては、vbaスクリプトなどでクエリを動的に組立てることができない(クエリエディタで事前に作成したSQLのみ利用可能)という点があります。

ただし、複雑なクエリを処理する場合、実行スピードが遅くなります。Windows用のネイティブドライバが用意されている場合は、ODBCよりも速度改善が期待できます。

エクセルの表をデータベースのテーブルと見なして、SQLを発行

ADO接続によって、エクセルの表をテーブルとみなしてSQLで扱えるようになります。

参考)ADOを使ってExcelをテーブルとして読み込む方法について | INFITH VBA Lab

ADOとは、ActiveX Data Objectsの略で、Microsoftが定めた仕様に沿って統一されたオブジェクト。統一された手順でアクセスが可能になります。

ADOを使えば、データベースもエクセルの表も、テキストファイルでさえも、同じような手順でアクセスできるようになるんですね。

vbaからアクセスする場合に使われます。

ADO接続の際、以下のように記述することで、Excelのテーブルに対してクエリを発行できます。

oRS.Open "Select * from [Sheet1$]", oConn, adOpenStatic

以下のサンプルは、ADO接続で取得したデータをワークシートにインポートします。ADO接続では、取得したデータに数式やフォーマットを適用することができません。元々の設定が上書きされてしまうんですね。そのため、FormatProductsWorksheetにて、取得したデータに対してフォーマット処理を行っています。

Private Sub Workbook_Open()

    'If there's a Products worksheet present in the workbook, format it.
    'Then delete the first sheet in the workbook
    Dim oSheet As Worksheet
    For Each oSheet In ThisWorkbook.Worksheets
        If oSheet.Name = "Products" Then
            FormatProductsWorksheet
            Application.DisplayAlerts = False
            ThisWorkbook.Worksheets("Sheet1").Delete
            DeleteCode
            Exit For
        End If
    Next
    
End Sub

Private Sub FormatProductsWorksheet()
    Dim oSheet As Worksheet, oHdr As Range, nRows As Long
    Set oSheet = ThisWorkbook.Worksheets("Products")
    With oSheet
        nRows = .UsedRange.Rows.Count
        .Range("A1").ColumnWidth = 30
        .Range("B1").ColumnWidth = 15
        .Range("C1").ColumnWidth = 15
        .Range("B2").Resize(nRows - 1).NumberFormat = "0.00"
        .Range("C2").Resize(nRows - 1).NumberFormat = "[Red][<20]0;0"
        .Range("D2").Resize(nRows - 1).Formula = "=B2*C2"
        .Range("D2").Resize(nRows - 1).NumberFormat = "0.00"
        Set oHdr = .Range("A1:D1")
        oHdr.Value = Array("Product", "Unit Price", "In Stock", "Value")
        oHdr.Font.Bold = True
        oHdr.Borders(xlEdgeBottom).Weight = xlThin
        .UsedRange.AutoFilter
        .Cells(nRows + 2, 4).Formula = "=SUBTOTAL(9,D2:D" & nRows & ")"
        .Cells(nRows + 2, 4).NumberFormat = "0.00"
        .Cells(nRows + 2, 3).Value = "SubTotal:"
    End With
End Sub

Private Sub DeleteCode()
    'Delete the code in this module.
    Dim iLines As Integer
    iLines = ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule.CountOfLines
    ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule.DeleteLines 1, iLines
End Sub

参考)ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)

まとめ

ポテパンダの一言メモ
  • Microsoft系のSQL Server等には、エクセルの標準機能でSQL発行可能
  • 一般のDBにアクセスするには、ODBCを利用する
  • VBAから、エクセルの表をテーブルとみなしてSQL発行も可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。