再回答ですみません。
ユーザ定義関数+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セルに、「2」を入力
A2セルに、「=execsql("Select NAME from [Sheet2$] Where ID = " & A1)」を入力
4.A2セルには、「いいい」が表示されます。
参考
[HOWTO] Visual Basic または VBA から ADO を Excel データで使用する
ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)
こちらが参考になると思います。
エクセルからエクセルをデータベースとして使う方法です。
アクセスのクエリ感覚でデータを操作できるようですし、SQLも直接いぢれそうです。
■エクセルでデータデータベース
http://www.geocities.jp/tomtomf/
それとも、ワークシート関数の事を言っておられるのでしょうか?
だとしたら、ありません。
替わりとして、「データベース関数」や「検索関数」があります。
データベース/リスト管理関数(一部抜粋)
DAVERAGE リストまたはデータベースの指定された列を検索し、条件を満たすレコードの平均値を返します。
DCOUNT リストまたはデータベースの指定された列を検索し、条件を満たすレコードの中で数値が入力されているセルの個数を返します。
DCOUNTA リストまたはデータベースの指定された列を検索し、条件を満たすレコードの中の空白でないセルの個数を返します。
DGET リストまたはデータベースの列から、指定された条件を満たす 1 つの値を抽出します。
DMAX リストまたはデータベースの指定された列を検索し、条件を満たすレコードの最大値を返します。
DMIN リストまたはデータベースの指定された列を検索し、条件を満たすレコードの最小値を返します。
DSUM リストまたはデータベースの指定された列を検索し、条件を満たすレコードの合計を返します。
など
検索/行列関数(一部抜粋)
VLOOKUP 配列の左端列で特定の値を検索し、対応するセルの値を返します。
HLOOKUP 配列の上端行で特定の値を検索し、対応するセルの値を返します。
など
中でも、DGET関数、VLOOKUPがSELECT文に近い働きをすると思います。
または、マクロ(VBA)の事を言っておられるのでしたら、DAOやADOで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
Twitterでのつぶやき (0)