
お世話になります。アクセスの超初心者です。
数値型であれば同じ列の合計できますが、テキスト型で以下のように
連結できる方法がございませんでしょうか?
<元テーブル>
レコード番号 列:キーワード(テキスト型) 列:抽出条件
1 "山,川" AAA
2 "海外,国内" AAA
3 "熊,馬" BBB
↓このテーブルを元にクエリをかける
<クエリ出力結果> 列:抽出条件にAAAを指定
列:キーワードの合計(連結)
"山,川、海外,国内"
^^
↑連結の境目には"、"などの区切りを入れたい。
宜しくお願い致します。
No.7ベストアンサー
- 回答日時:
クエリに DBSelect関数を組み込む場合は、次のように書きます。
・SELECT文で使う。
・TOP 1 を使う。
がミソです。
SELECT TOP 1 DBSelect("SELECT キーワード FROM テーブル2 WHERE 抽出条件='AAA'","、") AS 式1
FROM テーブル2;
<クエリ3>
山,川、海外,国内、
という実行結果を得ます。
さて、この場合、区切り子が最後にも付いています。
これが、邪魔であれば DBSelect 関数を修正します。
修正後の実行結果です。
[イミディエイト]
? DBSelect("SELECT キーワード FROM テーブル2 WHERE 抽出条件='AAA'", "、")
山,川、海外,国内
? DBSelect("SELECT キーワード FROM テーブル2 WHERE 抽出条件='AAA'")
山,川;海外,国内
念のために DBSelect 関数を再度示して置きます。
Public Function DBSelect(ByVal strQuerySQL As String, _
Optional ByVal strSeparator 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 Datas As String
Set rst = New ADODB.Recordset
' =================
' Begin With: rst
' -----------------
With rst
.Open strQuerySQL, _
CurrentProject.Connection, _
adOpenStatic, _
adLockReadOnly
If Not .BOF Then
M = .RecordCount - 1
N = .Fields.Count - 1
.MoveFirst
For R = 0 To M
For C = 0 To N
Datas = Datas & .Fields(C) & strSeparator
Next C
.MoveNext
Next R
End If
End With
' ---------------
' End With: rst
' ===============
Exit_DBSelect:
On Error Resume Next
DBSelect = Left(Datas, Len(Datas) - 1) & ""
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 TOP 1 DBSelect("SELECT キーワード FROM テーブル2 WHERE 抽出条件='[Forms]![抽出条件]![テキストボックス]'","、") AS 式1
FROM テーブル2;
No.8
- 回答日時:
SELECT TOP 1 DBSelect("SELECT キーワード FROM テーブル2 WHERE 抽出条件='" & Forms!抽出条件!条件文 & "'","、") AS 式1
FROM テーブル2;
ビルドを利用してフォームを参照するようにした場合に生成されたSQL文です。
結果は、同じです。
<バグのお知らせ>
Exit_DBSelect:
DBSelect = Left(Datas, Len(Datas) + (Len(Datas) > 0))
Exit Function
Exit_DBSelect:ブロックで Left関数のエラー対策にバグがありました。
上述の訂正で、 Forms!抽出条件!条件文="AAC" でもエラーが出なくなります。
No.5
- 回答日時:
失礼、後段が欠落していたようです。
Exit_DBSelect:
DBSelect = Datas & ""
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
丁寧なご回答ありがとうございます。
教えていただきました構文をモジュールに貼り付け
クエリで関数から指定してみました。
式1: DBSelect("SELECT キーワード FROM テーブル1 WHERE 抽出条件='AAA'","、")
実行結果は、エラーはでないのですが、全て空欄でした。
根本的に使い方を間違えているのでしょうか?
もう少しご教示いただけると幸いです。
宜しくお願い致します。
No.4
- 回答日時:
<テーブル2>
ID___キーワード___抽出条件
1____山,川___________AAA
2____海外,国内_____AAA
3____熊,馬___________BBB
[イミディエイト]
? DBSelect("SELECT キーワード FROM テーブル2 WHERE 抽出条件='AAA'", "、")
山,川、海外,国内、
このような結果を得たいということでしょうか?
No2さんのアドバイスに従って関数を作成してみました。
これを提示することが妥当かどうかは疑問の残るところです。
が、知らなければ、なかなかでしょう。
これを機会にさらに自分で勉強されるという前提で上述の DBSelect関数を紹介しておきます。
Public Function DBSelect(ByVal strQuerySQL As String, _
ByVal strSeparator 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 Datas As String
Set rst = New ADODB.Recordset
' =================
' Begin With: rst
' -----------------
With rst
.Open strQuerySQL, _
CurrentProject.Connection, _
adOpenStatic, _
adLockReadOnly
If Not .BOF Then
' --------------
' 配列を再宣言
' --------------
M = .RecordCount - 1
N = .Fields.Count - 1
' ------------------------------------
' 列情報を For-Next で配列に代入する
' ------------------------------------
.MoveFirst
For R = 0 To M
For C = 0 To N
Datas = Datas & .Fields(C) & strSeparator
Next C
.MoveNext
Next R
End If
End With
' ---------------
' End With: rst
' ===============
Exit_DBSelect:
On Error Resume Next
No.3
- 回答日時:
レコード番号というフィールドがあるのですね
抽出条件(変なフィールド名ですね)ごとにレコード番号の順に連番を振るクエリを作ります
連番:DCount("*","元テーブル","レコード番号<=" & [レコード番号] & " and 抽出条件='" & [抽出条件] & "'")
このクエリをクロス集計クエリに変え、
抽出条件:行見出し
連番:列見出し
キーワード:値:先頭
これで
抽出条件 1 2
--------------------------
AAA "山,川" "海外,国内"
BBB "熊,馬"
のような結果が得られます
ひとつのフィールドにしたければこれからもう一段クエリを組んでください
ご親切にありがとうございます。
やってみてできました!クロス集計は苦手で今まであまり手を出さなかったので、こうやって使うのかぁーと感嘆してます。。
大変恐縮ですがもう少しご教示いただけますでしょうか。
>ひとつのフィールドにしたければこれからもう一段クエリを組んでください
同じデータを読み込む際はクエリに以下の式を入れてできました。
結合: [1] & "、" & [2] & "、" & [3]
処理を自動化したいと思います。
毎回、読み込むデータ量が異なる場合に"もう一段"のクエリで
指定する式に困りました。
クロス集計クエリの結果で、抽出条件の横軸が増えたり減ったりしますよね?
抽出条件 1 2
--------------------------
AAA "山,川" "海外,国内"
BBB "熊,馬"
↓
抽出条件 1 2 3 4 ←増えた
----------------------------------------------------
AAA "山,川" "海外,国内" "町,都市" "鳥,魚"
BBB "熊,馬"
このような場合はどうやってクエリに結合する式を書けばいいのか困りました。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
[Access]異なるレコード間の文字列連結
その他(データベース)
-
ACCESSでひとつのフィールドに内容をまとめる
Access(アクセス)
-
-
4
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
5
ACCESSでの文字と数字の結合について
Access(アクセス)
-
6
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
7
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
8
Accessでグループ化した結果フィールドをつなげるには?
その他(Microsoft Office)
-
9
Microsoft Access で同じフィールドの文字列の結合
Access(アクセス)
-
10
ACCESS 一つのフィールドに複数レコードの値をセットしたい
その他(データベース)
-
11
Accessのフィールド結合について
Access(アクセス)
-
12
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
13
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
14
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
15
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
16
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
17
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
18
アクセスのレポートのヘッダーを2ページ以降にもつけるには?
Access(アクセス)
-
19
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
20
Accessのクエリで2つのフィールドが同条件の場合に結合したい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで、抽出したデータだ...
-
【AccessVBA】レコードセットOp...
-
PDFファイルから特定の文字を検...
-
access クエリ yes/no型のクエ...
-
アクセス 同じフィールド(テキ...
-
「パラメータが少なすぎます。3...
-
【Access】条件未入力時、全件...
-
エクセル関数で住所から丁目番...
-
Excel 文字列から6桁の数値の抽出
-
Triton X-100 bufferの作り方に...
-
Access チェックボックスを利用...
-
未審査請求包袋抽出表作成とは...
-
EXCEL関数 MAX関数と複合的に...
-
エクセル VBA メール本文に指定...
-
PDFファイル/抽出許可され...
-
ACCESSのクエリー抽出条件にIIF...
-
【エクセルVBA】 A1セルを参照...
-
Accessで○ヶ月前以前を抽出する...
-
【EXCEL VBA メール文からのキ...
-
ACCESSでVBAから選択クエリの抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、抽出したデータだ...
-
ACCESSのクエリー抽出条件にIIF...
-
X-Ripperというフリーウェアに...
-
未審査請求包袋抽出表作成とは...
-
「パラメータが少なすぎます。3...
-
Excel 文字列から6桁の数値の抽出
-
エクセル VBA メール本文に指定...
-
PDFファイル/抽出許可され...
-
ACCESS クエリ 条件以外のレ...
-
【AccessVBA】レコードセットOp...
-
access クエリ yes/no型のクエ...
-
AccessのWHERE句において、変数...
-
PDFファイルから特定の文字を検...
-
アクセス 同じフィールド(テキ...
-
エクセル関数で住所から丁目番...
-
Triton X-100 bufferの作り方に...
-
Access チェックボックスを利用...
-
Accessの選択クエリの抽出条件...
-
PCゲーム 音声 画像 抽出方法
-
アクセスでエクスポートするフ...
おすすめ情報