プロが教えるわが家の防犯対策術!

エクセルVBAで、以下のユーザー定義関数(選択したセルaを全て3乗した和を求める)を使用していますが、アクセスVBAで同様の関数を使用するにはどうしたらよいでしょうか?

★アクセスVBVで実行したいプログラム
実行すると"データテーブル"の"Aフィールド"を全て3乗した和をmsgboxで表示

★エクセルで使用していたユーザー定義関数
’--------------------------------------
Function y(a As Range) As Variant
Dim r As Range
Dim result As Variant
For Each r In a
result = result + r.Value ^ 3
Next
y = result
End Function
’--------------------------------------
ぞうぞよろしくお願い致します。

A 回答 (2件)

VBA となると、書き方は人それぞれです。


私は、DBCount関数を利用しています。

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

MsgBox DBCount("SELECT Sum([A]^3) AS こたえ FROM データテーブル;")

? DBCount("SELECT SUM(ID) FROM インポート記録")
243856
? DBCount("SELECT SUM(ID^3) FROM インポート記録")
14161272936256

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

Public Function DBCount(ByVal strQuerySQL As String) As Variant
On Error GoTo Err_DBCount
   Dim N
   Dim rst As ADODB.Recordset

   Set rst = New ADODB.Recordset
   With rst
     .Open strQuerySQL, _
        CurrentProject.Connection, _
        adOpenStatic, _
        adLockReadOnly
     If Not .BOF Then
       .MoveFirst ' <-- 省略可!
       N = Nz(.Fields(0), 0)
     End If
   End With
Exit_DBCount:
On Error Resume Next
   rst.Close
   Set rst = Nothing
   DBCount = N
   Exit Function
Err_DBCount:
   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBCount)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
   Resume Exit_DBCount
End Function
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2006/06/24 06:32

モジュール化すれば下記のようになります。


---
Sub y()
Dim rs As New ADODB.Recordset
Dim SQL As String
SQL = "SELECT Sum([A]^3) AS こたえ FROM データテーブル;"
rs.Open SQL, CurrentProject.Connection, _
adOpenKeyset, adLockOptimistic
MsgBox rs.Fields("こたえ")
rs.Close
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2006/06/24 06:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!