dポイントプレゼントキャンペーン実施中!

こんにちわ。
いつもお世話になっております。

以下の図で説明させて下さい。

テーブルA
ID | 氏名 |  内容 |
------|--------|--------------|
1 | テスト| 項目1:契約 |
1 | テスト| 項目2:解約 |
1 | テスト| 項目3:不明 |
2 | 試験 | 項目1:契約 |
2 | 試験 | 項目2:解約 |
------------------------------

テーブルB
ID | 氏名 |  項目1 |  項目2 |  項目2 |
------|--------|--------------|--------------|--------------|
1 | テスト| | | |
2 | 試験 | | | |
------------------------------------------------------------

テーブルAの内容にある文字列をテーブルB
の同じIDのレコードに更新したいと考えています。

例えばテーブルAのID1番の「項目1:契約」を「項目1:」以降の文字列をテーブルBの
項目1に更新したいと言った感じなのです。

最終的にはテーブルAの内容を全てループ等でテーブルBに更新したいのですが
いいアイディアが思いつきません。

どなたかご教示頂けますでしょうか?
よろしくお願い致します。

A 回答 (2件)

ループによる処理方法も考えてみましたが、ちょっと面倒そうでしたので、以下の方法を


代替策として提案します。
下記のクロス集計クエリ(クエリA)とテーブル作成クエリ(クエリB)を作成して、クエリBを
実行すると、テーブルBが得られます。

クエリA:
TRANSFORM First(Mid([内容],5)) AS 内容詳細
SELECT テーブルA.氏名
FROM テーブルA
GROUP BY テーブルA.氏名
PIVOT Left([内容],3);

クエリB:
SELECT クエリA.氏名, クエリA.項目1, クエリA.項目2, クエリA.項目3 INTO テーブルB
FROM クエリA
WITH OWNERACCESS OPTION;

※「項目」が1~3以外もある場合は、クエリAを基にした追加クエリを新規作成して下さい。
  (「項目1」が「項目I」(→アルファベットのアイ)や「個目」(→「こうもく」を「こもく」と打った)
  になっているなど、「項目」部分のデータ誤記をチェックする意味でも、この手順を踏む
  方が無難かもしれません)


なお、上記のクエリは、「:」が常に4文字目にある前提で組んでいます。
もしも「項目10:エラー」といった、「:」が4文字目以外のデータにも対応する必要がある
場合は、クエリAを以下のように変更してください:
TRANSFORM First(Mid([内容],InStr([内容],":")+1)) AS 内容詳細
SELECT テーブルA.氏名
FROM テーブルA
GROUP BY テーブルA.氏名
PIVOT Left([内容],InStr([内容],":")-1);

但し、こちらにすると、全てのデータに必ず「:」が含まれていることが前提になります。
(含まれていないデータがある場合、「プロシージャ呼び出しが正しくありません」との
 エラーが表示され、クエリAの結果が表示できず、クエリBもエラーになります)
「:」を間違えて「;」と入力しているなど、「:」を含まないデータは、以下のクエリで確認
できます:
SELECT テーブルA.内容
FROM テーブルA
WHERE (((テーブルA.内容) Not Like "*:*"));


・・・以上です。
    • good
    • 0
この回答へのお礼

DexMachinaさま

ありがとうございます。
自分もループを考えていたのですがややこしくて困っておりました。。。

クロス集計は思いつきませんでした。
助かりました!ありがとうございます。

うまく期待通りの動きになりました。

エラーまで予測に入れて頂き、ご丁寧なご教示を頂きました事感謝致します。

ありがとうございました。

お礼日時:2008/02/04 22:39

これはエクセルの質問ですか。

書いてないのでは。
質問の例は丁寧なんだが何を言っているか判らない。
>例えばテーブルAのID1番の「項目1:契約」を「項目1:」以降の文字列をテーブルBの項目1に更新したいと言った・・
など。
氏名と見出しを付けたら、山田とか鈴木としたらどうです。
氏名が試験やテストとは見るものが混乱する。
更新というのもプログラム用語でわかりにくい。
表現として、「同じ氏名の複数行のデータについて、氏名以外の情報を1行にまとめたい」というのはどうかな。
VBAでやるのが一番簡単な考え方になると思う。
行的に、同じ氏名が続く限り、右列に順次項目を追加すればよいのでしょう。
>アイディアが思いつきません。
プログラム経験が非常に少ないからだよ。

この回答への補足

ありがとうございます。

>これはエクセルの質問ですか。書いてないのでは。
失礼しました。ACCESSとなります。

>質問の例は丁寧なんだが何を言っているか判らない。
申し訳ありません。
例えばテーブルAの「ID」1番の内容にあります「項目1:契約」「項目2:解約」「項目3:不明」をテーブルBの項目1に「契約」を項目2に「解約」を項目3に「不明」を1行にまとめたいと考えて考おります。
しかし、VBAを書きたいのですがイメージが湧かないという状態です。

>氏名と見出しを付けたら、山田とか鈴木としたらどうです。
>更新というのもプログラム用語でわかりにくい。
確かにそうですね。
以後、気をつけさせて頂きます。

>プログラム経験が非常に少ないからだよ。
仰るとおりです。
経験を積んで行きたいと思っております。

よろしければご教示下さいませ。

補足日時:2008/02/02 18:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!