web-dev-qa-db-ja.com

ワークシートデータでSQLのようなクエリを作成するExcel関数?

Excelワークシートに大きなテーブルがあります。

Column_1 | Column_2 | Column_3

ValueA       ValueB     ValueC
....

私が必要とするのは、入力として範囲とSQLのようなクエリ文字列を取り、クエリに一致する行の範囲を返す関数です:

=SQL_SELECT(A1:C1000, "SELECT * WHERE Column_1 = ValueH AND Column_3 = blah")

このようなものはありますか?それとも、自分を実装する最良の方法は何でしょうか?

ありがとう

54
Richard H

Excel 2010の[データ]タブにあるGet External Data(名前を表示)を使用して、ブック内でconnectionを設定し、それ自体からデータをクエリできます。 From Other SourcesFrom Microsoft Queryを使用してExcelに接続します

セットアップしたら、VBAを使用してconnectionを操作し、とりわけ、クエリを駆動するSQLコマンドを表示および変更できます。このクエリdoesはメモリ内のブックを参照するため、最新のデータを更新するために保存する必要はありません。

接続オブジェクトへのアクセスを示すクイックSubを次に示します

Sub DemoConnection()
    Dim c As Connections
    Dim wb As Workbook
    Dim i As Long
    Dim strSQL As String

    Set wb = ActiveWorkbook
    Set c = wb.Connections
    For i = 1 To c.Count
        ' Reresh the data
        c(i).Refresh 
        ' view the SQL query
        strSQL = c(i).ODBCConnection.CommandText
        MsgBox strSQL
    Next
End Sub
48
chris neilsen

ブックを保存できる場合は、ADOおよびJet/ACEを使用して、ブックをデータベースとして扱い、シートに対してSQLを実行するオプションがあります。

ADOを使用してExcelにアクセスする方法に関するMSDNの情報は、 here にあります。

5
Jon Egerton

SQLステートメントを実行する関数ごとにワークシートで数式を実行する場合は、アドインAツールを使用します

例、function BS_SQL("SELECT ...")

enter image description here

2

SUM_IFでジョブを完了できる場合があります。

列Aに一意のproductID、列Pに単価を含む製品情報のシートがあり、列Aに製品IDを持つ発注書のシートがあり、列Tに単価を計算するとします。エントリー用。

次の数式は、セルEntries!T2でトリックを行い、同じ列の他のセルにコピーできます。

=SUMIF(Products!$A$2:$A$9999,Entries!$A2, Products!$P$2:$9999)

次に、エントリごとのアイテム数を含む別の列を作成し、それに単価を掛けてエントリの総コストを取得します。

1
Nasorenga

これを行う簡単な方法の1つは、関心のある行に対してtrueと評価される数式を含む列を作成し、その列で値TRUEをフィルター処理することです。

0
user4681810