ACCESSの質問です。Ver.2003です。

FLD1 FLD2
001  A
001  C
002  B
002  D
002  E
003  F
003  C

といったテーブルがあるのですが、これを基に

001  AC
002  BDE
003  FC

というクエリを作成するには
どうしたらよいでしょうか。

実際には

001  A
    C
002  B

といったように
AとCの間には改行が入るようにしたいです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/04/02 15:35:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:takejin No.1

回答回数1543ベストアンサー獲得回数203

ポイント60pt

クエリのみでこの操作は、無理と思われます。

VBAを記述する必要があります。

RecordSet1 : 元のテーブル

RecordSet2 : 回答テーブル(テーブル名:TBL_2)

とすれば、

Do Until(RecordSet1.EOF)

SQL_2="SELECT * FROM TBL_2 WHERE FLD1 = '" & RecordSet1!FLD1 & "';"

Set RecordSet2=Currentdb.OpenRecordset(SQL_2,dbOpenDynaset)

if RecordSet2.RecordCount > 0 then

RecordSet2.Edit

RecordSet2!FLD2 = RecordSet2!FLD2 & chr$(13) & CHR$(10) & RecordSet1!FLD2

RecordSet2.update

else

RecordSet2.AddNew

RecordSet2!FLD1 = RecordSet1!FLD1

RecordSet2!FLD2 = RecordSet1!FLD2

RecordSet2.Update

end if

RecordSet1.MoveNext

Loop

的なプログラムを記述する必要があります。

id:rupopon

ありがとうございます。

試してみます。

2009/03/27 10:29:05
  • id:kn1967
    (1)文字列を1つに集約
    レコード数の最大数(例であれば002 BDEの3レコード分)が判るのであれば
    クエリでも何とか対応可能ですが、増えれば増えるほど複雑になりますし
    最大数を特定できないのであれば・・・つまり、基本的にクエリだけでは出来ません。
    VBAを使うだけのスキルをお持ちであれば20行程度の短いプログラムで
    1レコードずつ読み込んで集計させる事も可能ですが・・・。

    (2)改行
    改行コードを挿入するだけなのでクエリでも可能。
  • id:rupopon
    コメントありがとうございます。
    最大数は正確な数字でないとダメでしょうか。
    いくつ以内というのであれば特定できます。
    多くても10~20以内です。

    VBAもよろしければ教えてください。
  • id:kn1967
    私の考える方法としては
    (a)順位付けするクエリ
    (b)横に結合するクエリ
    の2つを組み合わせるのですが(b)のほうが
    最大数にあわせて箱を用意するようなもののため
    最大数を超えていると・・・ダメです。

    VBAのコードを貼り付けて動かせる場合もありますが
    VBAを使う時点で”データベース操作ではなくプログラミング作業”
    となりますので一度足を踏み入れてしまうと次回以降、どんどんと
    ハードルが高くて効率の悪い仕事が回ってくるようになることでしょうし
    そうなると自分の首を絞めるだけになりますので、私は書きません。
    # 既にAccessVBAのスキルをお持ちであれば、
    # 比較的基本的な操作になりますので書くまでも無いことでしょうし
    # ”Accessにそういった機能は無い”のだから無理をしないと割り切って
    # 別の手段を考えたり、あるいは、作業自体を早々に断念するといった決断を
    # 出来る人が出世していきました・・・。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません