

Accessのテーブルで以下のようなデータがあります。
【年月】 【内容】
2013年11月 A
2013年11月 BC
2013年11月 D
2013年11月 EFGH
2013年12月 I
2013年12月 J
2013年12月 KL
2013年12月 MNO
2013年12月 PQRST
上記を、クエリで
【年月】 【内容】
2013年11月 A BC D EFGH
2013年12月 I J KL MNO PQRS
と、年月ごとに、内容をひとつのフィールドにまとめて表示させたいです。
集計でもカウントでもないのに、
クエリでこのようなことは可能でしょうか?
最終的にこのクエリを、エクセルにエクスポートしようと考えているので
最悪、エクセルで数式を組んでこのような形に仕上がるんでもいいです。
ただ、何度も行う作業になりますので
なるべく簡単な操作でこのような表が完成できるようにしたいです。
よろしくお願いいたします!
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

丁寧に教えていただいてありがとうございます!
おかげさまで標準モジュールの設定や参照設定はできました!
クエリの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自体を閉じています・・・。
どこが間違っているか教えていただけますか?
よろしくお願いいたします!
No.3
- 回答日時:
まず、イミディエイトウインドウでSQL文をテストしたがいいですよ。
テスト要領は添付画像を参照して下さい。
その際、テーブル名、列名は質問者のそれに合わせて下さい。
なお、私は、列[年月]は文字列と仮定してテストしています。

ありがとうございました!無事にクエリを完成させることができました!
データ量が多いととても時間がかかるので制限をかけてあるのですね。
大変勉強になりました!
ありがとうございます!
No.1
- 回答日時:
一番安直に実現するには、関数を自作することです。
例えば、図ではDBSelect()を自作してヒットしたフィールドを";"で連結して戻しています。
";"をReplace関数で" "に置換すれば目的は達成されます。
まあ、邪道と言えば邪道ですが、DBSelect()の類の関数はアプリケーションではかなり重宝します。
仮に、試されるつもりならコードを提示します。

ありがとうございます!
関数の自作・・やったことないですがやってみたいです!
ちなみに当方Access2010を使用していて、
私が作ったものを他の人たちに配布し、
他の人たちはAccessRuntimeを使ってそれを使用しています。
このような環境でも可能でしょうか?
よろしければコード教えてください!
お願いします!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サッカー・フットサル 北海道コンサドーレ札幌の話 1 2023/02/03 01:19
- 教育・ドキュメンタリー 北海道コンサドーレ札幌の話 2 2022/11/13 06:17
- CD・DVD・本屋 CDシングルの話 1 2022/07/31 17:33
- その他(エンターテインメント・スポーツ) 推しは、足りてますか? 2 2023/01/22 10:48
- 野球 北海道日本ハムファイターズとJ1昇格プレーオフの話 1 2023/02/03 01:22
- 野球 北海道日本ハムファイターズの話 2 2023/02/05 00:34
- その他(スポーツ) スポーツの話 1 2022/10/26 00:12
- サッカー・フットサル 北海道コンサドーレ札幌の話 2 2023/02/01 00:21
- サッカー・フットサル 北海道コンサドーレ札幌の話 1 2022/12/11 16:46
- タレント・お笑い芸人 食わず嫌い復活して欲しいですか? 1 2023/02/22 22:45
このQ&Aを見た人はこんなQ&Aも見ています
-
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
アクセス 同じフィールド(テキスト型)のレコードを連結させたい
Access(アクセス)
-
ACCESS 一つのフィールドに複数レコードの値をセットしたい
その他(データベース)
-
-
4
access 複数フィールドを1フィールドに
Access(アクセス)
-
5
アクセスで複数レコードを1レコードにできますか?
その他(ソフトウェア)
-
6
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
7
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
8
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
9
Accessでグループ化した結果フィールドをつなげるには?
その他(Microsoft Office)
-
10
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
11
Accessのクエリで2つのフィールドが同条件の場合に結合したい
その他(Microsoft Office)
-
12
Access テキスト型に対する指定桁での0埋め方法
その他(データベース)
-
13
ACCESSのクエリー抽出条件にIIFを使用して
Access(アクセス)
-
14
ACCESSのテーブル複数行を1行にしてエクスポートは?
Access(アクセス)
-
15
ACCESSでの文字と数字の結合について
Access(アクセス)
-
16
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
17
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
18
Accessのフィールド結合について
Access(アクセス)
-
19
アクセス2003 複数の列に分かれたデータを1列にまとめたい
Access(アクセス)
-
20
Accessでテキストが合体できる関数ないですか?
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
確認ですが普通5月までに決める...
-
月の最後の週の呼び名は?
-
カレンダーの日付 5/Bの意味に...
-
エクセルのフィルターを複数シ...
-
10月をもって辞めるって、10...
-
「6月まで」というのは6月以内...
-
入社が2月1日とした場合、3ヶ月...
-
自治会の通常総会の年度について
-
8月までっていつまでのことでし...
-
月度ってどういう意味ですか
-
「1年以上」の定義について
-
定年になる年度を関数で算出したい
-
満何歳の意味
-
○年後の3月末日を関数で出したい
-
2月が28日(29日)で終わる理由
-
総会の年度表記について
-
昔は何歳くらいからお酒を飲ん...
-
○月第○週 の数え方について
-
VBA ユーザーフォームのChange...
-
今年の7月は、祝日が移動になっ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自治会の通常総会の年度について
-
カレンダーの日付 5/Bの意味に...
-
確認ですが普通5月までに決める...
-
月の最後の週の呼び名は?
-
エクセルのフィルターを複数シ...
-
総会の年度表記について
-
8月までっていつまでのことでし...
-
入社が2月1日とした場合、3ヶ月...
-
「6月まで」というのは6月以内...
-
10月をもって辞めるって、10...
-
「1年以上」の定義について
-
昔の愛称?「~の字」
-
昔は何歳くらいからお酒を飲ん...
-
御入園?ご入園?
-
定年になる年度を関数で算出したい
-
月度ってどういう意味ですか
-
満何歳の意味
-
「なんで付き合おうと思ったか...
-
○年後の3月末日を関数で出したい
-
何故か毎年3月や4月に不運が続...
おすすめ情報