Microsoft Access 掲示板

クエリ結果のレコードカウント

6 コメント
views
4 フォロー

VBAの以下コードでクエリである条件を抽出した結果、
TM_COUNT(i) = REC![件数].Value の箇所で「インデックスが有効範囲にありません」とエラーがでます。
qry.SQL = TM_DATA()の実行結果はレコード件数27件あるのに、変数iは21件で止まっています。
何が問題か教えていただけますでしょうか?

    Set qry = db.CreateQueryDef("")
    qry.SQL = TM_DATA()
    Set REC = qry.OpenRecordset

    i = 1

    Do Until REC.EOF
        TM_COUNT(i) = REC![件数].Value
        TM_NAME(i) = REC![部門].Value
    StrBody = StrBody & "    " & TM_NAME(i) & "  " & TM_COUNT(i) & "台" & Chr(13) & Chr(10)
    i = i + 1
        REC.MoveNext
    Loop
        Set qry = Nothing
        Set REC = Nothing
        SQL = ""
    i = 1

kitty
作成: 2020/06/02 (火) 11:17:03
通報 ...
1

TM_DATA() というのは自作関数ですか。
qry.SQL にはどのようなSQL文がセットされていますか。

考えられる原因としては、上記のSQLに「件数」というフィールドがないということです。

2
kitty 2020/06/02 (火) 14:51:34 e4054@a3086

hatena様

ご回答ありがとうございます。
TM_DATA() の中身は以下の通りです。

Function TM_DATA()
    TM_DATA = "SELECT T.[部門], Count(T.[部門]) AS 件数 FROM TEIKEN AS T"
    TM_DATA = TM_DATA & " WHERE (((Format([次回],'yyyy/mm'))=Format(Now(),'yyyy/mm'))) GROUP BY T.[部門] HAVING (((T.[部門]) Is Not Null));"

End Function

以上、よろしくお願い致します。

3

TM_COUNT(i) TM_NAME(i)というのは配列だと思いますが、これの宣言部分のコードも提示してもらえますか。

4
kitty 2020/06/03 (水) 11:54:36 e4054@a3086

hatena様

お世話になります。
以下でよろしいでしょうか?

Dim TM_COUNT(20)  As Integer
Dim TM_NAME(20) As String

5

TM_COUNT(i) = REC![件数].Value の箇所で「インデックスが有効範囲にありません」とエラーがでます。
qry.SQL = TM_DATA()の実行結果はレコード件数27件あるのに、変数iは21件で止まっています。

Dim TM_COUNT(20)  As Integer
Dim TM_NAME(20) As String

配列の要素数が20なので、当然そうなりますね。
動的配列で宣言しておいて、レコード件数を取得してからReDimで要素数を設定しましょう。

    Dim TM_COUNT()  As Integer
    Dim TM_NAME() As String

    Set qry = db.CreateQueryDef("")
    qry.SQL = TM_DATA()
    Set REC = qry.OpenRecordset
    
    ReDim TM_COUNT(1 to REC.RecordCount)
    ReDim TM_NAME(1 to REC.RecordCount)

    '以下略

動的配列については下記を参照してください。

Office TANAKA - 変数の使い方[部屋数を変えられる動的配列]

6
kitty 2020/06/03 (水) 13:03:35 e4054@a3086

hatena様

お世話になります。
解決しました!

Dim TM_COUNT(20)  As Integer
Dim TM_NAME(20) As String
の意味を理解せず使用していました。

これを機会に良い勉強ができました。
ありがとうございました。