海外旅行から帰ってきたら、まず何を食べる?

WinXPでAccess97を使用しています。

数値型のフィールドで、名前が「1」「2」・・・「50」とついてます。これをクエリーで、それぞれのフィールドの値を合計する演算フィールド「合計」を作成したいと思います。
「合計:[1]+[2]+・・・[50]」でもいいのですが、式が長くなります。ForNext文などVBAのループを使ってモジュールに記述して、合計を出す方法はありますか?

A 回答 (3件)

Public Function GetFieldsTotal(ByRef strTblName As String) As Long


Dim db As DAO.Database
Dim tbl As DAO.TableDef
Dim rs As DAO.Recordset
Dim strSql As String
Dim i As Long

On Error Goto ErrLine

Set db = CurrentDb()
Set tbl = db.TableDefs(strTblName)
strSql = "SELECT "

With tbl
For i = 0 To .Fields.Count
strSql = strSql & "[" & .Fields(i).Name & "] + "
Next i
End With

strSql = Left$(strSql, Len(strSql) - 3)
strSql = strSql & " As Total"
strSql = strSql & " FROM " & strTblName
strSql = strSql & " WHERE ........"

Set rs = db.OpenRecordset(strSql, dbOpenSnapshot)
GetFieldsTotal = rs.Fields(0).Value
rs.Close
db.Close

ExitLine:

Set rs = Nothing
Set tbl = Nothing
Set db = Nothing
Exit Function

ErrLine:

'例外発生時の戻り値は再考されたい。
GetFieldsTotal = -1
Resume ExitLine

End Function


例えば、↑こんな風にでもすれば、一応合計は求まる理屈ですが、性能が向上する訳ではないので、抜本的な解決にはなりません。
やはり、テーブル設計を見直すのがスジかと。



# [ ]で括らないと使えない識別子を使ってる時点でDQ(略)と思われ。
 
    • good
    • 0
この回答へのお礼

うまく合計が出せました!ありがとうございます!!

>やはり、テーブル設計を見直すのがスジかと。
はい、ご指摘通り見直します。私の無理な質問に対してご丁寧にコードまで書いていただき、本当にありがとうございました(*^_^*)

お礼日時:2003/08/03 11:05

sum関数ではだめですか?


SELECT SUM(fieldname) FROM tablename WHERE conditions

この回答への補足

早速ありがとうございます。複数のレコードを集計するのではないのですが、SUM関数を使うのでしょうか?

補足日時:2003/08/02 20:29
    • good
    • 0

> ForNext文などVBAのループを使ってモジュールに記述して、合計を出す方法はありますか?



の前に、タコなテーブル設計の見直しの方が先決だと思いますが。
    • good
    • 0
この回答へのお礼

ありがとうございます。ご指摘の通りですね。無理なテーブル設計になっています。

お礼日時:2003/08/02 20:28

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


おすすめ情報