- ベストアンサー
Accessのデータを年月ごとにまとめる方法は?
- Accessのテーブルで特定のフィールドのデータを年月ごとにまとめる方法を教えてください。
- クエリを使用して、Accessのデータを年月ごとにひとつのフィールドにまとめる方法をお教えください。
- エクセルにエクスポートするために、Accessのデータを年月ごとにまとめる方法を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
一番安直に実現するには、関数を自作することです。 例えば、図ではDBSelect()を自作してヒットしたフィールドを";"で連結して戻しています。 ";"をReplace関数で" "に置換すれば目的は達成されます。 まあ、邪道と言えば邪道ですが、DBSelect()の類の関数はアプリケーションではかなり重宝します。 仮に、試されるつもりならコードを提示します。
お礼
ありがとうございます! 関数の自作・・やったことないですがやってみたいです! ちなみに当方Access2010を使用していて、 私が作ったものを他の人たちに配布し、 他の人たちはAccessRuntimeを使ってそれを使用しています。 このような環境でも可能でしょうか? よろしければコード教えてください! お願いします!!
お礼
丁寧に教えていただいてありがとうございます! おかげさまで標準モジュールの設定や参照設定はできました! クエリの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自体を閉じています・・・。 どこが間違っているか教えていただけますか? よろしくお願いいたします!