プロが教えるわが家の防犯対策術!

作業環境は以下の通りで、Accessの知識は初心者です。
OS:Windws7/使用ソフト:Access2003

やりたい事はこれに近いのですが、もう一ひねりある為困っています。
http://oshiete.goo.ne.jp/qa/2452277.html?from=re …

テーブルに以下のようなデータがあります。
薬剤/配番/効果/使用方法
A剤/00001/頭痛/1回1錠
A剤/00002/発熱/食後…(長文)
B剤/00001/頭痛/1回2錠
B剤/00003/裂傷/清潔な手で…(長文)

これを薬剤名ごとに、効果(数は120を超えます)と使用方法を横へ並べる事はできますか?

※添付画像が削除されました。

A 回答 (15件中11~15件)

まず、#4 の差し替えですが確認したところ、


256文字以降が切り捨てられてしまいますので

Q使用方法は元に戻してください。
TRANSFORM First(Tbl.[使用方法]) AS 使用方法の先頭
SELECT Tbl.薬剤
FROM Tbl
GROUP BY Tbl.薬剤
PIVOT '使用方法' & Tbl.[配番];


で、
>「このフォームまたはレポートは、1つのレコードのデータの制限を超えるクエリを基にしています」
また、使用方法の中に半角カンマ , がある可能性も考えてしまいます。
なので、VBA で処理するしかありません。
(Excel2007以降があれば、
Q効果とQ使用方法をExcelに出力して列を切り貼りして整形後にCSV出力・・も考えられますけど。。)

VBA での処理でも構わなければ、
CSV で出力した時のフォーマットを教えてください。
各フィールドはダブルクォーテーションで囲むのか。
"A剤","頭痛","1回1錠","発熱","食後…(長文)",
値が無い場合にもダブルクォーテーションが必要か否か。
"A剤","頭痛","1回1錠","発熱","食後…(長文)", を↓
"A剤","頭痛","1回1錠","","", 必要例
"A剤","頭痛","1回1錠",,, 不要例

ヘッダー(タイトル)が必要か否か。(これも囲みの有無)
薬剤/効果1/使用方法1/効果2/使用方法2 /効果3/使用方法3    /・・・

文字コードは、Shift_JIS で良いのか。

他にも何かあれば、それも含めて確認し、教えてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> Q使用方法は元に戻してください。
私の回答によりSQL文を差し替えて下さったのにすみません…
早速元に戻しました。

> また、使用方法の中に半角カンマ , がある可能性も考えてしまいます。
使用方法には半角カンマの他、ダブルクォーテーションが含まれており、改行は含まれておりません。

> なので、VBA で処理するしかありません。
カンマが含まれる場合はVBAでの処理になってしまうのですね。

SQL文は今後なんとか理解できそうな内容でしたが、VBAとなると今の私のレベルでは理解できるようになるのはかなり先の話です。
それなのにVBAを記述していただくのはありがたい事ですが、気が引けます…
…が、折角なので質問に対する回答を記載しました。


> CSV で出力した時のフォーマットを教えてください。
フォーマットというのは以下の質問に答える形で間に合いますか?
それともフィールドのデータ型みたいな内容が必要でしたでしょうか?

> 各フィールドはダブルクォーテーションで囲むのか。
全てのフィールドをダブルクォーテーションで囲みます。

> 値が無い場合にもダブルクォーテーションが必要か否か。
値が無い場合もダブルクォーテーションが必要となります。

> ヘッダー(タイトル)が必要か否か。(これも囲みの有無)
ヘッダーは必要で、ヘッダーのダブルクォーテーションは不要です。

> 文字コードは、Shift_JIS で良いのか。
Shift_JISで大丈夫です。

あと、区切り文字はカンマです。

お礼日時:2014/09/01 17:39

追伸、CSV出力を考えるとクエリ二個は以下に差し替えた方が良さそうです。



Q効果は
TRANSFORM Iif(Isnull(First(Tbl.[効果])),'',First(Tbl.[効果])) AS 効果の先頭
SELECT Tbl.[薬剤]
FROM Tbl
GROUP BY Tbl.[薬剤]
PIVOT '効果' & Tbl.[配番];

Q使用方法は
TRANSFORM Iif(Isnull(First(Tbl.[使用方法])),'',First(Tbl.[使用方法])) AS 使用方法の先頭
SELECT Tbl.[薬剤]
FROM Tbl
GROUP BY Tbl.[薬剤]
PIVOT '使用方法' & Tbl.[配番];
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

テスト環境で試したところ、うまくいきました!

ただ、本番環境で試したところ、やはりフィールド数の多さからか(247ありました)
「このフォームまたはレポートは、1つのレコードのデータの制限を超えるクエリを基にしています」
と小窓が開き、表示されませんでした。

Q効果、Q使用方法、Q薬剤については問題なく表示されます。

今はまだ、このSQL文がどんな命令をしてるか分からないまま入力したのですが、時間を作って理解を深めようと思います。
わざわざ考えて頂いてありがとうございました。

お礼日時:2014/08/30 19:00

>とりあえずチャレンジしてみたいので、このように両方保存いたしました。


両クエリは問題なかったのでしょうか検証済み?

>正確な数は122×2の為、255は超えないようです。
では余計な心配はしないことにします。

クエリをさらにもう一個、SQL文は
SELECT DISTINCT 薬剤 FROM Tbl;
これは、名前を Q薬剤 にして保存。

これが最後のクエリ
Q薬剤、Q効果、Q使用方法を新規クエリのデザインウィンドウにドラッグ、
Q薬剤とQ効果の薬剤同士を結合、
Q薬剤とQ使用方法の薬剤同士を結合、
Q薬剤の薬剤をデザイングリッドにドラッグ、
Q効果の効果1、使用方法1、効果2、使用方法2、効果3、使用方法3、・・・・、使用方法122
と交互にドラッグします。
データシートビューに切り替えて確認してみてください。
OKだったら、名前は適当に保存。
あとはリボンのエクスポートからテキストファイルを選択し
ウィザードに従ってこのクエリをエクスポートしてみてください。
「Accessで縦に情報が展開されてるテー」の回答画像3
    • good
    • 0

薬剤/配番/効果/使用方法


A剤/00001/頭痛/1回1錠
A剤/00002/発熱/食後…(長文)
B剤/00001/頭痛/1回2錠
B剤/00003/裂傷/清潔な手で…(長文)

薬剤/効果1/使用方法1/効果2/使用方法2 /効果3/使用方法3    /・・・
A剤/ 頭痛/  1回1錠/ 発熱 /食後…(長文)/
B剤/ 頭痛/  1回2錠/    /      /裂傷 /清潔な手で…(長文)/・・・
のようなイメージ?にしたいということでしょうか?
現時点で
>数は120を超えます(120×2)
なのでAccessの扱えるフィールド数は最大でも255以下の制限に間もなく引っかかりそうです。
【崖っぷち状態です】
制限を超える可能性があるのでは?

とりあえず、クロス集計までは、
テーブル名を、Tbl とします。
新規クエリをデザインビューで開いて、
『テーブルの表示』の小窓は閉じます。
右クリックすると「SQLビュー」がリストにありますので選択、
SELECT: って書いてあるので消去し
そこへ下記をコピペ
TRANSFORM First(Tbl.[効果]) AS 使用方法の先頭
SELECT Tbl.[薬剤]
FROM Tbl
GROUP BY Tbl.[薬剤]
PIVOT '効果' & Tbl.[配番];

データシートビューに切り替えると
薬剤 効果1   効果2   効果3
A剤  頭痛   発熱
B剤  頭痛         裂傷
となります。このクエリを、Q効果 とでも命名して保存。

もう一個同様に、
TRANSFORM First(Tbl.[使用方法]) AS 使用方法の先頭
SELECT Tbl.[薬剤]
FROM Tbl
GROUP BY Tbl.[薬剤]
PIVOT '使用方法' & Tbl.[配番];

薬剤 使用方法1 使用方法2 使用方法3
A剤   1回1錠   食後
B剤   1回2錠        清潔な手
になります。これは、Q使用方法 とでも保存。
(使用方法フィールドがメモ型だと厄介かも)

さて、ここからが前述の255の制限を超える可能性の有無で分かれます。
CSVのフォーマットの具体例もないので
とりあえず、ここまで。

余談ですが
また、めでたくCSVが完成したとしてアップロードして
使ってみたら「使いにくいので再考」になったら・・と考えてしまいます。。。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

薬剤/効果1/使用方法1/効果2/使用方法2 /効果3/使用方法3    /・・・
A剤/ 頭痛/  1回1錠/ 発熱 /食後…(長文)/
B剤/ 頭痛/  1回2錠/    /      /裂傷 /清潔な手で…(長文)/・・・
のようなイメージ?にしたいということでしょうか?

その通りです。

使用方法フィールドはメモ型です。
120×2…単純に×2になる事を理解していませんでした


> Q効果 とでも命名して保存。
> Q使用方法 とでも保存。

とりあえずチャレンジしてみたいので、このように両方保存いたしました。
正確な数は122×2の為、255は超えないようです。

> 使ってみたら「使いにくいので再考」になったら・・と考えてしまいます。。。

データを抜き出したいだけなので問題ないハズ…です。

お礼日時:2014/08/29 16:09

lotus2014さんへ



 見せるだけで良いのなら、薬剤と配番と効果でクロス集計を作って、そのクエリに使用方法を連結するクエリを作ったものをソースにしたフォームで良いと思います。
 クロス集計は、効果を横に配置する形で、データ領域に配番を選択して、配番の集計方法を先頭としておけばOKです。
 他のクエリで、薬剤と使用方法のみをグループ化したものと、配番と効果のみをグループ化したものを作っておいて、先のクエリと薬剤、配番で連結すれば、薬剤+配番n個+効果n個+使用方法のクエリを作れます。

 入力を考えているとしたら、薬剤と使用方法をメインフォームにして、配番と効果をサブフォームにするようにテーブルに変更すれば良く、そこからの横並びは、前述の真似をしながら、それなりに作れば良いと思います。

この回答への補足

回答ありがとうございます。

入力することはなく、最終的にはアップロード用に「.csv」として出力させたい為、リレーションされた内容が横1行に吐き出されるようにしたいのです。

> 先のクエリと薬剤、配番で連結すれば、…

がうまくいかない(配番が表示されない)のですが、クロス集計の設定が間違っているのでしょうか?

薬剤/効果1/効果2/効果3
A剤/00001/空 欄/00002
B剤/00001/空 欄/空 欄
C剤/00001/000003/空 欄

補足日時:2014/08/28 18:01
    • good
    • 0

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