• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSでひとつのフィールドに内容をまとめる)

Accessのデータを年月ごとにまとめる方法は?

このQ&Aのポイント
  • Accessのテーブルで特定のフィールドのデータを年月ごとにまとめる方法を教えてください。
  • クエリを使用して、Accessのデータを年月ごとにひとつのフィールドにまとめる方法をお教えください。
  • エクセルにエクスポートするために、Accessのデータを年月ごとにまとめる方法を知りたいです。

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

  • ベストアンサー
回答No.2

1、クエリにOrder BY 句の追加必要。 2、DBSelect関数のSQL文のOrder BY 句の見直し必要。 先の回答はあくまでもテストのそれ。 2つの見直しは必須かと思います。 【DBSelect関数】 (1)標準モジュールに追加してください。 (2)参照設定を追加してください。 *標準モジュールも配布に含まれるので配布可能ですよ。 Public Function DBSelect(ByVal strQuerySQL As String) As String On Error GoTo Err_DBSelect   Dim I As Integer   Dim J As Integer   Dim R As Integer   Dim C As Integer   Dim M As Integer   Dim N As Integer   Dim rst As ADODB.Recordset   Dim fld As ADODB.Field   Dim strList As String   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _       CurrentProject.Connection, _       adOpenStatic, _       adLockReadOnly     If Not .BOF Then       ' --------------       ' 配列を再宣言       ' --------------       M = .RecordCount - 1       N = .Fields.Count - 1       If M > 99 Then         MsgBox "読込む行総数を100行に下方修正しました。(DBSelect)", _           vbInformation, _           " お知らせ"         M = 99       End If       ReDim DataValues(M, N)       ' ------------------------------------       ' 列情報を For-Next で配列に代入する       ' ------------------------------------       .MoveFirst       For R = 0 To M         C = -1         For Each fld In .Fields           With fld             C = C + 1             ' --------------------------             ' 列データを表示形式に変換             ' --------------------------             Select Case .Type               Case adBoolean ' ブール型                 DataValues(R, C) = IIf(.Value = -1, "Yes", "No")               Case adChar, adVarChar ' 文字列型                 DataValues(R, C) = Nz(.Value, "")               Case adDBDate, adDBTimeStamp ' 日付型、日付/時刻型                 DataValues(R, C) = .Value               Case adSmallInt, adInteger ' 整数                 DataValues(R, C) = FormatNumber(.Value, 0)               Case adSingle, adDouble ' 浮動小数点型                 DataValues(R, C) = FormatNumber(.Value, 2)               Case adCurrency ' 通貨型                 DataValues(R, C) = FormatCurrency(.Value, 2)               Case Else                 DataValues(R, C) = .Value             End Select           End With         Next fld         .MoveNext       Next R     Else       ReDim DataValues(0, 0)       DataValues(0, 0) = ""       strList = ""     End If   End With   ' -------------------------------   ' セミコロン(;)で連結して1文に   ' -------------------------------   For I = 0 To M     For J = 0 To N       strList = strList & DataValues(I, J) & ";"     Next J   Next I Exit_DBSelect: On Error Resume Next   rst.Close   Set rst = Nothing   DBSelect = strList   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _      "・Err.Description=" & Err.Description & Chr$(13) & _      "・SQL Text=" & strQuerySQL, _      vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function

masunona
質問者

お礼

丁寧に教えていただいてありがとうございます! おかげさまで標準モジュールの設定や参照設定はできました! クエリのSQL文を以下のように書いてみたのですが SELECT DISTINCT 年月, DBSelect("SELECT 内容 FROM TEST WHERE 年月="& [年月] &""ORDER BY ID") AS 内容 FROM TEST; 「DBSelect("SELECT 内容 FROM TEST WHERE 年月="& [年月] &""ORDER BY ID") AS 内容 FROM TEST;の構文エラー:演算子がありません」 と出てしまいます。 ほかにもいくつかやってみたのですが、 エラーメッセージが延々と出てきてokを押しても押しても消えず、毎回Access自体を閉じています・・・。 どこが間違っているか教えていただけますか? よろしくお願いいたします!

その他の回答 (2)

回答No.3

まず、イミディエイトウインドウでSQL文をテストしたがいいですよ。 テスト要領は添付画像を参照して下さい。 その際、テーブル名、列名は質問者のそれに合わせて下さい。 なお、私は、列[年月]は文字列と仮定してテストしています。

masunona
質問者

お礼

ありがとうございました!無事にクエリを完成させることができました! データ量が多いととても時間がかかるので制限をかけてあるのですね。 大変勉強になりました! ありがとうございます!

回答No.1

一番安直に実現するには、関数を自作することです。 例えば、図ではDBSelect()を自作してヒットしたフィールドを";"で連結して戻しています。 ";"をReplace関数で" "に置換すれば目的は達成されます。 まあ、邪道と言えば邪道ですが、DBSelect()の類の関数はアプリケーションではかなり重宝します。 仮に、試されるつもりならコードを提示します。

masunona
質問者

お礼

ありがとうございます! 関数の自作・・やったことないですがやってみたいです! ちなみに当方Access2010を使用していて、 私が作ったものを他の人たちに配布し、 他の人たちはAccessRuntimeを使ってそれを使用しています。 このような環境でも可能でしょうか? よろしければコード教えてください! お願いします!!

関連するQ&A