Access2003を使っています。
Accessはデータの紐付け程度のレベルしかありません。
今回、このようなことが実行したいのですが出来るかどうかわかりませんでしたので質問させていただきます。
添付画像のように、テキストが合体できるようなクエリ、関数はありませんでしょうか?
画像に示したのは例で、実際には数万レコードの、メモ型のデータを扱うことになります。ですのでメモ型でも合体できるような方法があれば教えてください。お願いいたします。
Accessで出来なければ、Excel2003でもかまいません。(出来ればAccessが良いですが)。また、それでも出来ないようであれば、このようなことが出来るフリーソフトなどを教えていただけると大変助かります。お手数ですが、回答をお待ちしています。よろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
速度を上げる方法もありますが、分かりやすく
ループの入れ子で処理します。
テーブルにはNo1さんへの補足にあるように順番の
フィールドがあるものとします。テーブル名は
テーブル1とします。
準備:
(1) テーブル1をもとに二つのクエリを作成
クエリ2はその1と順番のフィールドを昇順
に並べます。
クエリ1
SELECT テーブル1.その1
FROM テーブル1
GROUP BY テーブル1.その1;
クエリ2
SELECT テーブル1.その1, テーブル1.順番, テーブル1.その2
FROM テーブル1
ORDER BY テーブル1.その1, テーブル1.順番;
(2) データを取り込むテーブルの作成
テーブル2
その1 (メモ型)
その2 (メモ型)
(3) モジュールの作成
以下のコードを実行します。
DAOを使っているので、コード表のツールから
参照設定を選択して、
Microsoft DAO xx Object Library
(xxは3.6のような数字です。)
にチェックを入れて、上げられるところまで
上げておきます。
もし、Microsoft ActiveX Data Objects xx Library
にチェックが入っていればそれよりも上にしておいて
ください。
OKとします。
Sub test()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim rst As Recordset
Dim preFld As String
Dim posFld As String
Dim str As String
Set db = CurrentDb
Set rs1 = db.OpenRecordset("クエリ1")
Set rs2 = db.OpenRecordset("クエリ2")
Set rst = db.OpenRecordset("テーブル2", dbOpenDynaset)
rs1.MoveFirst
Do Until rs1.EOF
rs2.MoveFirst
Do Until rs2.EOF
If rs1![その1] = rs2![その1] Then
str = str & rs2![その2]
End If
rs2.MoveNext
Loop
rst.AddNew
rst![その1] = rs1![その1]
rst![その2] = str
rst.Update
str = ""
rs1.MoveNext
Loop
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
rst.Close: Set rst = Nothing
db.Close: Set db = Nothing
End Sub
ご回答ありがとうございました。最終的にpiroin654さんのやり方でデータを作ることができました。ありがとうございました。
実は、回答いただいた内容が全く分からず、「モジュール」「作成」とかでググってようやくVBAの実行ということが分かり、その後コピペして完成した次第です。自分の勉強不足を痛感しました。もっと勉強しないとダメですね・・・。でも本当に助かりました。ありがとうございました。
No.7
- 回答日時:
No6です。
コードの中の、
Dim preFld As String
Dim posFld As String
の二つは使用していないのでコメントアウト
するか、削除してください。
No.5
- 回答日時:
データモデルがよろしくありません。
「その1」が同じものを集めるクエリは簡単に
できますが、どの順位で組合せるかの情報が
不足しています。コンピュータは日本語を知り
ませんから、都合の良いように順番を決めて
くれません。
「その1.5」として結合順位を決める項目を
設ける必要があります。あるいは読点で
終わるものが先頭、「です。」で終わるのが
2番目、それ以外が3番目とかルールがある?
そうであば条件を提示してください。
ご回答ありがとうございます。確かに順番のカラムが抜けていたと指摘されて気づきました。今後は条件についてはきちんとしてから質問するように心がけたいと思います。ありがとうございました。
No.3
- 回答日時:
Access をやる方の間では、かなり一般的になっている関数です。
U-TANG さんに感謝。
DJoin 関数 - リスト文字列を取得する方法
http://www.f3.dion.ne.jp/~element/msaccess/AcTip …
ご回答ありがとうございました。DJoin関数のページもいろいろ見させてもらいました。まずはコードをコピペで実行できるくらいはスムーズに出来るようになりたいと思います。ありがとうございました。
No.2
- 回答日時:
<テーブル1>
その1_その2
01-1____AAA
01-1____BBB
01-1____CCC
01-2____DDD
01-2____EEE
<クエリ1>
その1_その2
01-1___AAA;BBB;CCC;
01-2___DDD;EEE;
<クエリ1のSQLビュー>
SELECT DISTINCT テーブル1.その1,
DBSelect("SELECT その2 FROM テーブル1 WHERE その1='" & [その1] & "'") AS その2
FROM テーブル1;
このDBSelect関数が利用出来ると言えば言えます。
列データをセミコロンで連結していますが、これは簡単に外せます。
Replace(DBSelect("・・・"), ";", "")
次は、DBSelect関数のコードです。
一旦、配列に格納していますが、これは無用です。
strListで連結するといいです。
※配列でも返す関数を質問文に合うよう急遽改造。しかも、その途中!
※大した修正ではありませんので宜しく。
Public Function DBSelect(ByVal strSQL 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 strSQL, 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
' =================
' Begin With: fld
' -----------------
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
' ---------------
' End With: fld
' ===============
Next fld
.MoveNext
Next R
Else
ReDim DataValues(0, 0)
DataValues(0, 0) = ""
strList = ""
End If
End With
' ---------------
' End With: rst
' ===============
' -------------------------------
' セミコロン(;)で連結して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=" & strSQL, _
vbExclamation, " 関数エラーメッセージ"
Resume Exit_DBSelect
End Function
この回答への補足
ご回答ありがとうございます。コードも書いていただきありがとうございます。ただ、当方にはまったく分かりません・・・申し訳ありません。
クエリのSQL画面で、
SELECT DISTINCT テーブル1.その1,
DBSelect("SELECT その2 FROM テーブル1 WHERE その1='" & [その1] & "'") AS その2
FROM テーブル1;
としてみたのですが、ダメでした。(「1」などは全角半角修正しましたが)
エラー文としては、
「SELECTステートメントが間違っている予約語や引数を含んでいるか、区切り記号が正しくありません。」
とでました。
2行目と3行目の頭の半角スペースを消してみたところ、
エラー文「式に未定義関数'DBSelect'があります。」となりました。
どういう事になっているか分かりますでしょうか?
この度はありがとうございました。初心者なので、モジュールということさえも分かりませんでしたので、補足の文章が意味不明ですよね、すみませんでした。
今後はモジュールくらいまでは理解できるように頑張りたいと思います。ありがとうございました。
No.1
- 回答日時:
例で言えば、3つの文章を結合しているようだがその結合の順番はどうやって制御するのか?
結合順まで考えないと、結合しても意味不明の文章になりかねない。
この回答への補足
ご回答ありがとうございます。結合の順番がない、確かにその通りですね。それでは順番のカラムがあったとすると、どうでしょうか?
結合番号____順番____本文
01-1____01____本文AAA
01-1____02____本文BBB
01-1____03____本文CCC
01-2____01____本文DDD
01-2____02____本文EEE
01-2____03____本文FFF
↓
結合番号____本文
01-1____本文AAA本文BBB本文CCC
01-2____本文DDD本文EEE本文FFF
となるのが理想です。出来ますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
行方向のデータを横に並べる
その他(データベース)
-
-
4
Accessでグループ化した結果フィールドをつなげるには?
その他(Microsoft Office)
-
5
ACCESS 一つのフィールドに複数レコードの値をセットしたい
その他(データベース)
-
6
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
7
[Access]異なるレコード間の文字列連結
その他(データベース)
-
8
ACCESSのグループ化
その他(データベース)
-
9
アクセス 同じフィールド(テキスト型)のレコードを連結させたい
Access(アクセス)
-
10
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
11
アクセスで同じ種類のものを横に並べたい
Access(アクセス)
-
12
クエリについて教えてください
Access(アクセス)
-
13
ACCESSのクエリで集計で、先頭・最後とは?
その他(データベース)
-
14
ACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?
Access(アクセス)
-
15
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
16
アクセス コンボボックスの選択値が表示されません
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
アクセス クロス集計クエリ→テ...
-
access インポート時、既にある...
-
Access「レコードが削除されま...
-
access テーブル作成クエリでテ...
-
更新不可能なクエリに対して更...
-
アクセス 項目毎にデータを横...
-
教えてください! アクセスのac...
-
テンポラリファイルのための空...
-
accessでクエリの結果だけをリ...
-
デザインビューにてテーブルが...
-
Access2010「クエリが複雑すぎ...
-
Accessのクロス集計→テーブル作...
-
アクセスのクエリでSplit関数は...
-
ACCESSでアンケート調査→回答ごとの...
-
クエリのデータをテーブルに入...
-
テーブルへのデータ追加の元と...
-
ACCESS テーブル作成の日付付与...
-
テーブル1にマクロで再クエリ...
-
アクセスで新しいレコードの追...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
アクセス:クエリの結合とリレ...
-
アクセスのクエリでSplit関数は...
-
デザインビューにてテーブルが...
-
アクセス 項目毎にデータを横...
-
access テーブル作成クエリでテ...
-
クエリのデータをテーブルに入...
-
access インポート時、既にある...
-
教えてください! アクセスのac...
-
accessでクエリの結果だけをリ...
-
Access「レコードが削除されま...
-
更新不可能なクエリに対して更...
-
アクセス クロス集計クエリ→テ...
-
ACCESS2000 クエリをテーブル化...
-
アクセスで新しいレコードの追...
-
Access2010「クエリが複雑すぎ...
-
Access 末尾に0を追加したい
-
ACCESSで行数指定(5万行目~8...
-
Accessのクロス集計→テーブル作...
-
アクセスのクエリとDlookupはど...
おすすめ情報