ループによる処理方法も考えてみましたが、ちょっと面倒そうでしたので、以下の方法を
代替策として提案します。
下記のクロス集計クエリ(クエリ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 "*:*"));
・・・以上です。
お礼
DexMachinaさま ありがとうございます。 自分もループを考えていたのですがややこしくて困っておりました。。。 クロス集計は思いつきませんでした。 助かりました!ありがとうございます。 うまく期待通りの動きになりました。 エラーまで予測に入れて頂き、ご丁寧なご教示を頂きました事感謝致します。 ありがとうございました。