ExcelのセルにSQL文を書いて結果を得る方法ってありますか?たとえば「SELECT ITEM FROM TABLE WHERE KEY=A1」(ここでA1はセルの中身)のようなことをしたいです。有料のアドインを使ってもよいです。

回答の条件
  • 1人2回まで
  • 登録:2006/08/03 16:17:44
  • 終了:2006/08/04 11:29:28

ベストアンサー

id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612006/08/03 22:13:13

ポイント66pt

再回答ですみません。

ユーザ定義関数+ADO+ExcelODBCドライバ で実現できます。


=ExecSQL(SQL文)

という関数を作ってみます。

以下、サンプルです。


1.ユーザ定義関数の作成

    VBAのエディタを起動し、標準モジュールを追加。

    以下のコードを記述してください。

    Public Function ExecSQL(ByVal sql As String) As String

        Dim cn As ADODB.Connection

        Dim rs As ADODB.Recordset

        Dim xl_file As String

        

        xl_file = ThisWorkbook.FullName '他のブックを指定しても良し

        

        Set cn = New ADODB.Connection

        cn.Provider = "MSDASQL"

        cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _

          "DBQ=" & xl_file & "; ReadOnly=False;"

        cn.Open

        Set rs = New ADODB.Recordset

        rs.Open sql, cn, adOpenStatic

        

        ExecSQL = rs("NAME").Value

        

        rs.Close

        cn.Close

    End Function


2.Sheet2 にデータベースを作成

       |   A  |   B   

    -----------------------------

    1  |  ID  | NAME

    2  |   1  | あああ

    3  |   2  | いいい

    4  |   3  | ううう


3.Sheet1 にユーザ定義関数を記述

    A1セルに、「」を入力

    A2セルに、「=execsql("Select NAME from [Sheet2$] Where ID = " & A1)」を入力

4.A2セルには、「いいい」が表示されます。



参考

[HOWTO] Visual Basic または VBA から ADO を Excel データで使用する

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

id:simplestyle

これで大丈夫です!

simplestyle2006/08/04 11:28:38

その他の回答(2件)

id:llusall No.1

llusall回答回数505ベストアンサー獲得回数612006/08/03 17:34:57

ポイント9pt

こちらが参考になると思います。

エクセルからエクセルをデータベースとして使う方法です。

アクセスのクエリ感覚でデータを操作できるようですし、SQLも直接いぢれそうです。

■エクセルでデータデータベース

http://www.geocities.jp/tomtomf/

エクセルでデータベースpart1ODBCの設定

エクセルでデータベースpart2SQLによる参照1

エクセルでデータベースpart3SQLによる参照2




それとも、ワークシート関数の事を言っておられるのでしょうか?

だとしたら、ありません。

替わりとして、「データベース関数」や「検索関数」があります。

データベース/リスト管理関数(一部抜粋)

DAVERAGE リストまたはデータベースの指定された列を検索し、条件を満たすレコードの平均値を返します。

DCOUNT リストまたはデータベースの指定された列を検索し、条件を満たすレコードの中で数値が入力されているセルの個数を返します。

DCOUNTA リストまたはデータベースの指定された列を検索し、条件を満たすレコードの中の空白でないセルの個数を返します。

DGET リストまたはデータベースの列から、指定された条件を満たす 1 つの値を抽出します。

DMAX リストまたはデータベースの指定された列を検索し、条件を満たすレコードの最大値を返します。

DMIN リストまたはデータベースの指定された列を検索し、条件を満たすレコードの最小値を返します。

DSUM リストまたはデータベースの指定された列を検索し、条件を満たすレコードの合計を返します。

など


検索/行列関数(一部抜粋)

VLOOKUP 配列の左端列で特定の値を検索し、対応するセルの値を返します。

HLOOKUP 配列の上端行で特定の値を検索し、対応するセルの値を返します。

など

中でも、DGET関数VLOOKUPがSELECT文に近い働きをすると思います。



または、マクロ(VBA)の事を言っておられるのでしたら、DAOADOでAccessや、その他のDBに接続してSQL文でデータを取得できます。

DAOはこちらの「DAOの使用方法」が参考になると思います。

http://www.ie.reitaku-u.ac.jp/~ykago/lectures/db/db.html


ADOはこちら

http://www.geocities.jp/shotanajp/VB/DBLink.html

id:ardarim No.3

ardarim回答回数891ベストアンサー獲得回数1422006/08/04 01:48:33

ポイント5pt

このアドオンソフトでできそうですが、どうでしょうか?

SQL*XL

トラックバック

トラックバックはまだありません

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません
ニンテンドー3DSが2名様に当たる!人力検索はてな夏休みキャンペーン8/4第2段(木)まで 人力検索はてな