- ベストアンサー
同じフィールド文字列を結合させる方法とは?
山田 太郎(@f_a_007)の回答
DBSelect関数を使って添付図の結果を得るクエリは次のようです。 SELECT DISTINCT T5.品目番号, Replace(DBSelect("SELECT 集計列 FROM T5 WHERE 品目番号='" & [品目番号] & "'",","),","," や ") AS 集計集合列, T5.他の列 FROM T5; ただし、こういう結果を得るには DBSelect関数を少し修正する必要があります。 修正1、区切り記号を指定できるように。 修正2、レコード単位での改行をするか否か。 修正2は、今回は必要ありません。 が、使い勝手は向上します。 Public Function DBSelect(ByVal strQuerySQL As String, Optional Kugiri As String = ";", Optional isCR As Boolean = False) 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 ' ================= ' Begin With: rst ' ----------------- With rst .CursorLocation = adUseClient .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 ' ================= ' 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) & Kugiri Next J If isCR And I <> M Then strList = strList & Chr(13) End If Next I Exit_DBSelect: On Error Resume Next rst.Close Set rst = Nothing DBSelect = IIf(strList <> "", Left(strList, Len(strList) - 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
関連するQ&A
- 文字列フィールドの集計をしたい
[やっていること] このサイトで私が教えていただいた内容をデータベース化して保存しています。 [やりたいこと] ベストアンサーさんの「申告されているネーム」毎の集計を出したいと思っています。お名前は「数字・漢字・ローマ字」で申告されているものですが、お名前毎に合計をだしたいと思っています。それと、他のデータベースでも役に立てそうと感じている為。 [集計対象のテーブル] テーブル名:Access操作 フィールド名:NO、発生日、Accessテーマ、Access内容、Access項目、質問内容、アドバイザー、解決策、コマンド [やったこと] クエリを作成してフィールドに「NO」と「アドバイザー」をドラッグして、クエリフィールドの3列目に「式1: DCount("アドバイザー","Access操作")」を 記載しましたが、レコードの合計数字が表示されネーム毎の集計が出来ませんでした。 アドバイスをお願いします。
- ベストアンサー
- Access(アクセス)
- 集計したフィールド(数字)を文字列で表示させたい
Excelで「集計」をすると、集計したフィールドに"集計"という文字が入りますよね。 集計したフィールドには0(ゼロ)から始まるコードが入っていて、「置換」で"集計"を消すと0が消えたコードになってしまいます。 "集計"を消してもコードを文字列として表示させるにはどうしたらいいんでしょうか? 説明がわかりづらくてすみません。 よろしくお願い致します。
- 締切済み
- オフィス系ソフト
- Accessでのあいまい検索について
Access2010の使用者で&初心者です。 クエリの抽出条件に別テーブルのフィールドを文字列検索させ、その文字列が含まれていた場合は、その文字列を別フィールドに抜き出すというクエリを作成したいのですが・・ ・検索したいテーブル(T商品情報) ・年月日 ・品目情報 ・検索する文字列が入ったテーブル(T品目) ・検索文字 検索したいテーブル(T商品情報)の「品目情報」から、検索する文字列が入ったテーブル(T品目)の「検索文字」を検索し、その検索文字列が含まれていた場合は別フィールにその検索文字列を抽出。という作業を行いたく思っております。 例 ---------------------------T商品情報 年月日|品目情報 20010/8/10|武田様より、口頭にてもも大を53個受け付けました 20010/8/10|上坂様より、電話にてりんごを3個受け付けました 20010/8/10|木村様より、電話にてももを3個受け付けました --------------------------- ---------------------------T品目 検索文字 もも大 りんご もも --------------------------- ↓ ---------------------------クエリ 年月日|品目情報 | 検索文字 20010/8/10|武田様より、口頭にてもも大を53個受け付けました|もも大 20010/8/10|上坂様より、電話にてりんごを3個受け付けました|りんご 20010/8/10|木村様より、電話にてももを3個受け付けました|もも --------------------------- このようなクエリ結果を望んでおります。文章の中から商品名を抜き出し、その抜き出した商品に価格をひもづけたいのです。このようなことをクエリで行えますでしょうか?
- 締切済み
- その他(データベース)
- accessのクエリの結果に列を追加したい
accessのクエリで抽出したデータを、宅急便のソフトにインポートしたいと考えています。 宅急便のソフトのフォームには、アクセスのクエリに無い列(項目)があります。 クエリの結果に、定型の列を追加することは可能でしょうか? よろしくお願いします。 【クエリの結果】 お客様名 住所 電話番号 【希望のクエリ】 お客様名 住所 電話番号 宅急便の種類←(この部分をクエリに追加したい。この部分のデータは常に0を表示) クエリは、テーブルにある項目しか表示できないのでしょうか?
- ベストアンサー
- オフィス系ソフト
- Access:クエリーにて集計後に文字列結合したい。
Accessのクエリーでレコードのグループ化を行っている状態で、あるフィールドに対してだけ文字列の結合を行いたいのですが、集計部分をどのように指定すればよいかわからず困っています。 イメージとしては、SQLビューにて、グループ化されたレコードの合計が、 SUM([テーブル名].[フィールド名]) で求められる様に、 エクセルの文字列結合関数 CONCATENATE([テーブル名].[フィールド名]) が使いたい、という感じです、、 Accessにおける文字列結合は"&"を使うとありましたが、この場合どのように記述するべきでしょうか?
- ベストアンサー
- その他(データベース)
- 文字列型変数に1024を超えた文字列を代入した時に
VBでOracleDBに対してoo4oでクエリーを発行する際、 1024を超える文字列になってしまいました。 実際テストしようとした時、エラーになってしまうので調査したところ、 1024文字を越えた時点で自動的に改行?が入ってしまいクエリーが変なところで切れてしまいます。 何か対応する方法はありますか? ちなみに文字列変数を2・3作成し、後で1つにまとめると言うこともやってみたんですが、結果が同じで。。。
- 締切済み
- Visual Basic
- Accessでクロスタブ集計クエリの結果の列を固定にしたい。
Access2007を使っています。 フィールド1においてAまたはBに一致するもののみをフィールド2(あ、い、う、え、・・)ごとに Countするというクロスタブ集計クエリを作成しました。 デザインビューで見たCriteria行には「"A" or "B"」と入っています。 結果は、 A B あ 1 い 2 2 う 1 え 1 ・ ・ ・ ・ ・ ・ のような感じになります。 この結果を他のクエリ(クエリX)で参照し、AやBという列を使っているため、 もしも、AもしくはBが元のフィールド2の中に1レコードも無い場合、 クロスタブ集計の結果からAもしはBの列そのものがなくなってしまい、 クエリXを実行した際にエラーとなってしまいます。 フィールド2内のAやBのレコード有無に関係なく、常にクロスタブ集計クエリの 結果を一定にする方法はありませんでしょうか?
- ベストアンサー
- その他MS Office製品
- MS Access 複数文字列の置き換えについて
アクセスはデザインビューでクエリを組むことができる程度の初心者です。 できればSQLを直接いじらずにもできる方法でお教え頂ければ幸いです。 1つのテーブル内に30種類の文字を置き換えたい列が10個あります。 置き換えたい列A~Jには、それぞれ異なるデータが入っていますが、置き換えたい内容は同じです。 01~30までの数値をそれぞれ対応する文字あ~ほに置き換えたい列が10個あるということです。 クエリを組んでreplaceやswitchを使うには式が長すぎると怒られてしまいますし、変換用のテーブルを作ろうにも置き換えたい列が10個もあるのでうまく繋げません。 変換用テーブルを10個作ればできるのかもしれませんが、さすがにそこまで無駄なテーブルは作るのは抵抗があります。 何かスマートな方法があればと探しています。 よろしくお願い致します。
- 締切済み
- その他MS Office製品
- Access クエリより集計という列の使い方
単純な質問ですいません。 クエリで、Σマークをクリックすると集計という行が出て グループ化と表示されています。 このグループ化とはどういう意味でしょうか。 また、演算をかけてある列フィールドに対しては“演算”を選んだ方がいいのでしょうか。 とか、合計をかけてある列フィールドには“合計”を選んでおいたほうがよい?。。 ちょっとよくわかりません・・。
- ベストアンサー
- オフィス系ソフト
- Accessのテーブルの文字列フィールドにVBAでアクセスするには?
いつもお世話になっております。困っていることがありますので教えていただければ幸いです。 AccessのテーブルAに、メモ型のフィールドBがあり、1000文字くらいの文字が入っています。VBAの関数Cの中でそのテーブルにアクセスし、1000文字をいろいろ処理したいと思っています。見よう見まねで試しに Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim FileNum As Integer Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open テーブルA, cn, adOpenDynamic, adLockOptimistic msgbox !フィールドB としてみたのですが、なぜか255文字までしか表示されません。VBAを用いてテーブル(やクエリ)にアクセスし、256文字以上の文字列を扱う方法はありませんでしょうか? 何かこちらで勘違いしているところがありましたら、ご指摘いただければと思います。よろしくお願いします。
- 締切済み
- オフィス系ソフト