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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
アクセス 同じフィールド(テキスト型)のレコードを連結させたい
Access(アクセス)
-
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
access 複数フィールドを1フィールドに
Access(アクセス)
-
-
4
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
5
ACCESS 一つのフィールドに複数レコードの値をセットしたい
その他(データベース)
-
6
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
7
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
8
ACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?
Access(アクセス)
-
9
ACCESSのデータに自動で半角スペースを入れたい
その他(データベース)
-
10
Accessのコマンドボタンの立体化について
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カレンダーの日付 5/Bの意味に...
-
10月をもって辞めるって、10...
-
月の最後の週の呼び名は?
-
8月までっていつまでのことでし...
-
昔の愛称?「~の字」
-
「おじろく」は長男が死んだら...
-
エクセルのフィルターを複数シ...
-
昔は何歳くらいからお酒を飲ん...
-
入社が2月1日とした場合、3ヶ月...
-
一ヶ月前、一ヶ月後
-
定年になる年度を関数で算出したい
-
「1年以上」の定義について
-
12:00 PM は何時?
-
「6月まで」というのは6月以内...
-
○年後の3月末日を関数で出したい
-
願望 春より秋がよし 思い立つ...
-
ExcelVBAで質問です。Workbook_...
-
確認ですが普通5月までに決める...
-
「なんで付き合おうと思ったか...
-
エクセルVBAでのオートフィル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
8月までっていつまでのことでし...
-
カレンダーの日付 5/Bの意味に...
-
「6月まで」というのは6月以内...
-
月の最後の週の呼び名は?
-
昔の愛称?「~の字」
-
10月をもって辞めるって、10...
-
エクセルのフィルターを複数シ...
-
入社が2月1日とした場合、3ヶ月...
-
満何歳の意味
-
「1年以上」の定義について
-
昔は何歳くらいからお酒を飲ん...
-
「なんで付き合おうと思ったか...
-
○年後の3月末日を関数で出したい
-
月度ってどういう意味ですか
-
「おじろく」は長男が死んだら...
-
今は何年度ですか?
-
一ヶ月前、一ヶ月後
-
8月末に「暑気払い」はおかしい?
-
VBAで先月、先々月を求める方法
-
確認ですが普通5月までに決める...
おすすめ情報