No.5ベストアンサー
- 回答日時:
以前の回答からの引用が多くなりますが
Mid 部分について
> > sTmp = sTmp & "、" & rs("分類2")
> 抽出された分類2を1つの文字列として作っていきます。
> 作られた文字列は、分類1="B" であった場合
> sTmp = "、1-1、1-2" となります。
> 関数の戻り値を設定する時、
> 1つでも分類2が抽出されていれば文字数は0以上となっていますが
> 作った文字列先頭の "、" は不要なため、2文字以降ということで Mid(sTmp, 2) とします
> ClassString = IIf(Len(sTmp) > 0, Mid(sTmp, 2), "")
は分かりづらいですね。
以下の書き方と一緒です。
(こちらの方が処理は速いようです:確かではありませんが)
If (Len(sTmp) > 0) Then
ClassString = Mid(sTmp, 2)
Else
ClassString = ""
End If
> ※「ClassString」という名前は適宜変更してください。
> ネットでclassstringを調べたのですが、・・・
「ClassString」という名前は、かってに命名した名前です。
標準モジュールに「ClassString」名で関数を作成したので、
クエリからその関数名で結果を得ようとしています。
標準モジュールに作成した関数名が「HogeHogeXX」なら、
クエリにも HogeHogeXX を記述することで関数の戻り値を利用できます。
回答番号3に記述した URL 内の回答4 にもう少し記述しています。
読んで、また分からなかったら 補足/お礼の欄に書いてください。
なるほどです。
(回答が遅くなってすみません!!)
まだまだ勉強が足りないですが、
わかってくるととても楽しいです。^^
どうもありがとうございました。
No.4
- 回答日時:
以下の環境で再度試してみました。
Windows2000Pro + Access2000
Windows XP Pro + Access2003
Windows Vista + Access2007
正常動作を確認できました。
ただ、1つのファイル(mdb/accdb)で完結していた環境となります。
(パススルークエリでは使えない方法です)
確認した手順:Access2003での)
・テーブルサンプルのCSV化
テーブルサンプルをメモ帳にコピー
全角スペースを半角 , に置換
半角 ,, を , に置換( , が1つになるまで)
行先頭 , 削除
ファイルへセーブ
・Access を起動し、新規mdb作成
・CSVファイルを指定テーブル名でインポート
・VBE起動
(メニューの「ツール」->「マクロ」->「Visual Basic Editor」)
・VBE画面で
参照設定の追加(メニューの「ツール」->「参照設定」)
Microsoft ActiveX Data Objects 2.1 Library
標準モジュールの挿入(メニューの「挿入」->「標準モジュール」)
Public Function ~ End Function 部分を貼り付け
・クエリの作成
「デザインビューでクエリを作成する」より、テーブル選ばず閉じるボタン
SQLビューへ表示変更
表示されているものを消去し、提示SQLビュー内容を貼り付け
表示を「データシートビュー」にすると、結果が表示されるはずです。
※「ClassString」という名前は適宜変更してください。
※ なぜエラーとなったか、わかりませんでした。
本当にご丁寧にありがとうございます。
書いてある通りの手順で実行したところ、うまくいきました!
が、どうしてもどうしても理解が追いつきません。。
つまりこれは、標準モジュールのほうでは、1件づつデータを読んでいて、"&sclass&"部分で、クエリのほうの実行結果を流用しているということなのでしょうか? また、STMPは、結果のテーブルを作っていて、
最後のmidはなにをしているのでしょうか?ここでもclassstring???
かなり混乱していてすみません。ネットでclassstringを調べたのですが、いまいち理解しきれず、再度質問してしまいました。
どうぞよろしくお願いしますm(_ _ )m
No.3
- 回答日時:
ちょっと考えてみます。
(ただ、私に考えれるかどうか疑問もありますが、あまり期待しないでください)
追加回答できなかったらごめんなさい。
その間、ここでも読んでみてください。
http://www.kotaete-net.net/Default.aspx?pgid=14& …
No.2
- 回答日時:
他で回答したものと同じなのですが参考になれば。
テーブル「T_分類」が以下のようになっている時(どちらもテキスト型)
分類1 分類2
A 1
B 1-1
B 1-2
C 1-A
C 1-B
C 1-C
クエリ操作で
分類1 分類
A 1
B 1-1、1-2
C 1-A、1-B、1-C
とする方法になります。
クエリのSQLビュー内容)
SELECT [分類1], ClassString([分類1]) AS 分類
FROM T_分類
GROUP BY [分類1]
ORDER BY [分類1];
標準モジュールに記述する関数)
Public Function ClassString(sClass As String) As String
Dim rs As New ADODB.Recordset
Dim sTmp As String
sTmp = ""
rs.Source = "SELECT [分類2] FROM T_分類 WHERE [分類1]='" & sClass & "' ORDER BY [分類2] ;"
rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic
While (Not rs.EOF)
sTmp = sTmp & "、" & rs("分類2")
rs.MoveNext
Wend
rs.Close
ClassString = IIf(Len(sTmp) > 0, Mid(sTmp, 2), "")
End Function
> sTmp = sTmp & "、" & rs("分類2")
抽出された分類2を1つの文字列として作っていきます。
作られた文字列は、分類1="B" であった場合
sTmp = "、1-1、1-2" となります。
関数の戻り値を設定する時、
1つでも分類2が抽出されていれば文字数は0以上となっていますが
作った文字列先頭の "、" は不要なため、2文字以降ということで Mid(sTmp, 2) とします。
この回答への補足
丁寧に教えてくださってありがとうございます。
すごく初歩的なところで、わかっていないので、教えてください。。
上記にあるようなテーブルを作ってクエリを書いてモジュールも作成してみましたが、、そうしてクエリを実行すればうまくいく、というものでもないんでしょうか?
エラーMSGとしては、クエリ式ClassString([分類1]のあいまいな名前です。と出ています。
クエリとモジュールの関係性がまだあまりわかっていないため、
質問がおかしかったらすみません。
どうぞよろしくお願いします。
No.1
- 回答日時:
一列づつ3行出力するのがよいのではないでしょうか?
SELECT データ FROM テーブル WHERE 名前='ABC'
ありがとうございます。
ですが、やはり、横展開のデータが必要なのです。。
ABC を "名前" 30 を"データ"とすると、
select 名前,データ from テーブル
group by 名前
でやると、 ABCは1件だけが出力され、他のデータは消えてしまいますので、やはりgroup byは使えず・・。
というところで悩んでいるのです。
名前には何がはいってくるか未定なので、where句で直接聞くわけにもいかずです。
どうぞよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 角が同じならsinは同じになるのでしょうか 1 2022/09/06 00:12
- 数学 数学の問題の解き方を教えて下さい。 ∠Aが直角の直角三角形ABCで、∠Bの二等分線と辺ACとの交点を 7 2022/05/06 21:52
- Excel(エクセル) 早急に教えていただきたいんですけど、e-statからexcelデータをダウンロードしたんですが横スラ 1 2023/05/12 01:04
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
- PHP PHPでMysqlにデータがあるかどうか判別したい 1 2023/03/02 11:48
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/10 08:51
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/03/09 14:24
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
Accessでグループ化した結果フィールドをつなげるには?
その他(Microsoft Office)
-
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
複数のレコードを1つのレコードにまとめる方法
Access(アクセス)
-
-
4
アクセス 同じフィールド(テキスト型)のレコードを連結させたい
Access(アクセス)
-
5
Accessでテキストが合体できる関数ないですか?
Access(アクセス)
-
6
[Access]異なるレコード間の文字列連結
その他(データベース)
-
7
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
8
アクセス 項目毎にデータを横に並べる方法
Access(アクセス)
-
9
ACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?
Access(アクセス)
-
10
ACCESS 一つのフィールドに複数レコードの値をセットしたい
その他(データベース)
-
11
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
12
「#エラー」の回避
Access(アクセス)
-
13
サブフォームの行ごとにコンボボックスの表示項目を変更する方法が知りたいです
Visual Basic(VBA)
-
14
IF関数で空欄(")の時、Nullにしたい
その他(Microsoft Office)
-
15
ACCESS テーブルを見比べて、一致したレコードを抽出したいです
Access(アクセス)
-
16
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
17
「RunSQL」と「Execute」の違い
Access(アクセス)
-
18
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
19
【ACCESS/必須条件とOR条件を組み合わせる】
その他(Microsoft Office)
-
20
行方向のデータを横に並べる
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
デザインビューにてテーブルが...
-
更新不可能なクエリに対して更...
-
クロス集計クエリの結果をテー...
-
クエリのデータをテーブルに入...
-
教えてください! アクセスのac...
-
Access「レコードが削除されま...
-
アクセスのクエリでSplit関数は...
-
ACCESSでの重複レコードの削除
-
accessでクエリの結果だけをリ...
-
ACCESSで行数指定(5万行目~8...
-
アクセス 項目毎にデータを横...
-
アクセス クロス集計クエリ→テ...
-
Accessでテキストが合体できる...
-
access テーブル作成クエリでテ...
-
テンポラリファイルのための空...
-
Access2007 クエリが読み取り...
-
クエリについて教えてください
-
ACCESS テーブル作成の日付付与...
-
Accessクエリの、JOINの数の限...
-
Accessのクロス集計→テーブル作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
アクセス:クエリの結合とリレ...
-
Access「レコードが削除されま...
-
アクセスのクエリでSplit関数は...
-
クエリのデータをテーブルに入...
-
accessでクエリの結果だけをリ...
-
デザインビューにてテーブルが...
-
アクセス 項目毎にデータを横...
-
ACCESSで行数指定(5万行目~8...
-
access インポート時、既にある...
-
教えてください! アクセスのac...
-
更新不可能なクエリに対して更...
-
アクセス クロス集計クエリ→テ...
-
ACCESSでの重複レコードの削除
-
Accessのクロス集計→テーブル作...
-
access テーブル作成クエリでテ...
-
Access DAOのExecuteメソッドの...
-
Access2010「クエリが複雑すぎ...
-
Access 末尾に0を追加したい
-
エクセル複数シートをアクセス...
おすすめ情報