プロが教える店舗&オフィスのセキュリティ対策術

Accessについて質問です。
もともとあるデータを使っていて、0のデータが空白となってしまいました。
そこで、クエリに|登録数: Nz([登録件数],0)|というフィールドを作り、登録件数フィールドが空白の時には0が表示されるようになっています。

そのクエリを元にレポートを作成して、登録数の合計を表示させようとしたらエラーになってしまいました。
どうしたら合計を表示させる事ができますでしょうか?

NZ関数を使っているから合計がエラーになってしまうのでしょうか?
NZ関数が原因の場合、その他の関数を使って表示することは可能なのでしょうか?

A 回答 (7件)

再掲(質問に答えていないですよ)



>どこに変えたのですか?
>エラーの内容は?

もうひとつ、Sum関数はNullを除いて集計してくれます
合計でいいのなら

Sum(登録件数)

でOKです

詳細のほうもNullのときに0を表示させたいだけなら
Nz関数など使わなくても書式で対応できます

あるいはもっと大元のテーブルで規定値を0にしておいてもいいですね
    • good
    • 0
この回答へのお礼

再掲(質問に答えていないですよ)

>どこに変えたのですか?
>エラーの内容は?
プレビュー表示にした時に「エラー#」と表示されたのみです。
素人なのでこれくらいしかわからずすみません。

前回なぜ表示されなかったのか解らないままですが、再度レポートを新規で作成したところ『Sum(登録件数)』で上手く表示されました。

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

お礼日時:2007/05/29 16:43

>場所を変えてみましたがエラーとなってしまいます。


どこに変えたのですか?
エラーの内容は?

>他になにかエラーの原因となるものがわかりましたら
他によくやるミスといえば
ソースのフィールド以外を集計式に使用するというやつなんですが
>クエリに|登録数: Nz([登録件数],0)|というフィールドを作り
とあったので登録数はソースのクエリのフィールドだと判断したのですが
ひょっとしてレポート上のテキストボックスだったりして

この回答への補足

プレビュー表示にした時にエラー#となります。

一応クエリにフィールドはあります。
その「登録数: Nz([登録件数],0)」フィールドの合計をレポートに表示させたいと思います。

よろしくお願いいたします。

補足日時:2007/05/20 11:38
    • good
    • 0

<データテーブル>


ID____登録数
1_____________1
2_____________2
3_____________3

この場合、登録数を求めるのは僅か1行です。

[イミディエイト]
? DBSum("登録数", "データテーブル")
6

手順1: 下記の DBSum 関数を標準モジュールに登録する。
手順2:  [イミディエイト]ウィンドウで登録数合計を表示してみる。
手順3: レポートに表示用のテキストボックスを非連結で配置する。
手順4: 表示用テキストボックスに =DBSum("xxx", "xxxx", "xxxxx") と関数を仕組む。

DBSum(列名, 表名, 抽出条件(Where節))

色々と面倒であれば、こういうやり方でも目的は達成できます。

Public Function DBSum(ByVal strField As String, _
           ByVal strTable As String, _
           Optional strWhere As String = "") As Variant
On Error GoTo Err_DBSum
  Dim N
  Dim strQuerySQL As String
  Dim rst     As ADODB.Recordset
  
  Set rst = New ADODB.Recordset
  strQuerySQL = "SELECT SUM(" & strField & ") FROM " & strTable
  If Len(strWhere) > 0 Then
    strQuerySQL = strQuerySQL & " WHERE " & strWhere
  End If
  With rst
     .Open strQuerySQL, _
        CurrentProject.Connection, _
        adOpenStatic, _
        adLockReadOnly
     If Not .BOF Then
       .MoveFirst
       N = Nz(.Fields(0), 0)
     End If
  End With
Exit_DBSum:
On Error Resume Next
   rst.Close
   Set rst = Nothing
   DBSum = N
   Exit Function
Err_DBSum:
   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSum)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBSum
End Function

多分、この方式と同じことを内容的にしていないのではないですか?

この回答への補足

ごめんなさい。
初めに記入しなかったこちらのミスですが、Access超初心者です。

せっかくアドバイスを頂いたのですが、よくわかりません。
すみません。

もしよろしければもう少し簡単な方法ではできないでしょうか。
それともやろうとしている事自体が難しいレベルのものなのでしょうか。

補足日時:2007/05/20 11:28
    • good
    • 0

#3です



ごめんなさい、いきなりは合計しませんね;;

「集計実行」は、詳細にコントロール配置して、累積していかないと駄目みたいです

どこに配置して、どう言うコントロールソースを設定しているか?
補足お願いできますか?

コントロールとコントロールソースが、同じ名前を使って、目的と違う集計した記憶は、過去にあるのですが・・・エラーにはならなかったと思いましたが・・・
    • good
    • 0

どうして、エラーになってるか?判りかねるのですが・・・



関数なしで、
「テキストボックス」-「プロパティ」-「データ」-「集計実行」
で、設定し、コントロールソースに集計するデータを入れれば合計した記憶があるのですが・・・

「詳細」で使うと累計、「グループフッター」で使うとグループの累計、「レポートフッター」でレポートの累計
という形で・・・

詳細で使うときは行数のカウンターとしても使う方法があったと思いましたが・・・
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

集計機能とても便利ですね。
初めて知りました。

今回は別としてまた機会がありましたら利用させていただきます。

お礼日時:2007/05/20 11:37

>NZ関数を使っているから合計がエラーになってしまうのでしょうか?


このようなことはありません
集計をどこで行っています?

ページフッターでは集計関数は使えませんよ

この回答への補足

場所を変えてみましたがエラーとなってしまいます。
他になにかエラーの原因となるものがわかりましたら教えていただけると助かります。

補足日時:2007/05/16 21:03
    • good
    • 0
この回答へのお礼

早い回答ありがとうございます。
確かにページフッターでは表示されませんでした。

お礼日時:2007/05/16 21:03

> そこで、クエリに|登録数: Nz([登録件数],0)|というフィールドを作り、登録件数フィールドが空白の時には0が表示されるようになっています。



登録数: CLng(Nz([登録件数],0))
としてみたらいかがですか?

この回答への補足

ごめんなさい。
こちらの説明不足で申し訳ないのですが、今回欲しい物は最終的な登録件数の合計です。
たとえば、登録件数が1、2、3の3件データがあれば、その合計の「6」というものを計算してレポートに表示したいです。

再度、質問になってしまい申し訳ないです。
よろしくお願いいたします。

補足日時:2007/05/16 20:51
    • good
    • 0
この回答へのお礼

ありがとうございます。
お返事はやくて助かりました。

>登録数: CLng(Nz([登録件数],0))
さっそくやってみました。
式自体はうまくできあがりました。

お礼日時:2007/05/16 20:45

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