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(アクセス)
-
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
アクセス 同じフィールド(テキスト型)のレコードを連結させたい
Access(アクセス)
-
-
4
ACCESS 一つのフィールドに複数レコードの値をセットしたい
その他(データベース)
-
5
access 複数フィールドを1フィールドに
Access(アクセス)
-
6
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
7
ACCESS 「パラメータの入力」を消したい!!
Access(アクセス)
-
8
「#エラー」の回避
Access(アクセス)
-
9
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
10
アクセスで複数レコードを1レコードにできますか?
その他(ソフトウェア)
-
11
Accessでテキストが合体できる関数ないですか?
Access(アクセス)
-
12
フィルタ後のフォームの件数の取得の仕方
Access(アクセス)
-
13
ACCESSでタイトルバーを非表示にする方法
Access(アクセス)
-
14
ACCESSのテーブル複数行を1行にしてエクスポートは?
Access(アクセス)
-
15
Accessで今日から5日後
その他(データベース)
-
16
ACCESSでの文字と数字の結合について
Access(アクセス)
-
17
accessで重複を防ぎたい
Access(アクセス)
-
18
ACCESS 重複データを1つだけ表示したい(初心者です)
Access(アクセス)
-
19
Accessフォームのボタンの二度押し禁止
Access(アクセス)
-
20
OR関数
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
8月までっていつまでのことでし...
-
カレンダーの日付 5/Bの意味に...
-
「6月まで」というのは6月以内...
-
月の最後の週の呼び名は?
-
10月をもって辞めるって、10...
-
一ヶ月前、一ヶ月後
-
定年になる年度を関数で算出したい
-
昔の愛称?「~の字」
-
「おじろく」は長男が死んだら...
-
自治会の通常総会の年度について
-
エクセルのフィルターを複数シ...
-
入社が2月1日とした場合、3ヶ月...
-
VBA ユーザーフォームのChange...
-
満何歳の意味
-
足かけ~年の足かけとは?
-
総会の年度表記について
-
「1年以上」の定義について
-
董卓の酒池肉林って、具体的に...
-
「なんで付き合おうと思ったか...
-
今は何年度ですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「6月まで」というのは6月以内...
-
カレンダーの日付 5/Bの意味に...
-
8月までっていつまでのことでし...
-
月の最後の週の呼び名は?
-
自治会の通常総会の年度について
-
10月をもって辞めるって、10...
-
エクセルのフィルターを複数シ...
-
確認ですが普通5月までに決める...
-
満何歳の意味
-
総会の年度表記について
-
昔の愛称?「~の字」
-
入社が2月1日とした場合、3ヶ月...
-
今は何年度ですか?
-
「1年以上」の定義について
-
VBAで先月、先々月を求める方法
-
○年後の3月末日を関数で出したい
-
一ヶ月前、一ヶ月後
-
「なんで付き合おうと思ったか...
-
定年になる年度を関数で算出したい
-
日本の陰暦(旧暦)にあった「1...
おすすめ情報