こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Accessのクエリーで合計を出したい

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

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

投稿日時 - 2003-08-02 18:43:30

QNo.617947

すぐに回答ほしいです

質問者が選んだベストアンサー

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(略)と思われ。
 

投稿日時 - 2003-08-03 01:35:10

お礼

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

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

投稿日時 - 2003-08-03 11:05:12

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

sum関数ではだめですか?
SELECT SUM(fieldname) FROM tablename WHERE conditions

投稿日時 - 2003-08-02 18:54:25

補足

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

投稿日時 - 2003-08-02 20:29:14

ANo.1

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

の前に、タコなテーブル設計の見直しの方が先決だと思いますが。

投稿日時 - 2003-08-02 18:54:19

お礼

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

投稿日時 - 2003-08-02 20:28:55

あなたにオススメの質問