
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- その他(データベース) 20万行あるデータを動かしたい 2 2023/06/13 15:21
- Access(アクセス) accessデータを指定したExcel、そして指定したセルへエクスポートするaccess VBAコー 2 2023/05/17 17:02
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Access(アクセス) お世話になります ACCESSを使用しています 下記のクエリデータ(1)があります 商品名 行数 A 1 2022/09/05 08:52
このQ&Aを見た人はこんなQ&Aも見ています
-
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
行方向のデータを横に並べる
その他(データベース)
-
Accessでグループ化した結果フィールドをつなげるには?
その他(Microsoft Office)
-
-
4
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
5
アクセス 同じフィールド(テキスト型)のレコードを連結させたい
Access(アクセス)
-
6
Microsoft Access で同じフィールドの文字列の結合
Access(アクセス)
-
7
[Access]異なるレコード間の文字列連結
その他(データベース)
-
8
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
9
アクセス2003 複数の列に分かれたデータを1列にまとめたい
Access(アクセス)
-
10
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
11
ACCESSでひとつのフィールドに内容をまとめる
Access(アクセス)
-
12
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
13
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
14
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
15
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
16
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
17
Access2007でSQLの複数列副問い合わせについて
その他(データベース)
-
18
アクセス メモ型 255文字以上入れられない
Access(アクセス)
-
19
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
20
いつもお世話になっております access2010です 下記のようなクエリAがあるとします SELE
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessでクエリの結果だけをリ...
-
クロス集計クエリの結果をテー...
-
アクセスのクエリでSplit関数は...
-
access インポート時、既にある...
-
教えてください! アクセスのac...
-
ACCESSでテーブルの一部だけを...
-
アクセス 項目毎にデータを横...
-
ACCESS2000 クエリをテーブル化...
-
Access「レコードが削除されま...
-
クエリのデータをテーブルに入...
-
access テーブル作成クエリでテ...
-
Accessのクエリで、抽出条件で…...
-
ACCESSのクエリ(SQLビューにつ...
-
大至急!Accessで一定範囲のテ...
-
ACCESSで行数指定(5万行目~8...
-
デザインビューにてテーブルが...
-
テーブルの縦の合計がクエリで...
-
Microsoft Access 2003について
-
Access テーブルを検索し関連性...
-
Accessのクロス集計→テーブル作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
アクセスのクエリでSplit関数は...
-
Access「レコードが削除されま...
-
accessでクエリの結果だけをリ...
-
Access2010「クエリが複雑すぎ...
-
アクセス 項目毎にデータを横...
-
アクセス:クエリの結合とリレ...
-
デザインビューにてテーブルが...
-
クエリのデータをテーブルに入...
-
access テーブル作成クエリでテ...
-
Access DAOのExecuteメソッドの...
-
教えてください! アクセスのac...
-
更新不可能なクエリに対して更...
-
access インポート時、既にある...
-
ACCESSでテーブルの一部だけを...
-
テンポラリファイルのための空...
-
アクセス クロス集計クエリ→テ...
-
Accessのクエリで、抽出条件で…...
-
ACCESSで行数指定(5万行目~8...
-
ACCESS2000 クエリをテーブル化...
おすすめ情報